这是对以前提出和回答的问题的直接引用:Automatically Update Data in Other Excel Sheets of a Workbook
该脚本工作正常,但由于某种原因,它不会拉动整个列表。以下是我编辑为我的解决方案工作的代码。我不使用此第一个块代码:
_
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)中的潜在客户数量。鲍勃应该有39人,托德应该有243人,特雷弗应该有62人。当宏运行时,它只发送105到Todd的工作表,39发送给Bob的(这是正确的),51发送给Trevor的。我在所有工作表上都有一个标题行,包括Master。
当我遇到麻烦时,我清除了所有工作表上的所有格式,并仔细检查所有内容是否拼写在“Q”列中。
关于我做错的任何想法?
答案 0 :(得分:1)
看起来你的输入将停在A列空白的第一行。这一行:
LR = Range("A" & Rows.Count).End(xlUp).Row
首先获取A列(Range("A" & Rows.Count)
)中所有“潜在”行的范围。根据您的Excel版本以及您最近是否保存过它,此“潜在”行数可能包括数千(甚至数百万)行有效但实际未使用的行。
为了缓解这种情况,原始编码器添加了.End(xlUp).Row
,它告诉它垂直转到列中的最后一个单元格(如果你在单元格A1上按下“control-Down”,它会得到同样的结果) 。这种方法的局限性在于“最后使用过的细胞”是局部定义的,而不是全局定义的,这意味着它会在第一个balnk细胞中停止。