Vba 将数据从一个excel工作簿复制到另一个工作簿,同时保留格式
我是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时,会出现以下错误-“应用程序定义的错误或对象定义的错误”。有人能帮我纠正一下吗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单元格
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\?