我正在尝试从C#应用程序打开Word文档,插入宏,运行它,然后关闭。我遇到的问题是
编译错误:参数不是可选的
我一直在查看this文章,但我没有回复任何内容。没看到我在这里失踪的东西。
这是调试器:
这是C#代码:
Microsoft.Office.Interop.Word.Application newApp = new Microsoft.Office.Interop.Word.Application();
newApp.Visible = true;
object Unknown = Type.Missing;
var Source = fileName;
var doc = newApp.Documents.Open(Source);
var project = doc.VBProject;
var module = project.VBComponents.Add(vbext_ComponentType.vbext_ct_StdModule);
var macro = "Public Sub DoKbTest()\r\n" +
"MsgBox 'Hello'\r\n" +
"End Sub\r\n" +
"Public sub DoKbTestWithParameter(sMsg As String)\r\n" +
"MsgBox sMsg\r\n" +
"End Sub";
module.CodeModule.AddFromString(macro);
newApp.Run("DoKbTest");
newApp.Quit(ref Unknown, ref Unknown, ref Unknown);
答案 0 :(得分:5)
VBA中的单引号表示评论。这就是你正在产生的东西:
Public Sub DoKbTest()
MsgBox 'Hello'
End Sub
比较:
Public Sub DoKbTest()
MsgBox "Hello"
End Sub
请注意语法高亮显示在字符串文字周围用双引号看起来不同。
您收到该错误是因为MsgBox
函数的Message
参数不是可选的,因此MsgBox [some comment]
指令不是有效的函数调用。
我建议使用逐字字符串,它更清晰IMO - 简单地加倍双引号以逃避它们:
var macro = @"
Public Sub DoKbTest()
MsgBox ""Hello""
End Sub
Public Sub DoKbTestWithParameter(ByVal msg As String)
MsgBox msg
End Sub
";
答案 1 :(得分:0)
使用DoubleQuotes将文本引用到MsgBox。
var macro = "Public Sub DoKbTest()\r\n" +
"MsgBox ""Hello""\r\n" +
"End Sub\r\n" +
"Public sub DoKbTestWithParameter(sMsg As String)\r\n" +
"MsgBox sMsg\r\n" +
"End Sub";