插入 VB 宏会抛出 Argument not optional 错误
Inserting a VB macro throws Argument not optional error
我正在尝试从 C# 应用程序打开一个 Word 文档,插入一个宏,运行 它,然后关闭。我 运行 遇到的问题是
Compile Error: Argument not optional
我一直在查看 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);
使用双引号将 Text 引用到 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";
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
";
我正在尝试从 C# 应用程序打开一个 Word 文档,插入一个宏,运行 它,然后关闭。我 运行 遇到的问题是
Compile Error: Argument not optional
我一直在查看 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);
使用双引号将 Text 引用到 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";
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
";