select其他工作表VBA中的所有数据

我是VBA的新手,我正在尝试编写一些代码来select获取不同于当前工作表的所有单元格的范围,将其打印在消息框中(用于testing目的),并返回到原始表单。 我打算使用这个范围在新的表中创build一个数据透视表,所以最后它需要forms为“ R1C1:R929C25 ”为了做到这一点,我使用了我在这里find的代码:

如何在VBA中使用macrosselect整个Excel表格?

这是我到目前为止的代码:

 Sheets("My_Sheet_Name").Cells.Select MsgBox (Str(Range(Cells.Address))) Sheets(Sheets.Count).Select 

但是,这会返回一个错误:

运行时错误“1004”:
selectRange类失败的方法。

编辑:我已经得到了代码来获得范围,但我怎么做到“ R1C1:R929C25 ”的forms?

完成的工作代码:

 Dim rng As Range Set rng = Sheets("My_Sheet").UsedRange Dim rc_range rc_range = "R" & Trim(Str(rng.Rows.Count)) & "C" & Trim(Str(rng.Columns.Count)) MsgBox (rc_range) ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "My_Sheet!R1C1:" & rc_range, Version:=xlPivotTableVersion10). _ CreatePivotTable TableDestination:=ActiveSheet.Name + "!R4C4", 

TableName:= inputValue +“_PivotTable”_,DefaultVersion:= xlPivotTableVersion10

你有两个select。 首先,您可以使用一个variables来存储您希望执行的范围。 如果是一次性过程,则不需要variables,但如果是重复性任务或涉及多个引用,则使用variables。

选项二是直接引用另一个没有variables的范围。 再次,如果只是一次性操作,比如显示一个消息框,就使用它。

第一个例子:

 Set rng = Sheets("My_Sheet").Cells msgbox(rng.address) 

第二个例子:

 msgbox(Sheets("My_Sheet").Cells.Address) 

有一件事要注意, Sheet.Cells属性返回适用工作表上的所有单元格。 所以它总是$A$1:$XFD$1048576

如果您只想要实际存储数据的单元格,请尝试使用UsedRange属性,例如:

 Set rng = Sheets("My_Sheet").UsedRange msgbox(rng.address) 

根据更新和评论中的更改,我将包含一整套声明范围的代码,并将该范围用于新工作表中的Pivot Table中。 请注意,我没有执行完整的错误检查,所以应该添加到代码中。 例如,检查新工作表名称是否已经存在,或者数据透视表名称是否已经存在,如果是,则相应地处理。

 Sub CreatePivotFromDynamicRange() Dim wsNew As Worksheet Dim rngData As Range Dim rngDestination As Range 'Add a new worksheet to store the pivot table '[NOTE] if sheet named "PivotSheet" already exists it will throw error Set wsNew = Worksheets.Add() wsNew.Name = "PivotSheet" 'Define the range with the data needed for the pivot Set rngData = Sheets("My_Data").UsedRange 'define the pivot destination Set rngDestination = wsNew.Range("A5") ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rngData, _ Version:=xlPivotTableVersion14).CreatePivotTable tabledestination:=rngDestination, _ tablename:="NewPivot", defaultVersion:=xlPivotTableVersion14 End Sub 

您不能从不活跃的工作表中select单元格,但可以引用它们。 你想用“ My_Sheet_Name"的单元格做什么

如果你想从不同的工作表范围地址,不知道最后一行或最后一列,那么你可以使用这个代码。

 Sub SelectLastCellInInSheet() Dim sh As Worksheet Dim Rws As Long, Col As Integer, r As Range, fRng As Range Set sh = Sheets("My_Sheet_Name") With sh Set r = .Range("A1") Rws = .Cells.Find(what:="*", after:=r, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row Col = .Cells.Find(what:="*", after:=r, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column Set fRng = .Range(.Cells(1, 1), .Cells(Rws, Col)) End With MsgBox fRng.Address End Sub