通常,当我对VBA文件进行更改时,我喜欢对其进行编译以确保所做的更改不会破坏任何内容:
但是在具有不同版本Office的不同机器上进行编译将导致不同的结果,有时将进行编译,有时则不会…… 可能发生这种情况,或者可能发生这种情况。事实证明,在每个版本的excel中,各种情况都可能有所不同(尽管引用是最常见的问题)。
我将如何自动执行VBA代码的编译?我希望能够在Excel,PowerPoint和Word等多种产品中做到这一点,我希望能够在2010、2013、2016等版本中编译为32位和64位。
是的,这仍然是一个主要的痛点,现在我有一系列的手动测试人员(人员)根据我们的发布时间表来审查各种不同配置上的所有相关文件,必须有一种更好的方法来做到这一点。
我希望使用某种PowerShell脚本/.Net项目(C#,VB.NET)可以完成此任务,即使我必须使用一堆Office版本安装服务器,我认为这样做也很值得投资。
我想,在最坏的情况下,您可以将所有这些不同的版本安装到各种VM上,然后使用AutoHotKey加上某种PowerShell脚本进行编译。Macro在Macro的乐趣之上...
这个冒险之旅向我强调了VBA开发有多么困难。我真的是第一个在不同版本的excel之间出现问题的人吗?要求能够在不同版本下进行编译是否合理?
MS 可能会喜欢它,但是对我来说,几乎就像这种语言在支持遗留代码上并没有长期计划。由于它与诸如此类的核心开发挑战相关,它只是继续存在而没有任何重大的官方未来迭代或考虑。
我正在使用C++创建一个可以从VBA代码中使用的简单DLL.但是,虽然它可以在我的开发计算机上工作,但在尝试访问不同计算机上的DLL时,VBA会声明找不到DLL文件,尽管该路径有硬编码.
我的DLL看起来像这样(使用Visual C++ 2010 Express作为Win32 DLL项目创建):
DEF文件:
LIBRARY "squareNumber"
EXPORTS
squareNumber
Run Code Online (Sandbox Code Playgroud)
Function.cpp:
double __stdcall squareNumber(double & x)
{
return x*x;
}
Run Code Online (Sandbox Code Playgroud)
VBA代码如下所示:
Public Declare Function squareNumber Lib "C:\MySimpleDLL.dll" (ByRef number As Double) As Double
Sub test()
MsgBox squareNumber(2)
End Sub
Run Code Online (Sandbox Code Playgroud)
我是C++ DLL的新手,我编写的DLL是错误的,还是VBA的问题?
使用RegSvr32还会产生"模块[dllpath]无法加载.确保二进制文件存储在指定的路径或调试它以检查二进制文件或从属.DLL文件的问题."