【问题标题】:How to input data from a userform into a selected cell - Excel如何将用户窗体中的数据输入到选定的单元格中 - Excel
【发布时间】:2016-11-15 07:01:08
【问题描述】:

我是 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

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

感谢任何帮助。谢谢。

【问题讨论】:

  • 在表单中,您可以有一个按钮,例如 Apply,它会触发将正确值分配给单元格。要执行实际分配,请查看this 示例。
  • 显示您的用户表单代码
  • 我完全不明白 FDavidov 提供的链接。我看不出它如何链接到我的问题。我的用户表单代码中没有任何代码,我不知道如何编码 - user359856
  • 显示您的用户窗体的图像,以及相应的控件名称

标签: vba excel userform


【解决方案1】:

假设你有,在你的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

【讨论】:

    【解决方案2】:

    假设:

    • 以“NormalTime_OB”命名的正常时间选项按钮

    • 以“OverTime_OB”命名的超时选项按钮

    • 以“SpecificTime_TB”命名的特定时间文本框

    • ok 以“Ok_Btn”命名的按钮

    您可以在用户表单代码窗格中尝试以下代码:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 2014-09-29
      相关资源
      最近更新 更多