2016-11-15 17 views
0

我是excel VBA中的noob,所以請理解。如何將用戶表單中的數據輸入到選定的單元格中 - Excel

我的任務是有效地將員工總工作時間輸入到工作表中,以最大限度地減少人爲錯誤。因此,有三種選擇,正常工作時間爲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 

我的問題是我不知道如何輸入從用戶窗體中的數據被選單元。

任何幫助表示讚賞。謝謝。

+1

在表單中,可以有一個按鈕,比如說_Apply_,它觸發正確值t的賦值一個細胞。要執行實際分配,請選中[this](http://codereview.stackexchange.com/questions/59382/assigning-value-to-cells-with-excel-vba)示例。 – FDavidov

+0

顯示您的用戶表單代碼 – user3598756

+0

我完全不理解FDavidov提供的鏈接。我不明白它如何與我的問題聯繫起來。 我在我的用戶表單代碼中沒有任何代碼,我很無知如何編碼它 - user359856 – Joel

回答

0

讓說你有,你UserForm1

  • Button1,它適用於第1個數值到選定的單元格
  • Button2,它適用於第2個值到選定的單元格
  • 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 
0

假設: 「NormalTime_OB」

  • 的名字命名了 「OverTime_OB」

  • 後的指定時間選項按鈕

    • 正常時間選項按鈕

    • 以「SpecificTim」命名的特定時間TextBox e_TB」

    • 命名的確認按鈕 「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 
    
    相關問題