【问题标题】:Excel VBA .Select only works on Sheets(1)Excel VBA .Select 仅适用于表格(1)
【发布时间】:2020-10-24 12:48:15
【问题描述】:

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

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

请帮忙。

【问题讨论】:

  • 床单是否受到保护?可以手动选择吗?
  • Sheets(1) 和 Sheets(2) 受到保护,Sheets(3) 和 Sheets(4) 不受保护。我可以手动选择。

标签: excel vba


【解决方案1】:

激活并选择

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

守则

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

【讨论】:

  • 谢谢@VBasic2008。
    我已经按照你的 test2() 做了,并将 For 循环修改为
    For i = Old_CV.Sheets.Count To 1 Step -1
猜你喜欢
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
  • 2013-04-15
  • 1970-01-01
相关资源
最近更新 更多