0

これは、ここにある以前に尋ねられ回答された質問への直接の参照です:ワークブックの他の Excel シートのデータを自動的に更新する

このスクリプトは問題なく動作しますが、何らかの理由でリスト全体をプルしません。以下は、私のソリューションで機能するように編集したコードです。この最初のコードブロックは使用していません: _

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Call UpdateFromMaster
End Sub

これは私が標準モジュールで使用しているものです:

_

Sub UpdateFromMaster()

Call ResetDestinationSheets


Dim LR As Long, i As Long
LR = Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To LR
If Range("Q" & i).Value = "Todd" Then Rows(i).Copy Destination:=Sheets("Todd").Range("A" & Rows.Count).End(xlUp).Offset(1)
If Range("Q" & i).Value = "Bob" Then Rows(i).Copy Destination:=Sheets("Bob").Range("A" & Rows.Count).End(xlUp).Offset(1)
If Range("Q" & i).Value = "Trevor" Then Rows(i).Copy Destination:=Sheets("Trevor").Range("A" & Rows.Count).End(xlUp).Offset(1)
Next i

End Sub

_

Sub ResetDestinationSheets()


Call ResetThisSheet("Todd")
Call ResetThisSheet("Bob") 
Call ResetThisSheet("Trevor")
End Sub

_

Sub ResetThisSheet(ByRef SheetToClear As String)
Sheets(SheetToClear).Range("A2:S" & Rows.Count).Clear
End Sub

_

さて、UpdateFromMaster マクロを実行した後の私のマスター リストでは、マクロは正常に動作しているようです。各ワークシート (Todd、Bob、Trevor) でリードの数を確認するまで。Bob は 39、Todd は 243、Trevor は 62 になるはずです。マクロを実行すると、Todd のワークシートに 105、Bob のワークシートに 39 (正しい)、Trevor のワークシートに 51 が送信されるだけです。マスターを含むすべてのワークシートに見出し行があります。

これをトラブルシューティングする際に、すべてのワークシートのすべての書式設定をクリアし、「Q」列にすべてのスペルが正しいことを再確認しました。

私が間違っていることについてのアイデアはありますか?

4

1 に答える 1

1

列 A の空白の最初の行で入力が停止するようです。この行は次のとおりです。

LR = Range("A" & Rows.Count).End(xlUp).Row

最初に、列 A のすべての「潜在的な」行の範囲を取得します ( Range("A" & Rows.Count))。Excel のバージョンと、最近保存したかどうかによって、この "潜在的な" 行数には、有効であるが実際には使用されていない数千 (または数百万) の行が含まれる可能性があります。

これを軽減するため.End(xlUp).Rowに、列の最後のセルに垂直に移動するように指示する元のコーダーが追加されました (セル A1 で "control-Down" を押した場合と同じ結果になります)。このアプローチの制限は、「最後に使用されたセル」がグローバルではなくローカルに定義されることです。つまり、途中で最初の空白セルで停止します。

于 2013-06-17T16:45:23.757 に答える