UserForm事件处理程序将响应传输到工作表

时间:2014-06-26 21:22:16

标签: excel vba excel-vba userform

这是一个关于使用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并输入一些虚拟数据后,我的工作表看起来像: Output after attempting to input names and favorite colors

任何人都可以帮我确定为什么这段代码不起作用?

FYI - CancelButton子例程只执行Unload UserForm1,“Show UserForm”按钮只会弹出UserForm。

感谢您的帮助。

1 个答案:

答案 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"

它只是一个次要的(通常是无意义的)更改,但根据项目使用的引用,这可以防止代码被错误地解释。