VBS结束语句预期错误

时间:2013-03-21 12:55:10

标签: vbscript

strCode = "Private Sub AcclvsTime() " & vbCr _
 & "Set myChtObj = oExcelWriteWorkSheet.ChartObjects.Add(100,375,75,225) "& vbCr _
 & "myChtObj.Chart.ChartType = 4 " & vbCr _
 & "myChtObj.Chart.SetSourceData  objWriteWorkbook.Sheets("sheet2").Range("A1:B15")" & vbCr _
& "End Sub"
objWriteExcel.VBE.ActiveVBProject.VBComponents.Item("Sheet1").CodeModule.AddFromString(strCode)

当我执行此代码时,我收到错误“第4行预期语句的结尾”(& "myChtObj.Chart.SetSourceData objWriteWorkbook.Sheets("sheet2").Range("A1:B15")" & vbCr _

任何人都可以帮我解决错误吗?

3 个答案:

答案 0 :(得分:0)

" ... Range("A1:B15")" & vbCr

请注意第四行(适用于"sheet2""A1:B15")的引号内的引号 - 您需要解决此问题。

如果你想在引号内加上引号,你可以通过转义来实现。双引号字符串中的两个连续"个字符将被转换为单个"

"the word ""xyzzy"" is quoted"

或者,您也可以使用chr(34)获取引用:

"the word " & chr(34) & "xyzzy" & chr(34) & " is quoted"

在更复杂的情况下,这可能更为可取,但我很少需要它。

答案 1 :(得分:0)

@paxdiablo:我会评论,但没有看到评论按钮。

请注意,Range("A1:B15")"&的第二个引用。 vbCr从"myChtObj.Chart.SetSourceData

开始

拥有完整的代码块会有所帮助,因为我们无法分辨出您需要什么样的结束语句。即,您的"End Sub"是双引号。如果那是sub的结尾,你需要将它们拿出来。

答案 2 :(得分:0)

通过连接构建字符串很麻烦且错误。特别是,如果结果是多行字符串,请使用Join:

strCode = Join( Array( _
        "Private Sub AcclvsTime()" _
      , "  Set myChtObj = oExcelWriteWorkSheet.ChartObjects.Add(100,375,75,225)" _
      , "  myChtObj.Chart.ChartType = 4" _
      , "  myChtObj.Chart.SetSourceData objWriteWorkbook.Sheets(""sheet2"").Range(""A1:B15"")" _
      , "End Sub" _
), vbCrLf)
WScript.Echo strCode

输出:

Private Sub AcclvsTime()
  Set myChtObj = oExcelWriteWorkSheet.ChartObjects.Add(100,375,75,225)
  myChtObj.Chart.ChartType = 4
  myChtObj.Chart.SetSourceData objWriteWorkbook.Sheets("sheet2").Range("A1:B15")
End Sub

减少&和重复内容vbCr(Lf)造成的噪音。这将提高你看到问题/错误的机会。 (正好两个文字 - " sheet2"," A1:B15" - 引用)。

地址备注:

鉴于罪魁祸首是:

"whatever("sheet2").Range("A1:B15")"
很明显,补救措施

"whatever(""sheet2"").Range(""A1:B15"")"

更容易阅读/检查/写入和更少的错误
"whatever(" & Chr(24) & "sheet2" & Crh(34) & ").Range(" & Chr(34) + "A1:B15" & Chr(32) & ")"

避免""在& Chr(34) &中拼接的文字是糟糕策略。

相关问题