当前位置: 首页 > 知识库问答 >
问题:

当从范围复制和粘贴到新范围时,VBA宏代码为什么失败?

倪灿
2023-03-14

我试图将一系列数据从一个工作表复制到不同的工作表,在识别出我要粘贴到的工作表上的单元格值与“复制自”工作表中的单元格匹配的日期之后。当我从“粘贴到”工作表(“每日摘要记录”)运行宏时,该宏起作用,但如果我从另一个工作表运行该宏,则该宏不起作用。我希望能够从工作簿中的任何工作表运行它,尤其是从PASTE from工作表运行。

以下是我的代码:

'Daily Itemized')

Sub ArchiveWeek()

    Set thisMon = Worksheets("Daily Itemized").Range("F5") 'Assigns variable thisMon as the date value in Daily Itemized Tab, F5 cell
        
    Dim ws As Excel.Worksheet
    Dim FoundCell As Excel.Range
     
    Set ws = Worksheets("Daily Summary Record")
    Set FoundCell = ws.Range("D:D").Find(what:=thisMon, lookat:=xlWhole)
    If Not FoundCell Is Nothing Then
        FoundCell.Offset(0, 1).Select 'PROBLEM. Supposed to: Selects the cell to the adjacent right of the cell in column D with the same date as the Itemized F5 cell
        Worksheets("Daily Itemized").Range("G5:S11").Copy  'Works to copy range on Daily sheet
        FoundCell.Offset(0, 1).Select 'reselects the cell to right of FoundCell
        Selection.PasteSpecial xlPasteValues  'works!
        MsgBox ("Your week time values have been pasted!")
    Else
        MsgBox ("The Date of " & thisMon & " was not found in the Daily Summary Record, Column D. Recheck values.")
    End If
    
End Sub

有关两个工作表的图像,请参阅附件:

'每日明细'

“每日摘要记录”

共有2个答案

韶硕
2023-03-14

感谢您的帖子。不能从非活动工作表中选择单元格。这就是为什么它仅在您在“粘贴到”工作表上时才有效。

要解决此问题,请考虑对您的代码进行此小更改:

    ...
If Not FoundCell Is Nothing Then
    ws.Select
    ...

这应确保在执行其余代码之前激活 PASTE TO 工作表。

冉伯寅
2023-03-14

尽可能避免使用选择(以及选择激活):

Sub ArchiveWeek()
    Set thisMon = Worksheets("Daily Itemized").Range("F5") 'Assigns variable thisMon as the date value in Daily Itemized Tab, F5 cell

    Dim ws As Excel.Worksheet
    Dim FoundCell As Excel.Range

    Set ws = Worksheets("Daily Summary Record")
    Set FoundCell = ws.Range("D:D").Find(what:=thisMon, lookat:=xlWhole)
    If Not FoundCell Is Nothing Then
        'Copy range on Daily sheet
        Worksheets("Daily Itemized").Range("G5:S11").Copy
        'Paste it on the summary sheet commencing one cell
        ' to the right of the location of the date
        FoundCell.Offset(0, 1).PasteSpecial xlPasteValues
        MsgBox ("Your week time values have been pasted!")
    Else
        MsgBox ("The Date of " & thisMon & " was not found in the Daily Summary Record, Column D. Recheck values.")
    End If

此外,因为您只想复制值,所以您可以通过绕过剪贴板来改进您的代码(在您的代码执行< code >复制和执行< code >粘贴之间,存在用户将其他内容复制到剪贴板的所有相关风险),并且只需将目标区域中的< code >值设置为源区域中的< code >值:

Sub ArchiveWeek()
    Set thisMon = Worksheets("Daily Itemized").Range("F5") 'Assigns variable thisMon as the date value in Daily Itemized Tab, F5 cell

    Dim ws As Excel.Worksheet
    Dim FoundCell As Excel.Range

    Set ws = Worksheets("Daily Summary Record")
    Set FoundCell = ws.Range("D:D").Find(what:=thisMon, lookat:=xlWhole)
    If Not FoundCell Is Nothing Then
        'Copy values from Daily sheet to Summary sheet, commencing
        ' one cell to the right of the location of the date
        FoundCell.Offset(0, 1).Resize(7, 13).Value = _
                    Worksheets("Daily Itemized").Range("G5:S11").Value
        MsgBox ("Your week time values have been pasted!")
    Else
        MsgBox ("The Date of " & thisMon & " was not found in the Daily Summary Record, Column D. Recheck values.")
    End If
 类似资料:
  • 这应该真的很简单,但我一直在拖网论坛和答案数小时来寻找答案,但没有运气,所以我(不情愿地)创造了一个我自己的问题。 我要做的只是简单地创建一个新工作簿,并将另一个工作簿的范围粘贴到该工作簿中。听起来很简单..? 我原来的工作簿,让我们叫Book1。我试图创建一个新的工作簿,Book2,我将把单元格A1:B10的值复制到其中。 以下是我代码的一个版本(从第一册打开开始): 这会给出一个“Range类

  • 在一个编码的UI测试中,我试图使用range.copy从excel复制一个动态范围,并通过ctrl+V将其粘贴到wpf网格中。

  • 谢谢你阅读我的问题。 我有一个表[ws1(A4:Q500)]包含数据,而Q列后面有公式。因此,我无法复制整行,只能复制文本中的特定范围。 Q列是定义数据是否属于周期的公式,即11月16日至11月30日的数据。标志如下: 0 1 = 16/11 - 30/11 2. 这里的目标是将带有标志“1”的ws1数据复制到[ws2(A2:P200)],然后删除带有标志“1”和“2”的ws1数据 相信复制和删除

  • 我需要对SAP做一个大规模的改变。因此,我想有一个宏,复制3个不同的列从excel到sap(约3000行) 销售订单#-数据1-数据2 从excel复制销售订单-执行事务处理/NVA02-粘贴 在excel中复制数据1-在Sap中粘贴 在excel中复制数据2-在Sap中粘贴 下一个销售订单等直到最后一行 excel工作表将由多人用户使用,例如活动工作簿将比路径更有帮助 你能帮我提供一个VBA代码

  • 两者都返回一个列表,那么到底有什么区别呢?

  • 试图将一个范围从Sheet1复制到31张表上的相同范围,但仍然得到“运行时错误1004:工作表类的粘贴方法失败”,调试器指示是问题所在。我可以复制到一张单张没有问题,但不能复制到多张。我试着到处找,但不知道问题是什么(可能也很简单)。