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