gpt4 book ai didi

c# - 一种自动化MS Office VBA代码 "Compile"函数的方法

转载 作者:可可西里 更新时间:2023-11-01 08:44:47 26 4
gpt4 key购买 nike

通常,当我对 VBA 文件进行更改时,我喜欢编译它以确保我的更改不会破坏任何内容:

enter image description here

但是在不同版本的office在不同的机器上编译会得到不同的结果,有时会编译,有时不会... 东西like this可能发生,或者 maybe this .结果在每个版本的 excel 中都有各种 things can be different (不只是引用,尽管这是最常见的问题)。

如何自动编译我的 VBA 代码?我希望能够在 Excel、PowerPoint 和 Word 等多种产品中执行此操作,我希望能够编译为 32 位和 64 位,包括 2010、2013、2016 等......

更新1

是的,这仍然是一个主要的痛点,现在我有一系列手动测试人员(人员)根据我们的发布计划审查各种不同配置的所有相关文件,必须有更好的方法 来做到这一点。

我更喜欢某种 PowerShell 脚本/.Net 项目(C#,VB.NET)来实现这一点,即使我必须使用一堆版本的 office 来设置服务器,我认为它非常值得投资。

我想,最坏的情况是您可以将所有这些不同的版本安装到各种 VM 上,然后使用 AutoHotKey加上某种 PowerShell 脚本来编译它们。 Macro 在 Macro 的乐趣之上...

这段旅程向我强调了 VBA 开发的难度。我真的是第一个在不同版本的 excel 之间遇到问题的人吗?是不是要求能不能compile under different versions

女士 may love it , 但对我来说,这几乎就像这种语言并没有真正的 long term plan过去刚刚supporting legacy code .它只是continues to exist没有任何与core相关的主要官方 future 迭代或考虑development challenges比如这个。

最佳答案

您需要转到 Excel -> 文件 -> 选项 -> 信任中心-> 信任中心设置并选中选项 Trust access to the VBA project object model(如果您不选中下面的代码将引发运行时错误 1004 programmatic access to visual basic project is not trusted)。

Sub Compiler()
Dim objVBECommandBar As Object
Set objVBECommandBar = Application.VBE.CommandBars
Set compileMe = objVBECommandBar.FindControl(Type:=msoControlButton, ID:=578)
compileMe.Execute
End Sub

在 C 类似的东西上,不要忘记将 excel 包添加到命名空间。

void Main()
{
var oExcelApp = (Microsoft.Office.Interop.Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
try{
var WB = oExcelApp.ActiveWorkbook;
var WS = (Worksheet)WB.ActiveSheet;
//((string)((Range)WS.Cells[1,1]).Value).Dump("Cell Value"); //cel A1 val
oExcelApp.Run("Compiler").Dump("macro");
}
finally{
if(oExcelApp != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcelApp);
oExcelApp = null;
}
}

还有 look here1 2 3

关于c# - 一种自动化MS Office VBA代码 "Compile"函数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51030992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com