0
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 _

任何人都可以帮助我错误在哪里?

4

3 回答 3

0

@paxdiablo:我会发表评论,但看不到评论按钮。

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

拥有完整的代码块会更好,因为我们无法确定您需要什么样的结束语句。即,你的"End Sub"是双引号。如果这是潜艇的尽头,你需要把它们拿出来。

于 2013-03-21T13:08:12.247 回答
0
" ... Range("A1:B15")" & vbCr

请注意第四行引号中的那些引号(对于两者"sheet2""A1:B15") - 您需要修复它。

如果你想在引号内加上引号,你可以这样做,通过转义。双引号字符串中的两个连续"字符将被转换为一个".

"the word ""xyzzy"" is quoted"

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

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

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

于 2013-03-21T12:58:29.197 回答
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) & ")"

通过在 s 中拼接来避免文字中的 ""& Chr(34) &是一个糟糕的策略。

于 2013-03-21T13:26:22.647 回答