我有一个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名称。我认为范围问题可能会继续,但不确定如何更好地解决/引用问题。
答案 0 :(得分:1)
根据您提供的信息,我认为错误位于ConstraintsSheet
或ProfessorRow
。如果你说:
“ 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,所以如果你最近没有分配它,你将无法摆脱错误。希望调试会话最终能解决您的问题,问题在于此处。