Excel:如何检查Userform1中的多个文本框的值,然后仅传递值

时间:2018-07-13 21:35:47

标签: excel textbox boolean userform pass-data

此用户窗体用于一个称为“工作信息”的特定工作表。该用户窗体具有多个文本框和命令按钮。 “添加”按钮将数据传递到活动工作表上的特定范围(总是“作业信息”)。

https://imgur.com/a/8Rf1oWF

现实世界场景:

用户打开用户窗体以将数据键入相应的文本框(例如,工作地点和工作日),然后按ADD CommandButton添加新数据。当天晚些时候,用户返回仅添加或更新一个TextBoxes(例如Department),而所有其他TextBoxes则保持空白。不幸的是,在编写代码时,空的文本框将空白传递给“作业站点”和“周结束日期”。

询问

想要一种在传递数据之前检查每个TextBox中的值的解决方案,如果TextBox中没有值,则不传递任何值。

Private Sub cmdCommandButton1_Click()
    ActiveSheet.Unprotect Password:="password"

    ''Here I would like code that checks for value in each TextBox.
    ''If TextBox1 = True then pass value to specified range
    ''If TextBox1 = False then do not pass

    ''Below is current code for passing value when CommandButton1_Click()

    Range("H3") = txtTextBox1.Value
    Range("L2") = txtTextBox2.Value
    Range("K2") = txtTextBox3.Value
    Range("J2") = txtTextBox4.Value
    Range("O2") = txtTextBox5.Value

    '' This code resets TextBoxes to 0 before ending sub

    txtTextBox1.Text = ""
    txtTextBox2.Text = ""
    txtTextBox3.Text = ""
    txtTextBox4.Text = ""
    txtTextBox5.Text = ""
    ActiveSheet.Protect

End Sub

1 个答案:

答案 0 :(得分:0)

有几种方法可以实现您的目标,但这是一种不需要我提出任何问题的方法。

Private Sub CommandButton2_Click()

If Me.TextBox1.Text <> "" Then
    Sheets("Sheet1").Range("A1").Value = Me.TextBox1.Text
End If

End Sub

基本上,在上面的测试代码中,当单击CommandButton2时,VBA将检查TextBox1上的UserForm1(我将Me称为代码写在UserForm模块中)不等于""(空白字符串)。

换句话说,它正在检查TextBox是否包含至少一个字符。如果确实包含至少一个字符,则会将TextBox1.Text写入工作表A1上的单元格Sheet1。如果TextBox为空,则什么也不会发生。

您可以为If上的每个TextBox重复此UserForm语句(不要忘记为每个If语句更新任何控件和工作表引用! )