2015-12-28 69 views
0

我已經繼承了幫助票證來解決Excel宏文檔中的錯誤問題。當運行下面列出的第一個代碼組時,我收到錯誤「運行時錯誤438:對象不支持此屬性或方法」。在進行小的語法更改後,當運行下面列出的第二個代碼組時,會收到錯誤「編譯錯誤:下一個不適用」。我嘗試了一些可能的修復方法,但我無法動搖這些錯誤。任何幫助表示讚賞。Excel宏編碼中的錯誤

Private Sub Worksheet_Change(ByVal target As Range) 
Dim TabNum As Long 

' Check all automation boxes on all of the tabs when Master is selected 
If Range("Master") = "Master" Then 
    For TabNum = 7 To 23 Step 1 'thisworkbook.Sheets.Count is the number of tabs in the open master SIG 
     ThisWorkbook.Worksheets(TabNum).Select 
     If ThisWorkbook.Worksheets(TabNum).CheckBox1.Value = False Then ThisWorkbook.Worksheets(TabNum).CheckBox1.Value = True 
    Next TabNum 
End If 

' move back to the formula notes worksheet 
ThisWorkbook.Worksheets(27).Select 

End Sub 

Error 438

Private Sub Worksheet_Change(ByVal target As Range) 
Dim TabNum As Long 

' Check all automation boxes on all of the tabs when Master is selected 
If Range("Master") = "Master" Then 
    For TabNum = 7 To 23 Step 1 'thisworkbook.Sheets.Count is the number of tabs in the open master SIG 
     ThisWorkbook.Worksheets(TabNum).Select 
     If ThisWorkbook.Worksheets(TabNum).CheckBox1.Value = False Then 
     ThisWorkbook.Worksheets(TabNum).CheckBox1.Value = True 
    Next TabNum 
End If 

' move back to the formula notes worksheet 
ThisWorkbook.Worksheets(27).Select 

End Sub 

Error Next without For

+2

第二個代碼:在下一個TabNum之前加上'End If' –

+1

爲什麼還要檢查複選框所在的狀態?只需將其設置爲True即可。 – Jeeped

+1

您不應該從Worksheet_Change事件宏中選擇工作表。請參閱[如何避免在Excel VBA宏中使用選擇](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)獲取遠離依賴的方法選擇並激活以實現您的目標。 – Jeeped

回答

1

從你的簡短描述,似乎要循環隊列中的工作表(從位置7到23,包容性),並設置複選框1True在這些工作表中的每一個上。你想要這個觸發'...當主選擇'(不是改變),所以一個Worksheet_SelectionChange事件宏比Worksheet_Change更合適。

Private Sub Worksheet_SelectionChange(ByVal target As Range) 
    Dim tabNum As Long 

    ' Check all automation boxes on all of the tabs when Master is selected 
    If LCase(target(1).Value2) = "master" Then 
     For TabNum = 7 To 23 Step 1 'thisworkbook.Sheets.Count is the number of tabs in the open master SIG 
      ThisWorkbook.Worksheets(tabNum).CheckBox1.Value = True 
     Next tabNum 
    End If 

End Sub 

請注意,刪除的代碼¹比添加或編輯的要多得多。


¹How to avoid using Select in Excel VBA macros更多的方法從依靠選擇越來越遠,並激活,以實現自己的目標。

+1

438錯誤特別發生在代碼正在查找的控件不存在時。在這種情況下,可能是這些工作表中的一個(或多個)沒有名爲「CheckBox1」的ActiveX複選框控件。也許要檢查一下,看看這個控制是否存在會消除錯誤。 – tigeravatar

+0

@Jeeped擺脫了錯誤。刪除該行會否對功能產生負面影響? – Ta10n

+0

@ Ta10n - 不,它不會。 – Jeeped