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
Excel I';我想从已加载的工作簿中复制并粘贴现有工作表上的特定数据_Excel_Vba - Fatal编程技术网

Excel I';我想从已加载的工作簿中复制并粘贴现有工作表上的特定数据

Excel I';我想从已加载的工作簿中复制并粘贴现有工作表上的特定数据,excel,vba,Excel,Vba,我想从加载的工作簿中复制并粘贴现有工作表上的特定数据 代码正在运行,直到到达下一行。。 (请在下面找到完整代码) 我想这是有问题的 工作表(“WMS”)(WMS工作表是现有工作表)处于with循环中,但没有解决此问题的线索 你能告诉我该怎么做吗? 谢谢 Private Sub btn合并单击() 将WB设置为工作簿 将WS作为工作表进行尺寸标注:将拖曳作为工作表进行尺寸标注 变暗rng As范围 尺寸i等长:i=0:尺寸j等长 Dim endCol同长:Dim endRow同长 作为字符串的Di

我想从加载的工作簿中复制并粘贴现有工作表上的特定数据

代码正在运行,直到到达下一行。。 (请在下面找到完整代码)

我想这是有问题的 工作表(“WMS”)(WMS工作表是现有工作表)处于with循环中,但没有解决此问题的线索

你能告诉我该怎么做吗? 谢谢

Private Sub btn合并单击()
将WB设置为工作簿
将WS作为工作表进行尺寸标注:将拖曳作为工作表进行尺寸标注
变暗rng As范围
尺寸i等长:i=0:尺寸j等长
Dim endCol同长:Dim endRow同长
作为字符串的Dim STRW
Application.ScreenUpdating=False
Application.DisplayAlerts=False
如果Me.lstWB.ListCount=0,则
MsgBox“未选择任何文件”
出口接头
如果结束
设置拖航=ActiveSheet
j=拖航单元格(拖航行数,1).结束(xlUp).行
对于Me.lstWB.ListCount-1,i=0
Set WB=Application.Workbooks.Open(Me.lstWB.List(i))
对于WB.工作表中的每个WS
与WS
endCol=.Cells(1,.Columns.Count).End(xlToLeft).Column
endRow=.Cells(.Rows.Count,1).End(xlUp).Row
设置rng=.Range(.Cells(2,1),.Cells(2,endRow))
rng.复制工作表(“WMS”).单元格(j,39)
j=j+rng.Rows.Count
以
下一个
WB.关闭
下一个
MsgBox“完成”
卸下我
Application.ScreenUpdating=True
Application.DisplayAlerts=True
端接头
更改

Set rng = .Range(.Cells(2, 1), .Cells(2, endRow))

使用变量数组更有效。
.rows.count
rows.count
相同。因为所有图纸的行数相同

Private Sub btnMerge_Click()
 
Dim WB As Workbook
Dim WS As Worksheet: Dim toWS As Worksheet

Dim rng As Range
Dim i As Long: i = 0: Dim j As Long
Dim endCol As Long: Dim endRow As Long
Dim strWS As String
Dim Target As Range, vDB As Variant


Application.ScreenUpdating = False
Application.DisplayAlerts = False
 
If Me.lstWB.ListCount = 0 Then
    MsgBox "No file have selected"
    Exit Sub
End If
 
Set toWS = ActiveSheet
'j = toWS.Cells(toWS.Rows.Count, 1).End(xlUp).Row
 
For i = 0 To Me.lstWB.ListCount - 1
    Set WB = Application.Workbooks.Open(Me.lstWB.List(i))
    
    For Each WS In WB.Worksheets
    
            With WS
                endCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
                endRow = .Cells(.Rows.Count, 1).End(xlUp).Row
                'Set rng = .Range(.Cells(2, 1), .Cells(2, endRow))
                vDB = .Range(.Cells(2, 1), .Cells(endRow, endCol))

                'rng.Copy Worksheet("WMS").Cells(j, 39)
                Set Target = toWS.Cells(Rows.Count, 39).End(xlUp)(2)
                'j = j + rng.Rows.Count
                Target.Resize(UBound(vDB, 1), UBound(vDB, 2)) = vDB
 
            End With
    Next
    WB.Close
Next
 
MsgBox "Done"
Unload Me
 
Application.ScreenUpdating = True
Application.DisplayAlerts = True
 
End Sub

rng.Copy this workbook.Worksheets(“WMS”).Cells(j,39)
假设目标工作表与代码位于同一工作簿中……而且您正在使用
endRow
作为列索引,而不是在allIt的
工作表中使用
endCol
,而不是
工作表
。不要认为你想要“名为WMS的工作表”。实际上,
工作表
是一个
集合
,在所有工作表中,您需要一个称为WMS的工作表。因此复数为s.@Variatus,谢谢!我几天前才开始使用vb。。我还不习惯,但试着去适应它。我应该从头开始。@TimWilliams谢谢你的评论。我应该告诉你,目的地表在不同的工作手册中。[rng.Copy工作簿(“File_merge.xlsm”).Worksheets(“WMS”).Cells(j,39)]我原以为它可以工作,但又返回了错误。。
Set rng = .Range(.Cells(2, 1), .Cells(endRow, endCol))
Private Sub btnMerge_Click()
 
Dim WB As Workbook
Dim WS As Worksheet: Dim toWS As Worksheet

Dim rng As Range
Dim i As Long: i = 0: Dim j As Long
Dim endCol As Long: Dim endRow As Long
Dim strWS As String
Dim Target As Range, vDB As Variant


Application.ScreenUpdating = False
Application.DisplayAlerts = False
 
If Me.lstWB.ListCount = 0 Then
    MsgBox "No file have selected"
    Exit Sub
End If
 
Set toWS = ActiveSheet
'j = toWS.Cells(toWS.Rows.Count, 1).End(xlUp).Row
 
For i = 0 To Me.lstWB.ListCount - 1
    Set WB = Application.Workbooks.Open(Me.lstWB.List(i))
    
    For Each WS In WB.Worksheets
    
            With WS
                endCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
                endRow = .Cells(.Rows.Count, 1).End(xlUp).Row
                'Set rng = .Range(.Cells(2, 1), .Cells(2, endRow))
                vDB = .Range(.Cells(2, 1), .Cells(endRow, endCol))

                'rng.Copy Worksheet("WMS").Cells(j, 39)
                Set Target = toWS.Cells(Rows.Count, 39).End(xlUp)(2)
                'j = j + rng.Rows.Count
                Target.Resize(UBound(vDB, 1), UBound(vDB, 2)) = vDB
 
            End With
    Next
    WB.Close
Next
 
MsgBox "Done"
Unload Me
 
Application.ScreenUpdating = True
Application.DisplayAlerts = True
 
End Sub