正在选择其他工作表中的所有数据 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