Excel,复制/粘贴值而不更改活动工作簿/工作表?

问题描述 投票:0回答:1

两部分问题

1. 为什么这不起作用? 我可以通过先激活工作表来复制单元格,但是我不应该能够在不激活工作表的情况下复制它吗?

Sub test()
    Dim wbSource, wbTarget As Workbook
    Dim wsSource As Worksheet
    Set wbSource = ThisWorkbook
    Set wsSource = wbSource.Worksheets(1)
    
    Set wbTarget = Workbooks.Add
    Set wsTarget = wbTarget.Worksheets(1)
    
    'Doesnt work
    wsSource.Range(Cells(1, 1), Cells(2, 2)).Copy
    
    'Works
    'wsSource.Activate
    'Range(Cells(1, 1), Cells(2, 2)).Copy
    
    
    wsTarget.Cells(1, 1).PasteSpecial
End Sub

我得到的错误是: “运行时错误‘1004’:” “对象‘_Worksheet’的方法‘Range’失败”

换掉不与代码一起工作的部分(已注释掉)会导致 Excel 在每个工作表中闪烁(如果数据分布在 wbSource 中的多个工作表上),并且如果用户执行更改活动工作表的输入,宏可能会中断(复制/粘贴错误的值)。

2. 我想做的是不需要在活动工作簿之间交替,所以我不依赖于当前活动的工作簿/工作表(选定的窗口)。 最终,我试图避免的是,如果用户单击任何内容,并在宏运行时更改活动工作簿/工作表并弄乱顺序。

excel macros copy range cell
1个回答
0
投票

当通过 Cells 对象定义 Range 时,它们也必须像编辑的代码中那样进行限定

Sub test()
    Dim wbSource, wbTarget As Workbook
    Dim wsSource As Worksheet
    Set wbSource = ThisWorkbook
    Set wsSource = wbSource.Worksheets(1)
    
    Set wbTarget = Workbooks.Add
    Set wsTarget = wbTarget.Worksheets(1)
    
    'Doesnt work     'edited
    wsSource.Range(wsSource.Cells(1, 1), wsSource.Cells(2, 2)).Copy
    
    'Works
    'wsSource.Activate
    'Range(Cells(1, 1), Cells(2, 2)).Copy
    
    
    wsTarget.Cells(1, 1).PasteSpecial
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.