3

私は現在、イニシアチブとして代替出席監視システムに取り組んでいます。現在、私は以下のようなユーザーフォームをデザインしています: タイムスタンプユーザーフォーム

それはこのように動作します:

  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 コーディングの専門家ではありません。オンラインでコードを検索しただけです。上記のコードは、データが入力される次の空の行を決定します。ユーザーフォームに入力すると、シートの結果は次のようになります

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

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

良きサマリア人をよろしくお願いします!:)

4

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
于 2016-12-16T02:44:22.343 に答える