Vba 选择类范围的方法失败错误1004
大家干杯!下面的代码用于将数据从一个工作簿传输到另一个工作簿。我设定了道路和一切。代码完成了一半的工作。然而,它告诉我,班级范围选择不当,我不明白这是怎么回事 在代码中,我将注释保留在获取错误的行上。此外,如何确保每次将数据从wb2传输到wb1时,不会覆盖已存储在wb1中的数据 提前谢谢 注:Vba 选择类范围的方法失败错误1004,vba,excel,Vba,Excel,大家干杯!下面的代码用于将数据从一个工作簿传输到另一个工作簿。我设定了道路和一切。代码完成了一半的工作。然而,它告诉我,班级范围选择不当,我不明白这是怎么回事 在代码中,我将注释保留在获取错误的行上。此外,如何确保每次将数据从wb2传输到wb1时,不会覆盖已存储在wb1中的数据 提前谢谢 注: wb1是一个工作簿,它有传递数据的按钮,需要粘贴 wb2:是需要打开并从中复制数据的工作簿 Private Sub Transferdata_Click() Dim intChoice As Int
- wb1是一个工作簿,它有传递数据的按钮,需要粘贴
- wb2:是需要打开并从中复制数据的工作簿
Private Sub Transferdata_Click() Dim intChoice As Integer Dim strPath As String Dim filname As String Dim wb1 As Workbook ' the workbook where I paste the data Dim wb2 As Workbook 'the workbook I copy the data Set wb1 = ActiveWorkbook MsgBox ("Please open the workbook you need to transfer the data from") Call Application.FileDialog(msoFileDialogOpen).Filters.Clear intChoice = Application.FileDialog(msoFileDialogOpen).Show If intChoice <> 0 Then strPath = Application.FileDialog( _ msoFileDialogOpen).SelectedItems(1) filname = Split(strPath, "\")(UBound(Split(strPath, "\"))) Application.ScreenUpdating = False Workbooks.Open Filename:=strPath Windows(filname).Activate Set wb2 = ActiveWorkbook wb2.Sheets("File").Range("A3").Select ' I get the error here. don't understand why Range(Selection, Selection.End(xlDown)).Select Selection.Copy wb1.Activate wb1.Sheets("File2").Select Range("A4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ' how can I make sure here that every time when I copy the data from wb2 to wb1 won't overwrite the data that is already in wb1? to paste the data starting from the row that is empty? Application.ScreenUpdating = True End If End Sub
Private Sub Transferdata\u Click() 选择整数 将strPath设置为字符串 将文件名设置为字符串 将wb1设置为工作簿“粘贴数据的工作簿” Dim wb2作为工作簿“我复制数据的工作簿” 设置wb1=ActiveWorkbook MsgBox(“请打开需要从中传输数据的工作簿”) 调用Application.FileDialog(msoFileDialogOpen).Filters.Clear intChoice=Application.FileDialog(msoFileDialogOpen.Show) 如果选择0,那么 strPath=Application.FileDialog(_ msoFileDialogOpen)。选择编辑项(1) filname=Split(strPath,“\”)(UBound(Split(strPath,“\”)) Application.ScreenUpdating=False 工作簿。打开的文件名:=strPath Windows(文件名)。激活 设置wb2=ActiveWorkbook wb2.Sheets(“文件”).Range(“A3”)。选择“我在这里得到错误”。不明白为什么 范围(选择,选择。结束(xlDown))。选择 选择,复制 wb1.激活 wb1.工作表(“文件2”)。选择 范围(“A4”)。选择 Selection.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_ :=False,Transpose:=False'在这里,我如何确保每次将数据从wb2复制到wb1时不会覆盖已经在wb1中的数据?要粘贴从空行开始的数据? Application.ScreenUpdating=True 如果结束 端接头
- 我认为这应该行得通。删除所有的选择和激活,并将工作簿变量分配给两者
Private Sub Transferdata_Click()
Dim intChoice As Long
Dim strPath As String
Dim filname As String
Dim wb1 As Workbook ' the workbook where I paste the data
Dim wb2 As Workbook 'the workbook I copy the data
Set wb1 = ActiveWorkbook
MsgBox ("Please open the workbook you need to transfer the data from")
Call Application.FileDialog(msoFileDialogOpen).Filters.Clear
intChoice = Application.FileDialog(msoFileDialogOpen).Show
If intChoice <> 0 Then
strPath = Application.FileDialog( _
msoFileDialogOpen).SelectedItems(1)
filname = Split(strPath, "\")(UBound(Split(strPath, "\")))
Application.ScreenUpdating = False
Set wb2 = Workbooks.Open(Filename:=strPath)
With wb2.Sheets("File")
.Range("A3", .Range("A3").End(xlDown)).Copy
End With
With wb1.Sheets("File2")
.Range("A" & .Rows.Count).End(xlUp)(2).PasteSpecial Paste:=xlPasteValues
End With
Application.ScreenUpdating = True
End If
End Sub
Private Sub Transferdata\u Click()
我的选择很长
将strPath设置为字符串
将文件名设置为字符串
将wb1设置为工作簿“粘贴数据的工作簿”
Dim wb2作为工作簿“我复制数据的工作簿”
设置wb1=ActiveWorkbook
MsgBox(“请打开需要从中传输数据的工作簿”)
调用Application.FileDialog(msoFileDialogOpen).Filters.Clear
intChoice=Application.FileDialog(msoFileDialogOpen.Show)
如果选择0,那么
strPath=Application.FileDialog(_
msoFileDialogOpen)。选择编辑项(1)
filname=Split(strPath,“\”)(UBound(Split(strPath,“\”))
Application.ScreenUpdating=False
设置wb2=Workbooks.Open(文件名:=strPath)
使用wb2.Sheets(“文件”)
.Range(“A3”),.Range(“A3”).End(xlDown)).Copy
以
带wb1.Sheets(“文件2”)
.Range(“A”和.Rows.Count).End(xlUp)(2).PasteSpecial Paste:=xlPasteValues
以
Application.ScreenUpdating=True
如果结束
端接头
正如Rory在评论中提到的,最好避免使用。在这种情况下选择。我认为调暗范围变量并使用它来复制/粘贴会更容易:
Dim rng As Range
Set rng = wb2.Sheets("File").Range("A3")
wb2.Sheets("File").Range(rng, rng.End(xlDown)).Copy
您可以对粘贴操作执行相同的操作。为避免覆盖数据,首先检查A4单元格中是否存在任何数据。如果有数据,您可以使用xlDown获取最后一行数据,然后再通过该行
Dim rng2 As Range
If wb1.Sheets("File2").Range("A4") = "" Then
Set rng2 = wb1.Sheets("File2").Range("A4")
Else
Set rng2 = wb1.Sheets("File2").Range("A4").End(xlDown).Offset(1,0)
End If
rng2.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
除非工作表和工作簿处于活动状态,否则无法选择范围。(你也应该避免选择,因为这通常是不必要的)谢谢你的帮助。我在wb1.Sheets(“File2”)的
行中收到以下错误消息对象变量或未设置块变量
运行宏时粘贴到的工作簿是否处于活动状态?使用Activeworkbook
有点冒险。如果代码在该文件中,您可以使用此工作簿
。它表示它处于活动状态。我试着换成这个工作簿。相同的错误..您可以改为尝试文件名吗Set wb1=Workbooks(“name”)
@SRJ,很抱歉延迟了重播。代码现在可以工作了。这是我的错,因为我没有注意那张纸的名字。这真是太棒了。非常感谢