【问题标题】:Run Excel vba code on background sheet在背景工作表上运行 Excel vba 代码
【发布时间】:2015-06-10 21:21:52
【问题描述】:

我为在 Windows 7/Office 2010 上表现出色的工作编写了一个 vba 脚本,只要它在单独的 Excel 窗口中打开即可。在同一窗口中同时运行其他工作簿会导致错误。有时这有点麻烦,但并不是人们对此有任何问题,所以我从来没有花时间看它。

最近我们的系统升级到 Windows 8 和 Office 2013,它们会自动打开单独的 Excel 窗口,但会出现与在一个窗口中打开多个工作簿的旧系统相同的错误。发生错误是因为我正在处理另一个工作簿,而活动工作簿不包含 VBA 工作簿包含的多个工作表。

我可以通过在每次代码运行时(每 15 秒)激活 VBA 工作簿+工作表来解决此问题,但这会强制 VBA 工作簿位于前面。有没有办法让代码在 VBA 工作簿上运行,而不是一直强制它到前台?目前我无法在同一台电脑上运行我的 VBA 工作簿作为任何其他 Excel 工作表,这非常不方便。任何帮助将不胜感激!

此时我改变了几件事

这本工作簿

Private Sub Workbook_Open()

Set WB = ActiveWorkbook
Set WS = WB.ActiveSheet

End Sub

模块我的模块

Public WB As Workbook
Public WS As Worksheet

模块其他模块

Sub ColumnNamer()

Dim titleRow As Integer
Dim titlerng As Range

titleRow = 5

Set titlerng = Workbooks(WB).Sheets(WS).Range(Cells(titleRow, 1), Cells(titleRow, 50))

colFind = WorksheetFunction.Match("SEARCH_TAG", titlerng, 0)
End Sub

调用 ColumnNamer Sub 会导致以下结果(手动翻译(错误:编译错误(应为矩阵/数组)。

【问题讨论】:

    标签: excel vba windows-8 office-2013


    【解决方案1】:

    您指的是 ActiveWorkbook 吗?使用 VBA 代码启动工作簿时,我创建了一个引用活动工作簿的对象,然后使用该对象。这样可以确保我引用一个特定的工作簿,而不仅仅是可以随时更改的 ActiveWorkbook。

    创建一个模块并插入:

    Public WB As Workbook
    Public WS As Worksheet
    

    现在将此代码添加到您的 ThisWorkbook 对象:

    Private Sub Workbook_Open() 
       Set WB = ActiveWorkbook
       Set WS = WB.ActiveSheet
    End Sub
    

    在另一个模块中

    Sub ColumnNamer()
        Dim titleRow As Integer
        Dim titlerng As Range
        Dim colfind
    
        On Error GoTo ErrHandler
    
        titleRow = 3
    
        Set titlerng = WS.Range(Cells(titleRow, 1), Cells(titleRow, 50))
    
        colfind = Application.WorksheetFunction.Match("SEARCH_TAG", titlerng, 0)
    
        Exit Sub
    
    ErrHandler:
        colfind = -1 'value is not found in given range
    
    End Sub
    

    注意,由于第三个参数设置为零,在范围(第二个参数)中找不到搜索值(第一个参数)会产生错误。所以你必须抓住那个...

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多