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 _
)
任何人都可以帮我解决错误吗?
答案 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) &
中拼接的文字是糟糕策略。