Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
Vba 将图纸的动态范围复制到单个图纸_Vba_Excel - Fatal编程技术网

Vba 将图纸的动态范围复制到单个图纸

Vba 将图纸的动态范围复制到单个图纸,vba,excel,Vba,Excel,我正在尝试将不同图纸上的几个不同零件列表合并到一个主列表中 问题在于,例如,有时主框架零件或装饰件零件会有多张不同部分的板材(例如,主框架、主框架(2)、装饰件、装饰件(2)、装饰件(3)等) 因此,我不能像以前那样硬编码值,因为每个工作簿的工作表数量不同。我从中复制的第一张工作表和我从中复制的最后一张工作表是相同的,但根据工作簿的不同,它们可能是之前的工作表,也可能是之后的工作表,我不想包括这些工作表,因此我不能从最后一张工作表中倒数,也不能总是从第一张工作表开始 我不是VBA专家,它似乎足够

我正在尝试将不同图纸上的几个不同零件列表合并到一个主列表中

问题在于,例如,有时主框架零件或装饰件零件会有多张不同部分的板材(例如,主框架、主框架(2)、装饰件、装饰件(2)、装饰件(3)等)

因此,我不能像以前那样硬编码值,因为每个工作簿的工作表数量不同。我从中复制的第一张工作表和我从中复制的最后一张工作表是相同的,但根据工作簿的不同,它们可能是之前的工作表,也可能是之后的工作表,我不想包括这些工作表,因此我不能从最后一张工作表中倒数,也不能总是从第一张工作表开始

我不是VBA专家,它似乎足够强大,足以处理我的问题,我只是不知道如何具体地去做

我已经将逻辑附加到我的代码中,我目前使用它将所有工作表连接到一个工作表中,但它的动态性不足以适用于每种情况。(也为糟糕的风格感到抱歉)

我们将非常感谢您的任何帮助或正确方向上的一点帮助

    On Error Resume Next
Sheets(1).Select
Worksheets.Add
Sheets(1).Name = "Master"
Sheets(2).Activate
' Add copy logo once here.

Range("A6").EntireRow.Select
Selection.Copy Destination:=Sheets(1).Range("A1").End(xlUp)(1)
For j = 2 To 13 ' Range of sheets
Sheets(j).Activate
Range("A6").Select
Selection.CurrentRegion.Select

' Adjust here to eliminate header but include 2 rows below it
Selection.Offset(5, 0).Resize(Selection.Rows.Count - 5).Select
Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(6)
Next

Sheets(1).Activate
Range("A1:O1").Select
Range("O1").Activate
Selection.Delete Shift:=xlUp
Range("O10").Select

Range("A1:O4").Select
Range("O4").Activate
Selection.Delete Shift:=xlUp

试试这个。这将在工作表中循环,直到看到第一张工作表,然后开始在所有工作表中循环,直到完成最后一张工作表,然后停止运行。只要把床单的名字放进去就行了

Dim ws_count As Integer
Dim j as integer
Dim k as integer
ws_count = ActiveWorkbook.Worksheets.Count

For k = 1 to ws_count
    If Sheets(k).Name = "FirstSheet" Then
        For j = k to ws_count
            Sheets(j).Activate
            Range("A6").Select
            Selection.CurrentRegion.Select

            ' Adjust here to eliminate header but include 2 rows below it
            Selection.Offset(5, 0).Resize(Selection.Rows.Count - 5).Select
            Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(6)
            If Sheets(j).Name = "LastSheet" Then
                Exit For 
            End If
        Next j
    Exit For
    End If
Next k

那么,这是您在不同的工作簿中使用的代码,但它们的工作表数量不同吗?是的。它一次只能应用于一个工作簿,以合并该工作簿中的工作表,但我希望它能够在不同的工作簿上工作,并具有上面提到的可能的细微变化。因此,您希望它能够运行12个工作表以上/少于12个工作表,还是希望它跳过某些工作表?是的。大于12,可能小于12。我希望它能够在开始或结束时跳过工作表。它将复制的第一张图纸将始终与它将复制的最后一张图纸同名。但是有一种可能,在它之前有不同的命名表,在它之后几乎总是有我不想包含的表。我用你的新代码块编辑了我的文章,我想我已经正确地编辑了它,然而,我现在有点被抛弃了,因为全新的代码修改,所以请原谅任何错误的编译错误…看起来它对我来说是可行的,但我得到了一个错误。编译错误:对于已在使用的控制变量。你不能在VBA中嵌套循环吗?哦,你可以,我不小心用了两次k。切换到j,现在试试我的道歉,我想我复制了错误的代码块。我刚刚编辑了这篇文章,以包含选择表格并将其粘贴到新工作表的精确块。您的解决方案的形式是否仍然适用于该代码?再一次,对不起!!非常感谢您的回复。我最初给出的代码贯穿了每一页,并添加了两列。现在发布的部分会将每张工作表的列表复制到主列表中。那么工作表(1)是否仍将保留主列表,还是现在也需要更改?