我是VBA的新手,我正在尝试编写一些代码来选择获取与当前工作表不同的工作表中所有单元格的范围,将其打印在消息框中(用于测试目的),然后返回原始表。我打算使用这个范围在新工作表中创建一个数据透视表,所以最后它需要是" R1C1:R929C25
"为此,我使用了我在这里找到的代码:
How do you select the entire Excel sheet with Range using Macro in VBA?
这是我到目前为止的代码:
Sheets("My_Sheet_Name").Cells.Select
MsgBox (Str(Range(Cells.Address)))
Sheets(Sheets.Count).Select
但是,这会返回错误:
运行时错误' 1004':
选择Range类的方法失败。
编辑:
我已经获得了获得范围的代码,但我如何将其变成表格" R1C1:R929C25
"?
完成的工作代码:
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
答案 0 :(得分:1)
您有两种选择。首先,您可以使用变量来存储您希望采取行动的范围。如果它是一次性程序,则变量是不必要的,但如果它是重复性任务,或涉及多个引用,则使用变量。
选项二是直接引用没有变量的其他范围。如果它只是一次性动作,例如显示消息框,请再次使用它。
第一个例子:
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)
答案 1 :(得分:1)
根据评论中的更新和更改,我将包括声明范围的完整代码集,并在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
答案 2 :(得分:0)
您无法从未处于活动状态的工作表中选择单元格,但可以参考它们。你想对“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