使用范围variables

尝试将Range用作variables时遇到问题。 继续获取“select范围类失败”错误的方法。 任何想法,我可能在这里做错了吗?

Dim OnRent As Workbook Dim MattFile As Workbook Dim Rng As Range Set OnRent = Workbooks("On-Rent 09-22-17.xlsx") Set MattFile = ThisWorkbook Set Rng = ActiveSheet.Range("B101") OnRent.Activate ActiveSheet.PivotTables("PivotTable1").PivotFields("CHKOUT_POOL"). _ ClearAllFilters ActiveSheet.PivotTables("PivotTable1").PivotFields("CHKOUT_POOL").CurrentPage _ = "LOS ANGELES" Range("B15:L108").Copy MattFile.Activate Sheets("LAX Data").Activate Rng.Select ActiveSheet.Paste 

问题:如果Rng.Parent处于活动状态,则Rng.Select才起作用

如果范围所属的表格处于活动状态,Range.Select方法将仅工作。

Rng范围可能不在Sheets("LAX Data")并且在另一个工作表处于活动状态时调用Rng.Select ,则会出现错误。

为了进一步解释:

您将范围设置为
Set Rng = ActiveSheet.Range("B101") '注意:这可以是任何工作表。 范围对象将它的位置和它来自的表一起存储,因为文件是由完整/绝对path定义的。

后来,当你想要Rng.Select你是(可以)在不同的工作表和select将无法正常工作。

不要使用Range.Select和Sheet.Activate方法

看到Mats链接 ! 或者像Power Excel vba这样的网上许多许多build议的秘密,避免使用select

一些代码替代

为了演示如何工作,这里有一些未经testing的代码。

 Sub refreshOnRentForLosAngeles() Dim OnRentSheetWithPivots As Worksheet Dim Pivot As PivotTable Set OnRentSheetWithPivots = Workbooks("On-Rent 09-22-17.xlsx").Sheets(1) 'change to fit Set Pivot = OnRentSheetWithPivots.PivotTables("PivotTable1") Pivot.PivotFields("CHKOUT_POOL").ClearAllFilters Pivot.PivotFields("CHKOUT_POOL").CurrentPage = "LOS ANGELES" 'Turn the city into input variable for reusability? 'The copy source will always be the same? Can u make it dynamic? OnRentSheetWithPivots.Range("B15:L108").Copy ThisWorkbook.Sheets("LAX Data").Range("B101") End Sub 

如果要在"LAX Data"表上参考范围"B101" ,则应该用Range("B101").SelectreplaceRng.Select 。 这样你不会尝试select不在ActiveSheet上的范围(这是错误的原因)。