0

5 人のメンバーのチームがアクセスするスプレッドシートを共有フォルダーに入れています。スプレッドシートの変更を追跡することは、時間の経過とともに困難になります。

以下を実現したいと思います。Excel には、250 行を超える約 8 列 (シート 1 のみ) があります。所有者 (列 9) と最終更新 (列 10) の 2 つの列をシート 1 に追加したいと思います。

所有者 - 列 9 - その行を変更したチーム メンバー名

日付 - 列 10 - 現在 その行が最後に更新された日付と時刻。

列 9 と列 10 を自動的に入力する VBA コードを教えてください。

4

1 に答える 1

1

編集- row = ActiveCell.row を row = Target.row に変更しました (同じ行にいない場合に使用できます)

このようなものがうまくいくはずです。明らかに、特定のフィールドが変更された場合などにのみ更新を行いたい場合は、いくつかのエラー処理とおそらくさらに検証を追加することを検討したいかもしれませんが、これは確かに基本をカバーしています:

Private Sub Worksheet_Change(ByVal Target As Range)
    ' declare constants and variables
    Const owner_col As String = "I"
    Const date_col As String = "J"
    Dim row As Double
    Dim owner_addr As Range
    Dim date_addr As Range

    ' initialise
    row = Target.row
    Set owner_addr = Range(owner_col & row)
    Set date_addr = Range(date_col & row)

    ' check that the update is not to the fields you want to update to avoid infinite loop
    If Target.Address <> owner_addr.Address And Target.Address <> date_addr.Address Then
        ' set values
        owner_addr.Value = Environ("username")
        date_addr.Value = Now()
    End If

   ' free up the memory
   Set owner_addr = Nothing
   Set date_addr = Nothing

End Sub

これは、変更を追跡するシートに追加する必要があります (つまり、モジュールまたはワークブック全体ではありません)。ご不明な点がございましたら、お知らせください。

Environ("username") は、Windows 環境変数からユーザー名を取得します。

于 2013-06-25T10:41:40.713 に答える