2015-04-06 61 views
0

我已经为在Windows 7/Office 2010上执行得很好的工作编写了一个vba脚本,只要它在单独的Excel窗口中打开即可。在同一窗口中同时运行其他工作簿会导致错误。这有时候有点麻烦,但没有那么多,人们对它有问题,所以我从来没有花时间去看看它。在背景表上运行Excel vba代码

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

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

在这一刻我改变了一些事情

的ThisWorkbook

Private Sub Workbook_Open() 

Set WB = ActiveWorkbook 
Set WS = WB.ActiveSheet 

End Sub 

模块MyModule的

Public WB As Workbook 
Public WS As Worksheet 

模块OtherModule

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 

调用ColumnNam er Sub结果如下(手动翻译(错误:编译错误(预期矩阵/数组))。

回答

0

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

创建一个模块并插入:

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 

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

而在另一个模块中,由于这样的事实:

Public WB As Workbook 
Public WS As Worksheet 

下面这段代码添加到您的ThisWorkbook对象第三个参数设置为零,在范围内找不到搜索值(第一个参数)(第二个参数) ameter)会产生一个错误。所以你必须抓住那一个...

+0

评论是不适用于扩展讨论;这个对话已经[转移到聊天](http://chat.stackoverflow.com/rooms/74749/discussion-on-answer-by-etri-run-excel-vba-code-on-background-sheet)。 – Taryn 2015-04-08 19:10:47