インターンシップのために VBA を使い始めたばかりですが、現在のプロジェクトで小さな問題が発生しています。オンラインには何もないので、これは私が見ていない簡単な修正であると確信しています。
私のワークシートは、リスト オブジェクトの行でいくつかの入力値を受け取り、マッピングから関連する値を同じ行の他の列に返します。
ユーザーが変更した行に対してのみFindBankInfoサブを実行したい
If Not Intersect(Target, lo.ListColumns("Document Type").Range) Is Nothing Or Not Intersect(Target, lo.ListColumns("Bank").Range) Is Nothing _
Or Not Intersect(Target, lo.ListColumns("Transit Type").Range) Is Nothing Then
'rowCount in the sub is used as lo.listrow(rowcount), it's the table row I am working with
FindBankInfo lo, loMap, loMap2, rowCount
End If
私はこれをこのように機能させることができます
If Not Intersect(Target, lo.ListColumns("Document Type").Range) Is Nothing Or Not Intersect(Target, lo.ListColumns("Bank").Range) Is Nothing _
Or Not Intersect(Target, lo.ListColumns("Transit Type").Range) Is Nothing Then
For Each lr in lo.ListRows
rowCount = rowCount + 1
FindBankInfo lo, loMap, loMap2, rowCount
Next lr
End If
このように、何かが変更されるたびにすべての行を通過し、サブですでに入力されている場合はスキップします。しかし、これはばかげて非効率的であり、入力された行の間の空白行をチェックしているため、行が多いと遅くなるため、空白で終わることはできません。
必要なのは、ターゲットを指定することです。そのターゲット範囲を関連する ListObject 範囲に変換し、ListObject の行番号を取得するにはどうすればよいですか?
Target.ListObject は、テーブルに適切な範囲を提供するので、テーブルに触れることができ、操作したい正確な範囲を取得できますが、行番号はテーブルではなくシートの行数に関連しています。いくつかのガイダンスをいただければ幸いです、ありがとう。