如何将用户表单中的数据输入到选定的单元格中 - Excel

时间:2016-11-15 07:01:09

标签: excel vba excel-vba userform

我是excel VBA中的菜鸟,所以请理解。

我的任务是将员工的总工作时间有效地输入到工作表中,以最大限度地减少人为错误。所以有三个选项,正常工作时间是490分钟,随着时间的推移是640分钟和用户输入选项,因为有时员工不工作490或640分钟。

所以我创建了一个用户表单,在我的用户表单中,我有正常工作时间和一段时间的输入2选项按钮。我还为用户输入了第三个选项的文本框,以输入特定的工作时间。

因此,我想在单击单元格而不是按钮时打开用户窗体。并将用户表单中的数据输入到选定的单元格中。我可以使用此代码

单击单元格来打开用户窗体
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("H10:I29")) Is Nothing Then
        UserForm1.Show
    End If
End Sub

我的问题是我不知道如何将用户表单中的数据输入到选定的单元格中。

感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

在您的UserForm1

中说出来
  • Button1,将第一个值应用于所选单元格
  • Button2,将第二个值应用于所选单元格
  • TextBox1,您写的是一个不常见的值
  • Button3,将TextBox1的值应用于所选单元格

UserForm1代码中添加:

Private Sub Button1_Click()
    Selection.Value = 490
End Sub
Private Sub Button2_Click()
    Selection.Value = 640
End Sub
Private Sub Button3_Click()
    Selection.Value = TextBox1.Value
End Sub

答案 1 :(得分:0)

假设:

  • 正常时间OptionButton以“NormalTime_OB”

  • 命名
  • 随着时间的推移OptionButton以“OverTime_OB”

  • 命名
  • 以“SpecificTime_TB”命名的特定时间TextBox

  • ok按钮以“Ok_Btn”命名

您可以在userform代码窗格中尝试以下代码:

Option Explicit

Private Sub Ok_Btn_Click()
    Const NORMALHOURS As Long = 490
    Const OVERTIMEHOURS As Long = 640
    Dim hours As Long

    With Me
        Select Case True
            Case .NormalTime_OB
                hours = NORMALHOURS
            Case .OverTime_OB
                hours = OVERTIMEHOURS
            Case Else
                hours = GetTextBoxInpt(.SpecificTime_TB)
        End Select
        If hours > 0 Then
            ActiveCell.Value = hours
            .Hide
        End If
    End With
End Sub

Function GetTextBoxInpt(TB As MSForms.TextBox)
    Const MINHOURS As Long = 490 '<--| change it to your needs
    Const MAXHOURS As Long = 640 '<--| change it to your needs
    Dim hours As Long

    With TB
        If IsNumeric(.text) Then
            hours = CLng(.text)
            If hours <= MINHOURS Or hours > MAXHOURS Then
                MsgBox "You must enter a value between " & MINHOURS & " and " & MAXHOURS, vbExclamation, "Working Time input"
            Else
                GetTextBoxInpt = hours
                Exit Function
            End If
        Else
            MsgBox "You must enter a numeric value", vbExclamation, "Working Time input"
        End If
        .text = ""
    End With
End Function

当您的工作表事件处理程序变为:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("H10:I29")) Is Nothing Then
        UserForm1.Show
        Unload UserForm1
    End If
End Sub