复制/特殊粘贴范围从多个关闭的工作簿到主工作簿

时间:2019-02-15 14:49:29

标签: excel vba

我正在尝试从桌面上某个文件夹中的每个已关闭工作簿复制Range(A14:N26),并将它们粘贴到当前工作表(这是我的主工作表)中。该代码的确捕获了正确的数据范围,但在粘贴部分却遇到了困难。 由于单元格中有公式,因此应该特殊粘贴代码,而我只想复制单元格中可见的内容。 (注意:某些公式的结果是单词,其他公式的结果是数字)

Option Explicit

Sub CopySheetFromFileOnDesktop()

Dim wkbDest As Workbook
Dim wksDest As Worksheet
Dim wkbSource As Workbook
Dim wksSource As Worksheet
Dim MyPath As String
Dim MyFile As String
Dim SheetIndex As Integer



Application.ScreenUpdating = False

Set wkbDest = ThisWorkbook
Set wksDest = wkbDest.Worksheets("Master Sheet")

SheetIndex = 1

MyPath = "C:\Users\.."

If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\"

MyFile = Dir(MyPath & "*.xlsm")


Do While Len(MyFile) > 0
    Set wkbSource = Workbooks.Open(MyPath & MyFile)
    Set wksSource = wkbSource.Worksheets("Sheet containing the info")
    If WorksheetFunction.CountA(wkbSource.Sheets("Sheet containing the 
info").Range("A14:L26")) <> 0 Then
   'lRow = .Range("L" & Rows.Count).End(xlUp).Row 'UNSURE HOW TO LAST ROW
    wkbSource.Sheets("Sheet containing the info").Range("A14:L26").Copy
    wkbDest.Range("A:L" & Rows.Count).End(xlUp)(2).PasteSpecial _ 
    Paste:=xlPasteValues 'PASTESPECIAL SEEMS TO BE THE PROBLEM

    wkbSource.Close savechanges:=False

    Application.CutCopyMode = False

    Else
    End If
Loop

Application.ScreenUpdating = True

MsgBox "Completed...", vbInformation


End Sub

在运行宏时,它将显示以下错误:运行时错误438:对象不支持属性或方法。调试器会高亮显示我定义粘贴复制范围的位置的行

1 个答案:

答案 0 :(得分:0)

带有目标范围的代码行需要优化:

  • 您错误地使用了wkbDest而不是wksDest
  • getFormConfig('firstModule').mutation({ variables: { firstModuleArg: 'foo' } }) getFormConfig('secondModule').mutation({ variables: { secondModuleArg: 42 } }); 不能寻址部分行
  • 如果您使用Range("A:L" & 1000)不带前导点,则假定使用ActiveSheet

第一次尝试

Rows.Count

目标构建如下:

  • 找到第1列中最后使用的单元格(例如A100)
  • 将其偏移到下一行(例如A101)
  • 将其大小调整为1行12列的新尺寸(例如A101:L101)

第二次尝试:

如果粘贴,则仅需要寻址目标的第一个单元格。因此,以下操作也应该起作用:

wksDest.Cells(wksDest.Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 12).PasteSpecial _
   Paste:=xlPasteValues

推荐

如果您定义大小相同的源和目标范围,则只需分配它们的值即可(类似于PastSpecial值,但速度更快):

wksDest.Cells(wksDest.Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial _
   Paste:=xlPasteValues