Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 使用范围变量_Excel_Vba_Range - Fatal编程技术网

Excel 使用范围变量

Excel 使用范围变量,excel,vba,range,Excel,Vba,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 Ac

我在尝试使用范围作为变量时遇到问题。继续获取“范围类的选择方法失败”错误。你知道我可能做错了什么吗

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
范围可能不在
工作表(“LAX数据”)
上,当另一个工作表处于活动状态时,通过调用
Rng。选择
,您会遇到错误

进一步解释:

您将范围设置为
Set Rng=ActiveSheet.Range(“B101”)
“注意:这可以是任何图纸。范围对象将其位置与其所在的图纸一起存储,因为文件是由完整/绝对路径定义的

稍后,当您想
Rng时,选择
您(可以)在不同的工作表上,选择将不起作用

不要使用范围。选择和工作表。如果不需要,请激活方法 瞧!或者网上的许多建议中的一些,比如

一些代码替代方案 为了演示这是如何工作的,下面是一些未经测试的代码

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数据”
上参考范围
“B101”
,则应替换
Rng。选择
范围(“B101”)。选择
。这样,您就不会尝试选择不在
ActiveSheet
上的范围(这是出现错误的原因)。

谢谢,但我正试图避免这样做。这就是我现在拥有它的方式,但是我正在浏览17张不同的表格,所以我希望只更改一次范围,而不是每次都要查找和替换。谢谢您的反馈。因此,即使我在选择Rng单元之前激活了该表,它仍然不知道将其放置在何处?听起来最好的办法就是继续做我正在做的事情,每天都找到并更换这个范围。问题是,我每天都在更新一个报表,它使用17个不同的选项卡将数据从一个报表粘贴到一个单独的报表,因此上面的代码重复17次,但针对不同的数据选项卡。我想我会尝试找到一种每天更改范围输出的简单方法,而不是每次都查找和替换。@mpthomas1219 1)您缺少的是:Rng变量正在对单元格进行笔划。在床单上。只有那些。它是一个对象,不是一个单元格地址。(阅读多次)。2) 不要查找和替换硬编码值。让它们成为变量。例如,你可以下拉城市名称和目标表。然后你只需选择你需要的并按下一个按钮。3) 如果每张工作表上的粘贴(目标)单元格始终为
B101
,则可以使用此字符串作为地址,并将其与工作表组合,形成一个范围。更好的是,创建一个工作表范围的命名范围并使用它。