2015-04-06 101 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