我被Visual Studio 2008和Eclipse宠坏了,不得不在VB6应用程序上做一些维护工作.
有谁知道VB6的替代/更新IDE?
重写不是一个选项我只是修复了一些错误,它是一个很大的代码库.
我正在为VBE编写COM加载项,其中一个核心功能是在单击命令栏按钮时执行现有的VBA代码.
代码是用户在标准(.bas)模块中编写的单元测试代码,其模块如下所示:
Run Code Online (Sandbox Code Playgroud)Option Explicit Option Private Module '@TestModule Private Assert As New Rubberduck.AssertClass '@TestMethod Public Sub TestMethod1() 'TODO: Rename test On Error GoTo TestFail 'Arrange: 'Act: 'Assert: Assert.Inconclusive TestExit: Exit Sub TestFail: Assert.Fail "Test raised an error: #" & Err.Number & " - " & Err.Description End Sub
所以我有这个代码获取主机Application
对象的当前实例:
protected HostApplicationBase(string applicationName)
{
Application = (TApplication)Marshal.GetActiveObject(applicationName + ".Application");
}
Run Code Online (Sandbox Code Playgroud)
这是ExcelApp
班级:
public class ExcelApp : HostApplicationBase<Microsoft.Office.Interop.Excel.Application>
{
public ExcelApp() : base("Excel") { }
public override void Run(QualifiedMemberName …
Run Code Online (Sandbox Code Playgroud) 我在Outlook 2003 VBA中创建了一个脚本,用于监视新约会,并在创建它们时将它们设置为暂定且没有提醒.我发现看似随机,VBA编辑器将自行打开.当我使用新脚本时不会发生这种情况,但是今天早上当我取消我的笔记本电脑休眠时它确实发生了.
编辑器不会弹出任何运行时错误或突出显示脚本中的任何行,它就像我按下Alt-F11启动它一样.有时我关闭其他应用程序,看到它已经在那里坐了一会儿.
自从我创建此新脚本以来,才发生此行为.有什么想法会发生这种情况吗?
我一直在使用下面的代码将VBA模块从一个工作簿编译到另一个工作簿,我不知道是否有更简单的方法,但它们一直工作正常:
Set srcVba = srcWbk.VBProject
Set srcModule = srcVba.VBComponents(moduleName)
srcModule.Export (path) 'Export from source
trgtVba.VBComponents.Remove VBComponent:=trgtVba.VBComponents.Item(moduleName) 'Remove from target
trgtVba.VBComponents.Import (path) 'Import to target
Run Code Online (Sandbox Code Playgroud)
但是现在我需要复制Sheet中的VBA代码,而不是模块中的VBA代码.上述方法不适用于该场景.
我可以使用什么代码将工作表中的VBA代码从一个工作簿复制到另一个工作簿?
我目前正在开发一个VBA代码生成器/注入器,它通过使用VBA可扩展性将VBA功能添加到Excel工作簿.一切正常.
但是,注入的原始代码使用条件编译,引用一些全局条件编译参数:
有没有什么办法可以编程修改/添加VBA项目的条件编译参数?
我检查了VBProject的所有属性但找不到任何东西.
我有一个宏,我想要使用一堆现有的电子表格.唯一的问题是,有太多的电子表格,手动操作太费时间了!
我编写了一个Python脚本来使用pyWin32访问所需的文件,但我似乎无法找到一种方法来使用它来添加宏.
这里有一个类似的问题给出了这个答案(它不是Python,但看起来它仍然使用COM),但我的COM对象似乎没有一个名为VBProject的成员:
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
objExcel.DisplayAlerts = False
Set objWorkbook = objExcel.Workbooks.Open("C:\scripts\test.xls")
Set xlmodule = objworkbook.VBProject.VBComponents.Add(1)
strCode = _
"sub test()" & vbCr & _
" msgbox ""Inside the macro"" " & vbCr & _
"end sub"
xlmodule.CodeModule.AddFromString strCode
objWorkbook.SaveAs "c:\scripts\test.xls"
objExcel.Quit
Run Code Online (Sandbox Code Playgroud)
编辑:链接到引用的类似问题:将Excel VBA代码注入并执行到从外部源接收的电子表格中
我也忘了提到虽然这不是Python,但我希望通过COM对象可以使用类似的对象成员.
我刚刚在Windows 10操作系统上安装了Rubberduck VBE加载项v2.0.11.2453(MSIL).
当我在Excel中打开一个启用宏的Excel工作簿并启动VBA编辑器时,Rubberduck启动但Rubberduck菜单下的所有命令都被禁用.
我究竟做错了什么?
标准VBA编辑器中是否有工具,方法或设置来警告已经Dim
'med,但没有被使用的变量?
我在其他地方问了这个问题,但是从来没有发现任何人知道如何使用VB.NET为VBA IDE构建一个加载项.它甚至可能吗?有人能给我一个例子吗?
一位朋友让我看看这个页面,并注意到一个论坛用户的签名中有一段奇怪的代码.
代码是一个单行,如下所示:
On Local Error Resume Next: If Not Empty Is Nothing Then Do While Null: ReDim i(True To False) As Currency: Loop: Else Debug.Assert CCur(CLng(CInt(CBool(False Imp True Xor False Eqv True)))): Stop: On Local Error GoTo 0
Run Code Online (Sandbox Code Playgroud)
滚动删除:
关于本地错误恢复下一个:如果不为空则没有,然后做空:ReDim i(真假)作为货币:循环:其他Debug.Assert CCur(CLng(CInt(假冒错误真Xor假Eqv真))) ):停止:On Local Error GoTo 0
相当令人兴奋的是,代码编译(我没有尝试运行它,但这是无关紧要的)如果你只是按原样粘贴它(然后再不要再触摸它!)到一个有效的程序级范围.
一些观察:
On Local Error
可以简化为 On Error
Debug.Assert True
会使代码一致地编译,因此其中的某些东西会弄乱编译器.Local
在VBE验证了行之后以任何方式修改它(甚至只是删除),它就会停止编译,似乎没有任何东西让VBA理解它,除非该行被删除并重新粘贴.问题是,这段代码如何根据VB语言规范进行编译?这是VB [6 | …
vbe ×10
vba ×9
excel-vba ×4
excel ×3
vb6 ×2
add-in ×1
c# ×1
com ×1
ide ×1
ms-office ×1
outlook ×1
outlook-vba ×1
properties ×1
python ×1
reflection ×1
rubberduck ×1
variables ×1
vb.net ×1