在背景工作表上运行Excel vba代码

在背景工作表上运行Excel vba代码,excel,vba,windows-8,office-2013,Excel,Vba,Windows 8,Office 2013,我已经为在Windows7/Office2010上运行良好的工作编写了一个vba脚本,只要它是在单独的Excel窗口中打开的。在同一窗口中同时运行其他工作簿会导致错误。这有时会有点麻烦,但并不是说人们对它有什么问题,所以我从来没有花时间去看它 最近,我们的系统升级到了Windows 8和Office 2013,它会自动打开单独的excel窗口,但会出现与旧系统在一个窗口中打开多个工作簿相同的错误。发生此错误是因为我正在处理另一个工作簿,而活动工作簿不包含VBA工作簿包含的多个工作表 我可以通过每

我已经为在Windows7/Office2010上运行良好的工作编写了一个vba脚本,只要它是在单独的Excel窗口中打开的。在同一窗口中同时运行其他工作簿会导致错误。这有时会有点麻烦,但并不是说人们对它有什么问题,所以我从来没有花时间去看它

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

我可以通过每次代码运行时(每15秒)激活VBA工作簿+工作表来修复此问题,但这会迫使VBA工作簿位于前端。有没有一种方法可以让代码在VBA工作簿上运行,同时不强制它一直在前台运行??目前,我无法在同一台电脑上运行VBA工作簿,这非常不方便。任何帮助都将不胜感激

在这一刻,我改变了几件事

此工作簿

Private Sub Workbook_Open()

Set WB = ActiveWorkbook
Set WS = WB.ActiveSheet

End Sub
模块MyModule

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子结果如下(手动翻译(错误:编译错误(需要矩阵/数组).

您指的是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

请注意,由于第三个参数设置为零,在范围(第二个参数)中找不到搜索值(第一个参数)将产生错误。因此,您必须捕获该值…

注释不用于扩展讨论;此对话已结束。