首页 文章

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

提问于
浏览
0

我是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

3 回答

  • 0

    你有两个选择 . 首先,您可以使用变量来存储您希望采取行动的范围 . 如果它是一次性过程,则变量不是必需的,但如果它是重复性任务,或涉及多个引用,则使用变量 .

    选项二是直接引用没有变量的其他范围 . 同样,如果它只是一次性操作,请使用此选项,例如显示消息框 .

    第一个例子:

    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

    根据更新和注释中的更改,我将包含声明范围的完整代码集,并在 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
    
  • 1

    您无法从未处于活动状态的工作表中选择单元格,但可以引用它们 . 你想对“ 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
    

相关问题