【问题标题】:Run-time 1004: Method 'Range' of object 'Worksheet' failed when Paste运行时 1004:粘贴时对象“工作表”的方法“范围”失败
【发布时间】:2019-05-10 09:30:27
【问题描述】:

我的代码将遍历文件夹中的所有文件,并将信息从工作表“管理器表单”复制到选定的单元格到主文件。 当我想添加更多要复制的范围时,它会阻止我出错。

问题在于这一行:
NewSht.Range("B" & PasteRow).PasteSpecial xlPasteValues

我应该如何指定要粘贴的范围?

Dim folderPath As String
Dim Filename As String
Dim wb As Workbook
Dim Masterwb  As Workbook
Dim sh As Worksheet
Dim NewSht As Worksheet
Dim OldSht As Worksheet
Dim FindRng As Range
Dim PasteRow As Long

' set master workbook
Set Masterwb = Workbooks("result2.xlsm")

folderPath = "C:\Users\Downloads\Tech\TimeSheets2019\inside" 'contains folder path

If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"
Application.ScreenUpdating = False

Filename = Dir(folderPath & "*.xlsx*")
Do While Filename <> ""
    Set wb = Workbooks.Open(folderPath & Filename, ReadOnly:=True)
    Set NewSht = Masterwb.Worksheets("Tabelle1") ' added
    Set OldSht = wb.Worksheets("Manager Form") ' added

    ' get the first empty row in the new sheet
        Set FindRng = NewSht.Cells.Find(What:="*", Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)

        If Not FindRng Is Nothing Then ' If find is successful
            PasteRow = FindRng.Row + 1
        Else ' find was unsuccessfull > new empty sheet, should paste at the first row
            PasteRow = 1
        End If

        OldSht.Range("B7").Copy

        NewSht.Range("B" & PasteRow).PasteSpecial xlPasteValues

    wb.Close False

【问题讨论】:

  • 出错时PasteRow的值是多少?
  • PasteRow 应该是第一个空行,在这种情况下它是 NewSht 中的第二行
  • 如果您只是粘贴值,为什么不使用Range(y).Value = Range(x).Value?它会明显更快。
  • 你说是2还是应该是2?
  • 我的代码应该从每个文件中复制 5 个范围,并在 NewSht 的第一个空闲行中一个接一个地复制它。它将包含姓名、时间、日期等。目前第一个空行是第二行,但没有粘贴任何内容。

标签: excel vba


【解决方案1】:
' get the first empty row in the new sheet
 Dim target as range
 Set target = newsht.cells(NewSht.usedrange.rows.count +1,2)

 Dim target as Range
 Set target = newsht.cells(newsht.rows.count,2).end(xlup).offset(1,0)

然后

  target.formula = OldSht.Range("B7").value  'copy value into blank cell

【讨论】:

  • 第二种解决方案有效。非常感谢。但是当我尝试用“B7:B15”之类的范围替换“B7”时,它仍然只复制B7。你知道怎么解决吗?
  • 您要复制到目标以向下定位 +8 个单元格吗?
  • 我解决了这个问题,但使用 Copy 所以它更慢:OldSht.Range("B7:B15, B17:B26").Copy NewSht.Cells(NewSht.Rows.Count, 2).End (xlUp).Offset(1, 0).PasteSpecial xlPasteValues。但是在填充 B 列之后,我还想用人名填充 A 列,直到最后一行。我被困住了
猜你喜欢
  • 1970-01-01
  • 2020-10-15
  • 2015-11-04
  • 2014-09-08
  • 2016-06-16
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多