对象定义的VBA错误1004

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

Sub Open_Constraints() UserForm7.Show End Sub 

UserForm7也有一个button。 点击后,将运行存储在“UserForm7”下的代码,该代码表示​​:

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

从那里,用户窗体1有很多的选项框和checkboxif语句如下所示。 但是,只要checkbox或选项框的值为“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的名字一样。 我认为范围问题可能会发生,但不知道如何更好地解决/参考事情。

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

ConstraintsSheet和ProfessorRow都是明确定义的,就像UserForm和OptionButton的名字一样 ”,这意味着你正在做的是这样的:

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

所以,一个可能的问题可能是工作簿中没有被称为用户表单名称的工作表。 另一方面,这肯定会造成一个错误:

 Cells(UserForm1.OptionButton1.Name,3) 

这是因为Cells(i,j)的参数必须是一个整数,而选项button的名称绝对不是一个数字(如果您尝试用一个数字命名选项button,将得到无效的名称错误)。 也许,如果您的选项button标题是数字,你可能会想写

 Cells(UserForm1.OptionButton1.Caption,3) 

无论如何,我必须说,我不能重现像这样的错误(因为这种错误通常应该是一个“索引列表超出范围”types),但我只是坚持你的句子“和ConstraintsSheet和ProfessorRow都是明确定义的,就像UserForm和OptionButton的名字一样。“ 并认为这个错误可能会因线程的调用而有所不同。

更新在debugging之后,我们已经阐明了这个错误来自于你的rowIndexvariables,即ProfessorRow ,input了调用Cells(ProfessorRow,3).Value的值是0,这是被禁止的并且导致了一个Object定义的错误1004,因为第0行不存在于电子表格中。

只要你不写如何分配variables,我们不能帮你进一步。 但是可以肯定的是,您必须确保ProfessorRowvariables具有正在查找的正确行值。 仅供参考,如果您所做的只是您在评论中报告的内容,即

 Dim ProfessorRow As Integer 

…我通知你,variables的声明将variables默认为0,所以如果你最近没有指定它,你将不会摆脱错误。 希望debugging会话最终能解决您的问题,问题就在这里。