【问题标题】:How to delete VB code from an Excel sheet using C#?如何使用 C# 从 Excel 工作表中删除 VB 代码?
【发布时间】:2010-06-01 10:14:13
【问题描述】:

有人知道如何使用 C# 从 Excel 工作簿中删除 所有 VB 代码吗? 此代码不起作用。它删除了第一个(最后一个)VBComponent,但在第二个时引发了 ArgumentException。

VBProject project = workbook.VBProject;
int componentsCount = project.VBComponents.Count;

for (int i = componentsCount; i >= 1; i--)
{
    VBComponent component = project.VBComponents.Item(i);
    project.VBComponents.Remove(component);
} 

有什么建议吗?

【问题讨论】:

  • 在 VBA 中,集合中的项目必须从 count 删除到 1 step-1。

标签: c# excel vb6 automation


【解决方案1】:

我在 Sam 的帮助下解决了这个问题。我怀疑每个 Excel 工作簿都有一些不可删除的 VBComponents,因此我们可以清除它们的内容,而不是删除它们。现在可以了。谢谢山姆。

VBProject project = workbook.VBProject;

for (int i = project.VBComponents.Count; i >= 1; i--)
{
    VBComponent component = project.VBComponents.Item(i);
    try
    {
        project.VBComponents.Remove(component);
    }
    catch(ArgumentException)
    {
        continue;
    }
}

for (int i = project.VBComponents.Count; i >= 1; i--)
{
    VBComponent component = project.VBComponents.Item(i);
        component.CodeModule.DeleteLines(1, component.CodeModule.CountOfLines);
}

之后不要忘记保存你的工作簿

【讨论】:

    【解决方案2】:

    您是否尝试过删除第一个 n 次:

    VBProject project = workbook.VBProject;
    int componentsCount = project.VBComponents.Count;
    
    for (int i = 1; i <= componentsCount; i++)
    {
        VBComponent component = project.VBComponents.Item(1);
        project.VBComponents.Remove(component);
    }
    

    您可能需要对此进行调整,但我认为 VBA 集合是基于 1 的(可能需要改为使用 project.VBComponents.Item(0)

    编辑:

    我找到了this post,它解释了如何在 VBA 中做到这一点,但大概翻译起来并不难......

    【讨论】:

    • 是的,我试过了。是的,VB 使用基于 1 的集合,因此如果不调用 Remove,您的代码可以正常工作。但我仍然得到 ArgumentExcecption。 IE。我可以删除集合中的第 4 个元素,但不能删除其他元素。我怀疑前 3 个 VBComponents 是嵌入的(就像工作簿中的前三个工作集)并且无法删除......也许我应该清除它们的内容而不是删除。让我试试:)
    • 代码文件长什么样?它里面有 4 个“东西”还是只有一个?在你尽可能地移除所有东西之后它是什么样子的,它是空的吗? (可能在 try catch 块中,这样您可以在实验时忽略错误)
    • 编辑了我的答案以添加在另一个网站上找到的一些可能有用的信息......他们似乎使用On Error Resume Next所以我怀疑有些元素是不可删除的
    • 谢谢山姆,你给了我一个想法!它现在有效(见我的回答)。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多