2014-05-13 192 views
1

我試圖寫一個細胞時,一個複選框使用此子運行時錯誤「1004」:對象「_Worksheet」法「範圍」失敗

Sub CheckBox7_Click() 
If ws1.Shapes("Check Box 7").OLEFormat.Object.Value = 1 Then 
ws2.Range(comment).Offset(0, 2).Value = "1" 
Else 
ws2.Range(comment).Offset(0, 2).Value = "0" 
End If 
End Sub 

標記,但如果我只是打開然後單擊複選框我得到運行時錯誤'1004':對象'_worksheet'的方法'範圍'失敗錯誤。

我定義的變量在模塊的頂部:

Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Dim comment As String 
Dim rown As Integer 

我設置的變量打開工作簿時:

Private Sub Workbook_Open() 
rown = 3 
comment = "F" & rown 
Set ws1 = ThisWorkbook.Sheets("Rating test") 
Set ws2 = ThisWorkbook.Sheets("Comments test") 
End Sub 

什麼奇怪的是我,如果我先按下按鈕與模塊中的以下代碼,我不會再收到錯誤,即使它與我放入Workbook_open事件中的代碼相同:

Sub First_Comment() 
Set ws1 = ThisWorkbook.Sheets("Rating test") 
Set ws2 = ThisWorkbook.Sheets("Comments test") 

    rown = 3 
    comment = "F" & rown 

End Sub 

感謝您的幫助,我是VBA新手!

+0

你在哪裏定義了'Workbook_open'? –

+0

您確定Workbook_Open Sub運行?如果確實如此,則必須位於「ThisWorkbook」(「Microsoft Excel Objects」下),並且所有其他代碼也必須位於此處。 – EngJon

+0

是的WOrkbook_Open在「ThisWorkbook」(在「Microsoft Excel Objects」下)中定義。另一個代碼位於同一VBA項目下的「模塊」中的Module1中。我也確信Workbook_Open Sub會運行,因爲當我向workbook_open添加「msgbox comment」時,它會向我顯示帶有「F3」的msgbox – Mustika

回答

1

您需要聲明全局變量Public否則Workbook_Open將創建並在他自己的變量工作,因爲他們是在他的範圍

Public ws1 As Worksheet 
Public ws2 As Worksheet 
Public comment As String 
Public rown As Integer 
+0

謝謝,解決了問題! – Mustika

+2

這不是使用公共變量作爲工作表名稱的好方法 - 只需將它們直接應用於Sub。 – brettdj

0

你應該只使用ws1直接

Sub CheckBox7_Click() 
Set ws1 = ThisWorkbook.Sheets("Rating test") 
If ws1.Shapes("Check Box 7").OLEFormat.Object.Value = 1 Then 
ws2.Range(comment).Offset(0, 2).Value = "1" 
Else 
ws2.Range(comment).Offset(0, 2).Value = "0" 
End If 
End Sub 
+0

爲什麼使用公共變量作爲工作表名稱不是一個好主意?我想在整個項目中多次提到該工作表,如果每次都會將代碼弄亂,我必須設置它。 – Mustika

+0

因爲該對象可能在其他地方被錯誤地使用。對於這樣一個簡單的應用程序,你不需要去全球化。 – brettdj

相關問題