无法运行宏xx.可能在此工作簿中不可用,或者所有宏都已禁用

本文关键字:或者 工作簿 xx 运行 | 更新日期: 2023-09-27 18:11:47

我试图执行以下代码

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。"可能不在本工作簿中或全部可用禁用宏。"

如何解决错误?有什么建议吗?

无法运行宏xx.可能在此工作簿中不可用,或者所有宏都已禁用

我只是稍微修改了一下你的代码,它运行得很好

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using VBIDE = Microsoft.Vbe.Interop;
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Excel.Application xlexcel;
            Excel.Workbook xlWorkBook;
            VBIDE.VBComponent newStandardModule;
            VBIDE.CodeModule codeModule;
            object misValue = System.Reflection.Missing.Value;
            const string excelFile = @"C:'Users'Siddharth'Desktop'Sid.xlsm";
            xlexcel = new Excel.Application();
            xlexcel.Visible = true;
            // Open a File
            xlWorkBook = xlexcel.Workbooks.Open(excelFile, misValue, 
                         misValue, misValue, misValue, misValue, misValue,
                         misValue, misValue, misValue, misValue, misValue, 
                         misValue, misValue, misValue);
            newStandardModule = xlWorkBook.VBProject.VBComponents.Add(
                                VBIDE.vbext_ComponentType.vbext_ct_StdModule);
            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.UsedRange.Value = xsheet.UsedRange.Value" + "'r'n";
            codeText +=    "    Next xsheet" + "'r'n";
            codeText +=    "End Sub";
            codeModule.InsertLines(lineNum, codeText);
            xlWorkBook.Save();
            // run the macro
            var macro = string.Format("{0}!{1}.{2}", xlWorkBook.Name, newStandardModule.Name, macroName);
            xlexcel.Run(macro,misValue, misValue, misValue,misValue, misValue, misValue,
            misValue, misValue, misValue, misValue, misValue, misValue,   misValue, misValue, misValue,
            misValue, misValue, misValue, misValue, misValue, misValue,  misValue, misValue, misValue,
            misValue, misValue, misValue, misValue, misValue, misValue);
            xlexcel.Quit();
        }
    }
}