首页 > 解决方案 > Excel VBA .Select 仅适用于表格(1)

问题描述

我目前正在设置新的设计 Excel 文件以更好地适应移动设备。但是一些客户也需要旧的设计文件,我需要将数据从新的设计文件导出到旧的设计文件。旧设计文件包含 4 张。导出数据后,我想在所有工作表上选择单元格 A1。但我只能 Range("A1").Select 或 Cells(1,1).Select on Sheets(1)。如果我在其他工作表上设置,我得到“运行时错误'1004':范围类的选择方法失败”。以下是 VBA 代码以及一些评论。请帮忙。

Set Old_CV = Application.Workbooks.Open(Old_File_Path)
ThisWorkbook.Worksheets("Data_Import").ListObjects("tbl_part2").DataBodyRange.Copy
wsTarget = ThisWorkbook.Worksheets("Data_Import").Range("rng_CV_Part2_Old")
Old_CV.Worksheets(wsTarget).Range(wsSource.Range("rng_P2_A1_Start_Old").Value).PasteSpecial xlPasteValuesAndNumberFormats

Old_CV.Activate
Old_CV.Sheets(1).Cells(1, 1).Select 'This line works even without Old_CV.Active
Old_CV.Sheets(2).Cells(1, 1).Select 'This and below lines don't work even with Old_CV.Active and showing Runtime Error
Old_CV.Sheets(3).Cells(1, 1).Select
Old_CV.Sheets(4).Cells(1, 1).Select

请帮忙。

标签: excelvba

解决方案


激活和选择

  • Select并且Activate通常是要避免的,但是没有它们你就无法完成这项任务。
  • 一个好主意是从最后一个工作表到第一个工作表执行此操作,因此第一个保持选中状态(激活)。
  • 在前两个示例中,您在选择单元格之前激活了每个工作表,因此您无需激活工作簿。
  • 在第三个示例中,您必须首先激活工作簿,最后您必须选择第一个工作表“摆脱组”。
  • 注释掉的行用于创建关键的工作示例,其中第一个工作簿处于活动状态。

编码

Option Explicit

Sub test1()
    
'    Dim Old_CV As Workbook
'    Set Old_CV = ThisWorkbook
'    Workbooks("Book2").Activate
'    ActiveSheet.Cells(1, 1).Value = 1
    
    Old_CV.Worksheets(4).Activate
    Old_CV.Worksheets(4).Cells(1, 1).Select
    Old_CV.Worksheets(3).Activate
    Old_CV.Worksheets(3).Cells(1, 1).Select
    Old_CV.Worksheets(2).Activate
    Old_CV.Worksheets(2).Cells(1, 1).Select
    Old_CV.Worksheets(1).Activate
    Old_CV.Worksheets(1).Cells(1, 1).Select

End Sub

Sub test2()
    
'    Dim Old_CV As Workbook
'    Set Old_CV = ThisWorkbook
'    Workbooks("Book2").Activate
'    ActiveSheet.Cells(1, 1).Value = 2
    
    Dim n As Long
    For n = 4 To 1 Step -1
        Old_CV.Worksheets(n).Activate
        Old_CV.Worksheets(n).Cells(1, 2).Select
    Next n

End Sub

Sub test3()
    
'    Dim Old_CV As Workbook
'    Set Old_CV = ThisWorkbook
'    Workbooks("Book2").Activate
'    ActiveSheet.Cells(1, 1).Value = 3
    
    Old_CV.Activate
    Old_CV.Worksheets(Array(1, 2, 3, 4)).Select
    ActiveSheet.Cells(1, 3).Select
    Old_CV.Worksheets(1).Select

End Sub

推荐阅读