标签: vbe

VB6和VBA的替代IDE

我被Visual Studio 2008和Eclipse宠坏了,不得不在VB6应用程序上做一些维护工作.

有谁知道VB6的替代/更新IDE?

重写不是一个选项我只是修复了一些错误,它是一个很大的代码库.

ide vb6 vba vbe

63
推荐指数
4
解决办法
5万
查看次数

如何在没有Application.Run的情况下从VBE加载项运行宏?

我正在为VBE编写COM加载项,其中一个核心功能是在单击命令栏按钮时执行现有的VBA代码.

代码是用户在标准(.bas)模块中编写的单元测试代码,其模块如下所示:

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
Run Code Online (Sandbox Code Playgroud)

所以我有这个代码获取主机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)

c# com reflection ms-office vbe

22
推荐指数
2
解决办法
2105
查看次数

为什么VBA编辑器有时会自行打开?

我在Outlook 2003 VBA中创建了一个脚本,用于监视新约会,并在创建它们时将它们设置为暂定且没有提醒.我发现看似随机,VBA编辑器将自行打开.当我使用新脚本时不会发生这种情况,但是今天早上当我取消我的笔记本电脑休眠时它确实发生了.

编辑器不会弹出任何运行时错误或突出显示脚本中的任何行,它就像我按下Alt-F11启动它一样.有时我关闭其他应用程序,看到它已经在那里坐了一会儿.

自从我创建此新脚本以来,才发生此行为.有什么想法会发生这种情况吗?

outlook vba outlook-vba vbe

21
推荐指数
2
解决办法
2万
查看次数

将一个工作簿中的工作表中的VBA代码复制到另一个工作簿?

我一直在使用下面的代码将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代码从一个工作簿复制到另一个工作簿?

excel vba excel-vba vbe

16
推荐指数
1
解决办法
2万
查看次数

如何以编程方式更改VBA项目的条件编译属性

我目前正在开发一个VBA代码生成器/注入器,它通过使用VBA可扩展性将VBA功能添加到Excel工作簿.一切正常.

但是,注入的原始代码使用条件编译,引用一些全局条件编译参数:

在此输入图像描述

有没有什么办法可以编程修改/添加VBA项目的条件编译参数?

我检查了VBProject的所有属性但找不到任何东西.

vba properties conditional-compilation excel-vba vbe

16
推荐指数
3
解决办法
4152
查看次数

使用Python将宏注入Spreadsheets

我有一个宏,我想要使用一堆现有的电子表格.唯一的问题是,有太多的电子表格,手动操作太费时间了!

我编写了一个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对象可以使用类似的对象成员.

python excel vba excel-vba vbe

15
推荐指数
2
解决办法
9119
查看次数

Rubberduck UI子菜单已禁用

我刚刚在Windows 10操作系统上安装了Rubberduck VBE加载项v2.0.11.2453(MSIL).

当我在Excel中打开一个启用宏的Excel工作簿并启动VBA编辑器时,Rubberduck启动但Rubberduck菜单下的所有命令都被禁用.

我究竟做错了什么?

在此输入图像描述

vba vbe rubberduck

15
推荐指数
1
解决办法
697
查看次数

VBA中是否有办法了解未使用的变量?

标准VBA编辑器中是否有工具,方法或设置来警告已经Dim'med,但没有被使用的变量?

variables excel vba excel-vba vbe

14
推荐指数
2
解决办法
6827
查看次数

使用VB.NET为VBA IDE构建加载项

我在其他地方问了这个问题,但是从来没有发现任何人知道如何使用VB.NET为VBA IDE构建一个加载项.它甚至可能吗?有人能给我一个例子吗?

vb.net vba add-in vbe

12
推荐指数
2
解决办法
6331
查看次数

为什么这段代码在粘贴时编译但是否则失败?

一位朋友让我看看这个页面,并注意到一个论坛用户的签名中有一段奇怪的代码.

代码是一个单行,如下所示:

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理解它,除非该行被删除并重新粘贴.
  • 最新的语法/解析器是根据实际的VBA规范建立的,它解析并解析得很好(这真是让我)
  • 如果已知该行未编译,然后剪切/重新粘贴,则它不会编译...但是再次从VBE外部重新粘贴它,它会突然编译.

问题是,这段代码如何根据VB语言规范进行编译?这是VB [6 | …

vb6 vba specifications vbe

12
推荐指数
1
解决办法
314
查看次数