【发布时间】:2015-12-10 22:59:02
【问题描述】:
我创建了一个Userform,其中包含几个选项按钮作为较大宏的一部分。如果存在特定的计算错误,用户窗体将加载,并要求用户选择一种方法来纠正错误。一个选项启用 RefEdit 控件并允许用户选择一个新的起始单元格(并跳过当前和新定义范围之间的错误和单元格)。
我已使用 _Exit 事件来设置一些错误检查(例如,确保选择了有效范围或确保范围是 1x1 范围),但我一直无法找到强制 RefEdit 控件“重新初始化。”我曾尝试使用 RefEdit.SetFocus 方法,但这并没有产生我想要的结果。
基本上,我可以使用一个命令来反映单击 RefEdit 控件上的下拉按钮的行为吗?
Private Sub RefEdit_NewStartCell_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Set UserRange = Range(RefEdit_NewStartCell.Text)
If Err.Number <> 0 Then
MsgBox "Invalid range selected"
RefEdit_NewStartCell.SetFocus
End If
On Error GoTo 0
【问题讨论】:
-
只是一个愚蠢的问题:当出现错误时,您需要的不是
Cancel = True吗? (我确定我错了) -
不确定,我不太熟悉 Cancel 的工作原理。那会取代这条线吗?
If Err.Number <> 0 Then -
Cancel = True只会阻止这样的操作:在 ThisWorkbook:Private Sub Workbook_BeforeClose(Cancel As Boolean): Cancel = True: End Sub如果您尝试关闭工作簿,则会触发 BeforeClose。如果(在 End Sub)Cancel = True则该操作将自行取消 => 您无法关闭工作簿。如果 RefEdit_NewStartCell_Exit 的工作方式相同,那么If Err.Number <> 0 Then Cancel = True将阻止它退出,您将坚持选择直到Range(RefEdit_NewStartCell.Text)在退出时没有错误...但我不确定...试试吧:) -
看起来好像不起作用。当我将
Cancel = True放在那里时,用户窗体就会关闭并且代码结束。 编辑: 这是我试过的代码。Private Sub RefEdit_NewStartCell_Exit(ByVal Cancel As MSForms.ReturnBooleanOn Error Resume NextSet UserRange = Range(RefEdit_NewStartCell.TextIf Err.Number <> 0 Then Cancel = TrueMsgBox 1End If -
好的,抱歉...至少尝试过...我需要运行一些测试...
标签: excel vba user-controls userform