2016-12-16 8 views
3

私は現在、代替出席監視システムをイニシアチブとして取り組んでいます。現在、私は、以下のいずれかのように見える私のユーザーフォームを設計した: Time Stamp UserformVBAプログラミング。ユーザーフォームから特定の行や列にデータをシートに転送する方法

それは次のように機能します。従業員は、彼/彼女が使用されるタイムスタンプの種類を選択します

  1. :時間のタイムアウト、1回目のブレーク開始、1回目のブレーク終了、2回目のブレーク開始、または2回目のブレーク終了。

  2. 従業員番号は、従業員のバーコードフィールドに入力されます。現在

、私はこのコードを持っている:

Private Sub CancelButton_Click() 
    Unload Me 
End Sub 

Private Sub ClearButton_Click() 
    Call UserForm_Initialize 
End Sub 

Private Sub OKButton_Click() 
    Dim emptyRow As Long 

    'Make Sheet1 active 
    Sheet1.Activate 

    'Determine emptyRow 
    emptyRow = WorksheetFunction.CountA(Range("B:B")) + 1 

    'Transfer information 

    If TimeOptionButton1.Value = True Then 
     Cells(emptyRow, 5).Value = "Yes" 
    End If 
    If TimeOptionButton2.Value = True Then 
     Cells(emptyRow, 7).Value = "Yes" 
    End If 
    If BreakOptionButton1.Value = True Then 
     Cells(emptyRow, 9).Value = "Yes" 
    End If 
    If BreakOptionButton2.Value = True Then 
     Cells(emptyRow, 11).Value = "Yes" 
    End If 
    If BreakOptionButton3.Value = True Then 
     Cells(emptyRow, 14).Value = "Yes" 
    End If 
    If BreakOptionButton4.Value = True Then 
     Cells(emptyRow, 16).Value = "Yes" 
    End If 

    Cells(emptyRow, 2).Value = BarcodeTextBox.Value 
End Sub 

Private Sub UserForm_Initialize() 
'Set Time In as default 
    TimeOptionButton1.Value = True 

    'Empty BarcodeTextBox 
    BarcodeTextBox.Value = "" 
End Sub 

私は本当に私はちょうどオンラインコードを検索VBAコーディング、の専門家ではないです。上のコードは、データが入力される次の空の行を決定します。ユーザーフォームに記入すると、シートの結果は次のようになります。 Results

ご覧のとおり、1人の従業員のタイムスタンプは複数の行に入力されています。

しかし、私が望んでいたのは、自分のタイムスタンプのすべてが1行で複数の行ではなくなるように、1行のみが1つの従業員番号専用になるということでした。私は誰かが私にこれを助けることを願っています。入力された人のバーコードが既にシート上にあればそれを検索し、そうであれば同じ行にタイムスタンプを入力するというコードを考えました。私はそれが1行にあることを望んだので、オーバーブレイクの計算や人数などの公式を簡単に公式化することができます。

良いサマリア人のために前もってありがとう! :)あなたのコードに最小限の変更に伴い

答えて

2

、ラインこの中へ

`emptyRow = WorksheetFunction.CountA(Range("B:B")) + 1` 

変更してみてください:

Dim rFound as Range: Set rFound = Range("B:B").Find(BarcodeTextBox.Value, , , xlWhole) 
If rFound Is Nothing then 
    emptyRow = Range("B" & Rows.Count).End(xlUp).Row + 1 
Else 
    emptyRow = rFound.Row 
End If 
+0

こんにちは@ASHを:)しかし、お返事どうもありがとうございます実行時にエラーが発生しました。本当にすごくうれしいです。 emptyRow = IIf(rFoundはNothing、Range( "B"&Rows.Count).End(xlUp).Row + 1、rFound.Row) ランタイムエラー'91を示します':オブジェクト変数またはWithブロック変数が設定されていません –

+0

こんにちは@ChenilleMasangya、はい私はなぜそうですか。更新された返信を考慮してください:) –

+1

ありがとうございます!それは今働いている!私は今、とても幸せです。 –

関連する問題