使用公式将源工作表中的值粘贴

时间:2018-07-26 16:40:00

标签: excel vba excel-vba excel-formula

我是VBA的新手,正尝试开发一个简单的宏,该宏将自动从已定义的工作表和范围(总是相同的列,不同的行)中从存储在单个文件夹中的许多不同工作簿中提取某些数据,并将其合并到通过将信息粘贴到预定义的列中,并将所有行都放在另一行下,从而获得一张主表。通过该站点的帮助,我能够开发以下代码,该代码恰好满足了我的需要。但是,由于源信息具有许多公式,因此我遇到了问题,这些公式移到主工作簿时会返回“ 00000000”而不是正确的值。我认为问题是由于我的宏正在尝试复制和粘贴基础公式(如果我将源信息更改为可以正常工作的值),而不是在粘贴之前将其转换为值。

这样,我想我需要做的就是修改宏,以便它仅从源信息中提取值并将这些值粘贴到主工作簿中。

我的代码是:

Sub CopyRange()
Application.ScreenUpdating = False
Dim wkbDest As Workbook
Dim wkbSource As Workbook
Set wkbDest = ThisWorkbook
Const strPath As String = "C:\Users\lci\Desktop\Project Work\Info Gathering\Master Data File\"
ChDir strPath
strExtension = Dir("*.xlsm*")
Do While strExtension <> ""
    Set wkbSource = Workbooks.Open(strPath & strExtension)
    With wkbSource
        .Sheets("Connectivity Path").Range("B8:P" & Range("B" & Rows.Count).End(xlUp).Row).Copy wkbDest.Sheets("BAM Master Consolidated").Cells(Rows.Count, "AV").End(xlUp).Offset(1, 0)
        .Sheets("Overdraft Limits").Range("B8:H" & Range("B" & Rows.Count).End(xlUp).Row).Copy wkbDest.Sheets("BAM Master Consolidated").Cells(Rows.Count, "BK").End(xlUp).Offset(1, 0)
        .Sheets("General And Bank Relationship").Range("B8:AU" & Range("B" & Rows.Count).End(xlUp).Row).Copy wkbDest.Sheets("BAM Master Consolidated").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
        .Close savechanges:=False
    End With
    strExtension = Dir
Loop
Application.ScreenUpdating = True

结束子

任何有关解决方法的帮助将不胜感激。另外,如果我对问题的诊断是错误的(很可能是),那么欢迎采用其他任何解决方法。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果要粘贴值,则不应使用destination参数,而应粘贴特殊内容:

Sub CopyRange()
    Application.ScreenUpdating = False
    Dim wkbDest As Workbook
    Dim wkbSource As Workbook
    Set wkbDest = ThisWorkbook
    Const strPath As String = "C:\Users\lci\Desktop\Project Work\Info Gathering\Master Data File\"
    ChDir strPath
    strExtension = Dir("*.xlsm*")
    Do While strExtension <> ""
        Set wkbSource = Workbooks.Open(strPath & strExtension)
        With wkbSource
            .Sheets("Connectivity Path").Range("B8:P" & Range("B" & Rows.Count).End(xlUp).Row).Copy 
            wkbDest.Sheets("BAM Master Consolidated").Cells(Rows.Count, "AV").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
            .Sheets("Overdraft Limits").Range("B8:H" & Range("B" & Rows.Count).End(xlUp).Row).Copy 
            wkbDest.Sheets("BAM Master Consolidated").Cells(Rows.Count, "BK").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
            .Sheets("General And Bank Relationship").Range("B8:AU" & Range("B" & Rows.Count).End(xlUp).Row).Copy 
            wkbDest.Sheets("BAM Master Consolidated").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
            .Close savechanges:=False
        End With
        strExtension = Dir
    Loop
    Application.ScreenUpdating = True
End Sub