2014-11-23 108 views
0

我有一個Excel工作表,上面有一個按鈕。當按下時,它會運行:對象定義的VBA錯誤1004

Sub Open_Constraints() 
    UserForm7.Show 
End Sub 

UserForm7上也有一個按鈕。當點擊它運行在「UserForm7」它說存儲的代碼:

Private Sub CommandButton1_Click() 
    UserForm7.Hide 
    UserForm1.Show 
End Sub 

從那裏,UserForm1有一噸的選項框並檢查它框if語句,如下圖所示。但是,只要複選框或選項框的值爲「true」,就會返回對象或應用程序定義的錯誤。這裏有一小段代碼可以觸發它:

If UserForm1.OptionButton1.Value = True Then 
    Sheets(ConstraintsSheet).Cells(ProfessorRow, 3).Value = "Y" 
ElseIf UserForm1.OptionButton2.Value = True Then 
    Sheets(ConstraintsSheet).Cells(ProfessorRow, 3).Value = "N" 
End If 

有什麼想法?每個OptionBox和CheckBox都會觸發它,並且ConstraintsSheet和ProfessorRow都是明確定義的,UserForm和OptionButton名稱也是如此。我認爲範圍問題可能會發生,但不知道如何更好地解決/引用問題。

+2

什麼是'ConstraintsSheet'和'ProfessorRow'定義爲什麼執行時有值? – Gareth 2014-11-23 18:14:48

+0

哪條線給你錯誤?嘗試單步執行代碼 – 2014-11-23 18:21:18

+0

請添加'MsgBox「ConstraintsSheet爲」&ConstraintsSheet&「,ProfessorRow爲」If'塊之前的「&ProfessorRow',並告訴我們您看到的內容。 – 2014-11-23 18:54:05

回答

1

根據您提供的信息,我認爲錯誤在於ConstraintsSheetProfessorRow。如果你說:

ConstraintsSheet和ProfessorRow肯定定義,因爲是用戶窗體和選項按鈕的名稱」,這意味着你想要做的是這樣的:

Sheets(UserForm1.Name).Cells(UserForm1.OptionButton1.Name, 3) = "Y" 

所以,一可能問題可能是您的工作簿中沒有工作表,其名稱爲名稱爲的用戶窗體。 在另一方面,它是肯定,這將導致一個錯誤:

Cells(UserForm1.OptionButton1.Name,3) 

這是因爲對於Cells(i,j)參數必須是整數,而選項按鈕的名稱是絕對不是一個數字(如果您嘗試使用數字命名選項按鈕,則會出現無效名稱錯誤)。也許,如果你的選項按鈕的標題都是數字,你可能會想要寫

Cells(UserForm1.OptionButton1.Caption,3) 

無論如何,我必須說,我無法重現你的同樣的錯誤,這樣的(因爲這些樣的錯誤,一般應一個「索引列表超出範圍」類型),但我只是堅持你的句子「和ConstraintsSheet和ProfessorRow都是明確定義的,就像UserForm和OptionButton名稱一樣。」,並認爲錯誤可能會因線程調用而有所不同。

UPDATE 您的調試後,我們已經澄清了這個錯誤來自一個事實,即你的rowIndex變量,即ProfessorRow,進入通話Cells(ProfessorRow,3).Value爲0的值,這是被禁止的,並導致對象定義的錯誤1004,因爲第0行不存在於電子表格中。

只要你不寫如何分配變量,我們不能幫你進一步。但可以肯定的是,您必須確保變量ProfessorRow取得您正在查找的正確行值。僅供參考,如果您所做的只是您在評論中報告的內容,即

Dim ProfessorRow As Integer 

......我告訴你,該變量的聲明將使變量默認爲0,所以如果你不指定最近它,你將無法擺脫錯誤的。希望調試會話最終能解決您的問題,問題就在這裏。

+0

This cl cl OSE。當我運行一行代碼,甚至像 而Sheets(ConstraintsSheet).Cells(counter,1).Value <>「」 它實際上並沒有訪問ConstraintsSheet。有沒有辦法將它指向它所調用的工作簿? – 2014-11-24 01:26:53

相關問題