【发布时间】:2015-09-11 10:22:25
【问题描述】:
我正在尝试执行以下代码
const string excelFile = @"C:\test.xls";
var excelApplication = new ExcelInterop.Application { Visible = true };
var targetExcelFile = excelApplication.Workbooks.Open(excelFile,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
var newStandardModule = targetExcelFile.VBProject.VBComponents.Add(vbext_ComponentType.vbext_ct_StdModule);
var codeModule = newStandardModule.CodeModule;
// add vba code to module
var lineNum = codeModule.CountOfLines + 1;
var macroName = "test";
var codeText = " Sub " + macroName + "()" + "\r\n";
codeText += " Dim xsheet As Worksheet" + "\r\n";
codeText += "For Each xsheet In ThisWorkbook.Worksheets" + "\r\n";
codeText += " xsheet.Select" + "\r\n";
codeText += "With xsheet.UsedRange" + "\r\n";
codeText += " .Value = .Value" + "\r\n";
codeText += " End With" + "\r\n";
codeText += "Next xsheet " + "\r\n";
codeText += "End Sub";
codeModule.InsertLines(lineNum, codeText);
targetExcelFile.Save();
// run the macro
var macro = string.Format("{0}!{1}.{2}", targetExcelFile.Name, newStandardModule.Name, macroName);
excelApplication.Run(macro,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing
);
excelApplication.Quit();
我总是收到以下错误
“无法运行宏 xx。可能在此工作簿中不可用或全部不可用 宏被禁用。”
如何解决错误?有什么建议吗?
【问题讨论】:
-
您是否打开了其他 Excel 实例?
-
1) Excel 中的宏安全设置是什么? 2) 直接保存在 C.\ 中总是一个坏主意。 3) 请添加标签 C# 和/或 Interop 标签。
-
调试代码并检查
macro在excelApplication.Run(macro, Type.Missing...中的值是什么 -
除非您的工作簿名称不包含空格,否则您需要在构建宏名称字符串时将其括在单引号中以供
Run使用。 -
@Rory 没错,你太棒了。
标签: c# excel excel-interop vba