对象定义的VBA错误1004

时间:2014-11-23 18:01:37

标签: excel vba excel-vba scope userform

我有一个Excel工作表,上面有一个按钮。按下时,它会运行:

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名称。我认为范围问题可能会继续,但不确定如何更好地解决/引用问题。

1 个答案:

答案 0 :(得分:1)

根据您提供的信息,我认为错误位于ConstraintsSheetProfessorRow。如果你说:

ConstraintsSheet和ProfessorRow明确定义,UserForm和OptionButton名称”,这意味着你要做的就是:

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名称也是如此。”并认为错误可能因线程的调用而有所不同。

<强>更新 在您的调试之后,我们已经澄清了错误来自于您的rowIndex变量(即ProfessorRow)进入调用Cells(ProfessorRow,3).Value且值为0的事实,这是禁止的并导致对象定义的错误1004,因为电子表格中不存在第0行。

只要您不写下如何分配变量,我们就无法帮助您。但可以肯定的是,您必须确保变量ProfessorRow采用您正在寻找的正确行值。仅供参考,如果您所做的只是您在评论中报告的内容,即

Dim ProfessorRow As Integer

...我告诉你变量的声明会使变量默认为0,所以如果你最近没有分配它,你将无法摆脱错误。希望调试会话最终能解决您的问题,问题在于此处。