正在选择其他工作表中的所有数据 VBA
Selecting all data in other worksheet VBA
我是 VBA 的新手,我正在尝试编写一些代码来选择获取与当前作品不同的作品 sheet 中所有单元格的范围,将其打印在消息框(用于测试目的),并将 returns 更改为原始 sheet。我打算使用这个范围在新的 sheet 中创建一个枢轴 table,所以最后它需要采用“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
然而,这returns一个错误:
Run-time error '1004':
Select method of Range class failed.
编辑:
我已经获得了获取范围的代码,但如何将其变成“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",
表名:=输入值+“_数据透视表”_
, 默认版本:=xlPivotTableVersion10
你有两个选择。首先,您可以使用一个变量来存储您希望采取行动的范围。如果是一次性过程,则不需要变量,但如果是重复性任务,或涉及多个引用,则使用变量。
选项二是不带变量直接引用其他范围。同样,如果它只是一次性操作,请使用它,例如显示消息框。
第一个例子:
Set rng = Sheets("My_Sheet").Cells
msgbox(rng.address)
第二个例子:
msgbox(Sheets("My_Sheet").Cells.Address)
有一点要注意,Sheet.Cells
属性returns所有的单元格都适用sheet。所以它总是 $A:$XFD48576
如果您只想要实际存储数据的单元格,请尝试使用 UsedRange
属性,例如:
Set rng = Sheets("My_Sheet").UsedRange
msgbox(rng.address)
您不能 select 来自 sheet 您不活跃的单元格,但您可以引用它们。你想对 "My_Sheet_Name"
中的单元格做什么
如果您想要来自不同 sheet 的范围地址并且不知道最后一行或最后一列,那么您可以使用此代码。
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
根据评论中的更新和更改,我包含了声明范围的全套代码,并在 Pivot Table
中使用该范围以用于新的 sheet.请注意,我没有执行完整的错误检查,因此应该将其添加到代码中。例如检查新的sheet名称是否已经存在,或者主元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
我是 VBA 的新手,我正在尝试编写一些代码来选择获取与当前作品不同的作品 sheet 中所有单元格的范围,将其打印在消息框(用于测试目的),并将 returns 更改为原始 sheet。我打算使用这个范围在新的 sheet 中创建一个枢轴 table,所以最后它需要采用“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
然而,这returns一个错误:
Run-time error '1004':
Select method of Range class failed.
编辑:
我已经获得了获取范围的代码,但如何将其变成“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",
表名:=输入值+“_数据透视表”_ , 默认版本:=xlPivotTableVersion10
你有两个选择。首先,您可以使用一个变量来存储您希望采取行动的范围。如果是一次性过程,则不需要变量,但如果是重复性任务,或涉及多个引用,则使用变量。
选项二是不带变量直接引用其他范围。同样,如果它只是一次性操作,请使用它,例如显示消息框。
第一个例子:
Set rng = Sheets("My_Sheet").Cells
msgbox(rng.address)
第二个例子:
msgbox(Sheets("My_Sheet").Cells.Address)
有一点要注意,Sheet.Cells
属性returns所有的单元格都适用sheet。所以它总是 $A:$XFD48576
如果您只想要实际存储数据的单元格,请尝试使用 UsedRange
属性,例如:
Set rng = Sheets("My_Sheet").UsedRange
msgbox(rng.address)
您不能 select 来自 sheet 您不活跃的单元格,但您可以引用它们。你想对 "My_Sheet_Name"
如果您想要来自不同 sheet 的范围地址并且不知道最后一行或最后一列,那么您可以使用此代码。
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
根据评论中的更新和更改,我包含了声明范围的全套代码,并在 Pivot Table
中使用该范围以用于新的 sheet.请注意,我没有执行完整的错误检查,因此应该将其添加到代码中。例如检查新的sheet名称是否已经存在,或者主元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