Vba 将数据从一个excel工作簿复制到另一个工作簿,同时保留格式

Vba 将数据从一个excel工作簿复制到另一个工作簿,同时保留格式,vba,excel,copy,copy-paste,Vba,Excel,Copy,Copy Paste,我是excel VBA新手。我已经编写了VBA代码来选择任何Excel文件并将该文件的路径复制到单元格A1。使用该路径,我试图复制源文件Sheet7的内容,同时保留单元格格式,即粗体、边框、颜色等 我的第一个错误出现在文件路径中。当前单元格A1值=C:\Users\Personal\Documents\Excel files\Dummy Data-Copy.xlsx。 当我尝试读取A1单元格的值时,VBA向我抛出一个错误“抱歉,我们找不到。它是否可能已被移动、重命名或删除?”并自动清除A1单元格

我是excel VBA新手。我已经编写了VBA代码来选择任何Excel文件并将该文件的路径复制到单元格A1。使用该路径,我试图复制源文件Sheet7的内容,同时保留单元格格式,即粗体、边框、颜色等

我的第一个错误出现在文件路径中。当前单元格A1值=C:\Users\Personal\Documents\Excel files\Dummy Data-Copy.xlsx。 当我尝试读取A1单元格的值时,VBA向我抛出一个错误“抱歉,我们找不到。它是否可能已被移动、重命名或删除?”并自动清除A1单元格的值。但是,当我在VBA脚本中直接给出相同的路径时,它就工作了!有人能告诉我怎么修这个吗

我的第二个疑问是复制单元格格式。当我使用wksht.paste将复制的内容粘贴到Sheet2时,它只粘贴所有单元格值而不设置格式。但当我尝试使用Paste时,会出现以下错误-“应用程序定义的错误或对象定义的错误”。有人能帮我纠正一下吗

    Sub Button1_Click()
        ' define variables
        Dim lastRow As Long
        Dim myApp As Excel.Application
        Dim wbk As Workbook
        Dim wkSht As Object
        Dim filePath As Variant

    'on error statement
    On Error GoTo errHandler:

        ' Select file path
        Set myApp = CreateObject("Excel.application")
        Sheet2.Range("A1").Value = filePath
        Set wbk = myApp.Workbooks.Open(filePath)
        'Set wbk = myApp.Workbooks.Open("C:\Users\Personal\Documents\Excel files\Dummy-Data - Copy.xlsx")

    ' Copy contents
        Application.ScreenUpdating = False
        lastRow = wbk.Sheets(7).Range("A" & Rows.Count).End(xlUp).Row
        wbk.Sheets(7).Range("A2:Q" & lastRow).Copy
        myApp.DisplayAlerts = False
        wbk.Close
        myApp.Quit

    ' Paste contents
        Set wbk = Nothing
        Set myApp = Nothing
        Set wbk = ActiveWorkbook
        Set wkSht = wbk.Sheets("Sheet2")
        wkSht.Activate
        Range("A2").Select
        wkSht.Paste
        'wkSht.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
                False, Transpose:=False

        Application.ScreenUpdating = True
        Exit Sub

    'error block
errHandler:
            MsgBox "An Error has Occurred " & vbCrLf & "The error number is: " _
            & Err.Number & vbCrLf & Err.Description & vbCrLf & _
            "Please follow instruction sheet"

        End Sub
我的第一个错误出现在文件路径中。当前单元格A1值=C:\Users\Personal\Documents\Excel files\Dummy Data-Copy.xlsx。当我尝试读取A1单元格的值时,VBA向我抛出一个错误“抱歉,我们找不到。它是否可能已被移动、重命名或删除?”并自动清除A1单元格的值

您没有将var的值设置为单元格的值,而是将单元格的值设置为空白var,从而删除单元格的值。它应该是
filePath=Sheet2.Range(“A1”).Value
,(与上面的相反)

当我使用wksht.paste将复制的内容粘贴到Sheet2时,它只粘贴所有单元格值而不设置格式


你不仅仅是在工作簿之间粘贴;您正在不同应用程序实例中打开的工作簿之间粘贴。在跨实例粘贴时,会丢失与格式类似的详细信息。无论如何,单独的Excel.应用程序似乎完全没有必要

Option Explicit

Sub Button1_Click()
    ' define variables
    Dim lastRow As Long
    Dim wbk As Workbook
    Dim filePath As Variant

    'on error statement
    On Error GoTo errHandler:

    ' Select file path
    filePath = Sheet2.Range("A1").Value
    Set wbk = Workbooks.Open(filePath)
    'Set wbk = Workbooks.Open("C:\Users\Personal\Documents\Excel files\Dummy-Data - Copy.xlsx")

' Copy contents & Paste contents
    Application.ScreenUpdating = False

    lastRow = wbk.Sheets(7).Range("A" & Rows.Count).End(xlUp).Row
    wbk.Sheets(7).Range("A2:Q" & lastRow).Copy _
        Destination:=Sheet2.Range("A2")

    'shouldn't have to disable alerts
    'Application.DisplayAlerts = False
    wbk.Close savechanges:=False
    'Application.DisplayAlerts = True
'
    Application.ScreenUpdating = True
    Exit Sub

'error block
errHandler:
    MsgBox "An Error has Occurred " & vbCrLf & "The error number is: " _
        & Err.Number & vbCrLf & Err.Description & vbCrLf & _
        "Please follow instruction sheet"

End Sub

裸工作表的代码名引用在此工作簿中应该是有效的。

是否应该是
filePath=Sheet2.Range(“A1”).Value
?(与上面的相反)您正在将单元格的值设置为空白变量。Ohhh my!谢谢你…我从来没有意识到我写的是相反的。这修正了我的第一个错误。对第二个问题有什么想法吗?在保留所有格式的同时粘贴值?你不仅仅是在工作簿之间粘贴;您正在不同应用程序实例中打开的工作簿之间粘贴。在跨实例粘贴时,会丢失与格式类似的详细信息。无论如何,单独的Excel.应用程序似乎完全没有必要;可能是复制vbscript代码的后遗症。是的,复制和粘贴应该发生在两个不同的工作簿之间,即使没有打开源文件,因为它是由不同的团队处理的。那么,当我们从一个工作簿复制到另一个工作簿时,是否无法保留格式?ActiveWorkbook也是此工作簿(带有代码的工作簿)还是第三个工作簿?您已从我的代码中删除了“粘贴”部分。猜测使用VB脚本无法在工作簿之间保留格式。谢谢你的帮助!我不明白你的意思。我刚刚测试了代码,它带有字体和数字格式以及副本。不知道为什么它不适合我。我使用的是Excel 2016版。正在复制和粘贴数据,但除第一行外,其余列的数据具有与目标字体类型和字体大小相同的格式。未捕获源格式。如果行和列都有动态范围,而不是静态列范围,那么下面的公式将如何更改“wbk.Sheets(7).range”(“A2:Q”&lastRow).Copy\?