【问题标题】:Pasting Values from Source Worksheet with Formulas使用公式从源工作表中粘贴值
【发布时间】:2018-07-26 16:40:00
【问题描述】:

我是 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

结束子

任何有关如何解决的帮助将不胜感激。或者,如果我对问题的诊断是错误的(而且很可能是错误的),任何其他解决方法都会非常受欢迎。

提前致谢!

【问题讨论】:

  • 你有什么版本的 Excel?

标签: vba excel excel-formula


【解决方案1】:

如果要粘贴值,则不应使用目标参数,而应使用特殊粘贴:

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

【讨论】:

  • 太棒了,谢谢。效果很好。现在唯一的问题是,当它复制每张纸询问我是否要在剪贴板上保存大量信息后,我会收到一条警告,我需要单击它。我可以解决这个问题,但是如果有任何方法可以加快速度/每次从源文件复制信息后都不必单击“否”。
  • @ChrisL,检查this
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多