Excel VBA-选择要从中复制并粘贴到下一个空行的现有工作簿中的工作簿
我是VBA新手,一直在使用该网站拼凑解决方案 我需要编写一个宏,提示用户打开一个文件(wb2),从该工作簿(wb2)中的Sheet1复制一行数据,然后将其粘贴到Sheet1上原始工作簿(wb)中的下一个空行。直到我尝试在下一个空行中添加用于粘贴的代码时,我才开始工作-我现在收到以下错误消息,“运行时错误'438':对象不支持此属性或方法” 任何帮助都将不胜感激Excel VBA-选择要从中复制并粘贴到下一个空行的现有工作簿中的工作簿,vba,excel,Vba,Excel,我是VBA新手,一直在使用该网站拼凑解决方案 我需要编写一个宏,提示用户打开一个文件(wb2),从该工作簿(wb2)中的Sheet1复制一行数据,然后将其粘贴到Sheet1上原始工作簿(wb)中的下一个空行。直到我尝试在下一个空行中添加用于粘贴的代码时,我才开始工作-我现在收到以下错误消息,“运行时错误'438':对象不支持此属性或方法” 任何帮助都将不胜感激 Sub test() Dim wb As Workbook, wb2 As Workbook Dim ws As Worksheet D
Sub test()
Dim wb As Workbook, wb2 As Workbook
Dim ws As Worksheet
Dim vFile As Variant
'Set source workbook
Set wb = ActiveWorkbook
'Open the target workbook
vFile = Application.GetOpenFilename("Excel-files,*.xlsx", _
1, "Select One File To Open", , False)
'if the user didn't select a file, exit sub
If TypeName(vFile) = "Boolean" Then Exit Sub
Workbooks.Open vFile
'Set selectedworkbook
Set wb2 = ActiveWorkbook
wb2.Range("A3:E3").Select
Selection.Copy
wb.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Application.ScreenUpdating = True
wb2.Close
'Set targetworkbook
Set wb = ActiveWorkbook
End Sub
你试过这个吗
Selection.Copy
wb.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial xlPasteValues
你试过这个吗
Selection.Copy
wb.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial xlPasteValues
我重新编写了代码并使其正常工作。这可能不是最干净的方法,但考虑到我的时间安排和缺乏VBA知识,它将不得不这样做 非常感谢工程师们的帮助 说明:此代码应放在要将其他工作簿中的内容粘贴到的工作表中。当它运行时,会提示您打开一个工作簿进行复制(“输出”工作表),然后选择您在代码(JR:R3)中指定的单元格,从初始工作簿的下一个空行开始粘贴它们(在“主”工作表的C列中找到最后一行),然后关闭并保存您刚刚复制的工作簿
Sub CommandButton1_Click()
'Last cell in column
Dim WS As Worksheet
Dim LastCell As Range
Dim LastCellRowNumber As Long
Set WS = Worksheets("Master")
With WS
Set LastCell = .Cells(.Rows.Count, "C").End(xlUp)
LastCellRowNumber = LastCell.Row + 1
End With
Dim wb As Workbook, wb2 As Workbook
Dim vFile As Variant
'Set source workbook
Set wb = ActiveWorkbook
'Open the target workbook
vFile = Application.GetOpenFilename("Excel-files,*.xlsx", _
1, "Select One File To Open", , False)
'if the user didn't select a file, exit sub
If TypeName(vFile) = "Boolean" Then Exit Sub
Workbooks.Open vFile
'Set selectedworkbook
Set wb2 = ActiveWorkbook
'Select cells to copy
wb2.Worksheets("Output").Range("J3:R3").Select
Selection.Copy
'Go back to original workbook you want to paste into
wb.Activate
'Paste starting at the last empty row
wb.Worksheets("Master").Range("C" & LastCellRowNumber).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Application.ScreenUpdating = True
'Close and save the workbook you copied from
wb2.Save
wb2.Close
End Sub
我重新编写了代码并使其正常工作。这可能不是最干净的方法,但考虑到我的时间安排和缺乏VBA知识,它将不得不这样做 非常感谢工程师们的帮助 说明:此代码应放在要将其他工作簿中的内容粘贴到的工作表中。当它运行时,会提示您打开一个工作簿进行复制(“输出”工作表),然后选择您在代码(JR:R3)中指定的单元格,从初始工作簿的下一个空行开始粘贴它们(在“主”工作表的C列中找到最后一行),然后关闭并保存您刚刚复制的工作簿
Sub CommandButton1_Click()
'Last cell in column
Dim WS As Worksheet
Dim LastCell As Range
Dim LastCellRowNumber As Long
Set WS = Worksheets("Master")
With WS
Set LastCell = .Cells(.Rows.Count, "C").End(xlUp)
LastCellRowNumber = LastCell.Row + 1
End With
Dim wb As Workbook, wb2 As Workbook
Dim vFile As Variant
'Set source workbook
Set wb = ActiveWorkbook
'Open the target workbook
vFile = Application.GetOpenFilename("Excel-files,*.xlsx", _
1, "Select One File To Open", , False)
'if the user didn't select a file, exit sub
If TypeName(vFile) = "Boolean" Then Exit Sub
Workbooks.Open vFile
'Set selectedworkbook
Set wb2 = ActiveWorkbook
'Select cells to copy
wb2.Worksheets("Output").Range("J3:R3").Select
Selection.Copy
'Go back to original workbook you want to paste into
wb.Activate
'Paste starting at the last empty row
wb.Worksheets("Master").Range("C" & LastCellRowNumber).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Application.ScreenUpdating = True
'Close and save the workbook you copied from
wb2.Save
wb2.Close
End Sub
只需简单介绍一下这个主题: 而不是
wb2.Worksheets("Output").Range("J3:R3").Select
Selection.Copy
试一试
也
而不是
wb.Worksheets("Master").Range("C" & LastCellRowNumber).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
试一试
通常情况下,
Select
会产生无法解释的错误。特别是在使用多个工作簿时,请尽量远离Select
。这段代码几乎直接来自我的工作代码。如果这不能解决问题,请告诉我们。请简要说明一下这个问题:
而不是
wb2.Worksheets("Output").Range("J3:R3").Select
Selection.Copy
试一试
也
而不是
wb.Worksheets("Master").Range("C" & LastCellRowNumber).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
试一试
通常情况下,
Select
会产生无法解释的错误。尤其是在使用多个工作簿时,请尽量远离选择。这段代码几乎直接来自我的工作代码。如果这不能解决问题,请告诉我们。感谢您的快速响应。我刚刚尝试了您的更新,但仍然收到相同的错误,“运行时错误'438':对象不支持此属性或方法”。请每次尝试链1以查看错误发生的位置,因为wb不支持。Cells
,因为这是一个工作表方法。好主意。我按照您的建议进行了检查,当它出现在“.Cells”部分时,确实会出现错误。因此,只需更改引用,它应该很好,例如wb.Worksheets(“WORKSHEETNAME”)。Cells
再次感谢您的帮助。我进行了更新,还删除了wb2。关闭和设置wb=activeworkbook
,我不再收到错误消息,但我认为它也不会将任何内容粘贴到我的初始工作表(wb)中。如果您对此有任何想法,我们将不胜感激。如果需要,我也可以重新发布代码。谢谢您的快速回复。我刚刚尝试了您的更新,但仍然收到相同的错误,“运行时错误'438':对象不支持此属性或方法”。请每次尝试链1以查看错误发生的位置,因为wb不支持。Cells
,因为这是一个工作表方法。好主意。我按照您的建议进行了检查,当它出现在“.Cells”部分时,确实会出现错误。因此,只需更改引用,它应该很好,例如wb.Worksheets(“WORKSHEETNAME”)。Cells
再次感谢您的帮助。我进行了更新,还删除了wb2。关闭和设置wb=activeworkbook
,我不再收到错误消息,但我认为它也不会将任何内容粘贴到我的初始工作表(wb)中。如果您对此有任何想法,我们将不胜感激。如果需要,我也可以重新发布代码。