这是一个关于使用UserForms的真正的初学者问题。我试图从Walkenbach的Excel 2013 Power Programming with VBA中得到一个例子,并且在事件处理期间没有得到期望的响应。我希望有人可以帮我弄清楚我出错的地方。
因此,我们的想法是让UserForm通过一系列OptionButtons通过TextBox和喜欢的颜色收集名称信息。其他对象是Label,Frame和两个CommandButtons(“OK”和“Cancel”)。
与控件的默认值不同的属性如下:
Label control:
Accelerator: N
Caption: Name:
TabIndex: 0
TextBox control:
Name: TextName
TabIndex: 1
Frame control:
Caption: Favorite Color
TabIndex: 2
OptionButton controls inside Frame:
(1)
Accelerator: B
Caption: Blue
Name: OptionBlue
TabIndex: 0
(2)
Accelerator: R
Caption: Red
Name: OptionRed
TabIndex: 1
(3)
Accelerator: Y
Caption: Yellow
Name: OptionYellow
TabIndex: 2
CommandButton control ("OK"):
Caption: OK
Default: True
Name: OKButton
TabIndex: 3
CommandButton control ("Cancel"):
Caption: Cancel
Name: CancelButton
TabIndex: 4
问题出现在OK按钮的事件处理中。我使用以下代码:
Private Sub OKButton_Click()
Dim NextRow As Long
'Make sure Sheet1 is active
Sheets("Sheet1").Activate
'Determine the next empty row
NextRow = Application.WorksheetFunction.CountA(Range("A:A")) + 1
'Transfer the name
Cells(NextRow, 1) = TextName.Text
'Transfer the gender
If OptionBlue Then Cells(NextRow, 2) = "Blue"
If OptionRed Then Cells(NextRow, 2) = "Red"
If OptionYellow Then Cells(NextRow, 2) = "Yellow"
'Clear the controls for the next entry
TextName.Text = ""
OptionUnknown = True
TextName.SetFocus
End Sub
代码正确地将名称输出到工作表,但似乎没有正确执行if语句(即没有输出到工作表)。运行UserForm并输入一些虚拟数据后,我的工作表看起来像:
任何人都可以帮我确定为什么这段代码不起作用?
FYI - CancelButton子例程只执行Unload UserForm1
,“Show UserForm”按钮只会弹出UserForm。
感谢您的帮助。
答案 0 :(得分:0)
您的代码依赖于正在使用的默认属性。要创建更强大的代码片段,最好声明您希望使用的属性,这意味着if语句将变为类似:
If OptionBlue.Value Then Cells(NextRow, 2).Value = "Blue"
If OptionRed.Value Then Cells(NextRow, 2).Value = "Red"
If OptionYellow.Value Then Cells(NextRow, 2).Value = "Yellow"
它只是一个次要的(通常是无意义的)更改,但根据项目使用的引用,这可以防止代码被错误地解释。