Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用公式粘贴源工作表中的值_Vba_Excel_Excel Formula - Fatal编程技术网

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

Vba 使用公式粘贴源工作表中的值,vba,excel,excel-formula,Vba,Excel,Excel Formula,我是VBA新手,正在尝试开发一个简单的宏,可以自动从定义的工作表和范围(总是相同的列,不同的行)中提取某些数据从存储在单个文件夹中的多个不同工作簿中选择一个,并通过将信息粘贴到预定义的列中(所有行都位于另一行之下),将它们合并到一个主控表中。通过这个网站的帮助,我能够开发下面的代码,这正是我所需要的。但是,我遇到了一些问题,因为源信息有许多公式,当移到主工作簿时,返回的是“00000000”,而不是正确的值。我认为问题是因为我的宏试图复制并粘贴基础公式(如果我将源信息更改为值,则效果很好),而不

我是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
Sub CopyRange()
Application.ScreenUpdating=False
将wkbDest设置为工作簿
将wkbSource设置为工作簿
设置wkbDest=thishworkbook
Const strPath As String=“C:\Users\lci\Desktop\Project Work\Info collection\Master Data File\”
ChDir strPath
strExtension=Dir(“*.xlsm*”)
当strExtension“”时执行此操作
设置wkbSource=Workbooks.Open(strPath&strExtension)
使用wkbSource
.Sheets(“连接路径”).Range(“B8:P”和Range(“B”和Rows.Count).End(xlUp).Row).复制wkbDest.Sheets(“BAM主合并”).Cells(Rows.Count,“AV”).End(xlUp).偏移量(1,0)
.Sheets(“透支限额”).Range(“B8:H”和Range(“B”和Rows.Count)。End(xlUp)。Row)。Copy WKBTest.Sheets(“BAM主合并”)。Cells(Rows.Count,“BK”)。End(xlUp)。Offset(1,0)
.Sheets(“常规和银行关系”).Range(“B8:AU”和Range(“B”和Rows.Count).End(xlUp).Row).复制wkbDest.Sheets(“BAM主合并”).单元格(Rows.Count,“B”).End(xlUp).偏移量(1,0)
.Close savechanges:=False
以
strExtension=Dir
环
Application.ScreenUpdating=True
端接头

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


提前谢谢

如果要粘贴值,不应使用destination参数,而应使用Paste special:

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
Sub CopyRange()
Application.ScreenUpdating=False
将wkbDest设置为工作簿
将wkbSource设置为工作簿
设置wkbDest=thishworkbook
Const strPath As String=“C:\Users\lci\Desktop\Project Work\Info collection\Master Data File\”
ChDir strPath
strExtension=Dir(“*.xlsm*”)
当strExtension“”时执行此操作
设置wkbSource=Workbooks.Open(strPath&strExtension)
使用wkbSource
.Sheets(“连接路径”).Range(“B8:P”和Range(“B”和Rows.Count)。End(xlUp).Row)。复制
WKBTest.Sheets(“BAM主合并”)。单元格(Rows.Count,“AV”)。结束(xlUp)。偏移量(1,0)。粘贴特殊粘贴:=xlPasteValue
.Sheets(“透支限额”).Range(“B8:H”和Range(“B”和Rows.Count)。End(xlUp)。Row)。复制
WKBTest.Sheets(“BAM主合并”)。单元格(Rows.Count,“BK”)。结束(xlUp)。偏移量(1,0)。粘贴特殊粘贴:=xlPasteValue
.Sheets(“一般和银行关系”).Range(“B8:AU”和Range(“B”和Rows.Count)。End(xlUp)。Row)。复制
WKBTest.Sheets(“BAM主合并”)。单元格(Rows.Count,“B”)。结束(xlUp)。偏移量(1,0)。粘贴特殊粘贴:=xlPasteValue
.Close savechanges:=False
以
strExtension=Dir
环
Application.ScreenUpdating=True
端接头

您有什么版本的Excel?太棒了,谢谢。效果很好。现在唯一的问题是,我得到一个警告,我需要点击后,它复制了每一张纸,问我是否要保存在剪贴板上的大量信息。我可以处理这个问题,但如果有什么方法可以加快速度/不必在每次从源文件复制信息后单击“否”。@ChrisL,请检查