使用范围变量

时间:2017-09-25 17:22:57

标签: excel vba range

尝试将Range用作变量时遇到问题。继续获取“范围类选择方法失败”错误。知道我在这里做错了什么吗?

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

2 个答案:

答案 0 :(得分:1)

问题:Rng.Select仅在Rng.Parent处于活动状态

时有效

只有范围所属的工作表处于活动状态时,Range.Select方法才有效。

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

进一步解释:

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

稍后,如果您希望Rng.Select您(可以)在不同的工作表上,则选择将无效。

如果您不需要

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

Mats link!或者网上有一些很多建议,比如Power Excel vba secret, avoid using select

一些代码替代

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

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

答案 1 :(得分:0)

如果您想在工作表<div class="form-group" *ngFor="let genero of generos" > {‌{genero.name}}</div>上引用范围"B101",则应将"LAX Data"替换为Rng.Select。这样你就不会尝试选择不在Range("B101").Select上的范围(这是错误的原因)。