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 对多个命名图纸使用Select Case with InStr_Excel_Vba - Fatal编程技术网

Excel 对多个命名图纸使用Select Case with InStr

Excel 对多个命名图纸使用Select Case with InStr,excel,vba,Excel,Vba,我在这里的第一篇帖子。。。。。 我能够从Siddharth Rout搜索并找到这段代码,这是我想做的事情的基础…将多张数据表附加到一张数据表中。但是我很难修改它以适应我的情况。我下面的内容目前不起作用 问题1)我如何将Select Case InStr与多张纸(3)一起使用,这些纸没有像原始海报中的“Legende”这样的通用名称 问题2)在我的情况下,每张工作表将有不同的列,我需要复制到附页的表格中,工作表1将有x行,我需要B、D、M、AR等列,工作表2将有XXXX行,我需要复制15张工作表的

我在这里的第一篇帖子。。。。。 我能够从Siddharth Rout搜索并找到这段代码,这是我想做的事情的基础…将多张数据表附加到一张数据表中。但是我很难修改它以适应我的情况。我下面的内容目前不起作用

问题1)我如何将Select Case InStr与多张纸(3)一起使用,这些纸没有像原始海报中的“Legende”这样的通用名称

问题2)在我的情况下,每张工作表将有不同的列,我需要复制到附页的表格中,工作表1将有x行,我需要B、D、M、AR等列,工作表2将有XXXX行,我需要复制15张工作表的B、D、N、AS、AT等列

此原始代码归功于Siddharth Rout:

Sub SummurizeSheets()
Dim wsOutput As Worksheet
Dim ws As Worksheet
Dim wsOLr As Long, wsLr As Long

Application.ScreenUpdating = False

'~~> Set this to the sheet where the output will be dumped
Set wsOutput = Sheets("Tab_Appended")

With wsOutput
    '~~> Get Last Row in "Tab_Appended" in Col A/M and Add 1 to it
    wsOLr = .Range("A:M").Find(What:="*", After:=.Range("A1"), _
            Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, _
            SearchDirection:=xlPrevious, MatchCase:=False).Row + 1

    '~~> Loop through sheet
    For Each ws In Worksheets
        '~~> Check if the sheet name has Legende
        'Select Case InStr(1, ws.Name, "Legende", vbTextCompare)
        Select Case InStr(1, ws.Name, "Test2", vbTextCompare) + _
        InStr(1, strData, "Test", vbTextCompare) + _
        InStr(1, strData, "Sheet2", vbTextCompare)

        '~~> If not then
        Case 0
            With ws
                '~~> Get Last Row in the sheet
                wsLr = .Range("A:M").Find(What:="*", After:=.Range("A1"), _
                       Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, _
                       SearchDirection:=xlPrevious, MatchCase:=False).Row

                '~~> Copy the relevant range
                .Range("A2:M" & wsLr).Copy wsOutput.Range("A" & wsOLr)

                '~~> Get Last Row AGAIN in "Tab_Appended" in Col A/B and Add 1 to it
                wsOLr = wsOutput.Range("A:M").Find(What:="*", After:=wsOutput.Range("A1"), _
                        Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious, MatchCase:=False).Row + 1
            End With
        End Select
    Next
End With

Application.ScreenUpdating = True
End Sub
谢谢,
Don

问题1-选择图纸的逻辑是什么?问题2-可能存储与每张工作表相关的列数组。编辑我的评论。。。问题1:共有18张工作表,前3张(Test2,Test,Sheet2)是我不想复制到附加页选项卡的工作表。我只需要其他15张表格中的不同数据列。Siddharth能够用他的Select Case InStr代码避免这种情况,因为在这种情况下,所有3张表的选项卡名称中都有文本“Legende”…在我的情况下并非如此。问题2:谢谢你的建议……我会寻找解决方案。如果我没有正确理解你的第一个问题,请原谅。我想看看要包括的表格是否有逻辑性。您可以循环浏览这些表,并按名称将它们排除在外?在您的代码中,什么是标准数据?如果将其替换为
ws.name
,循环可能会工作。谢谢SJR。您的第二组眼睛发现了先前的复制粘贴错误,strData应该是ws.name。宏一旦更改,就会被处理,但会产生一些意外的结果。仅排除一个图纸名称时,宏循环遍历所有剩余图纸,并复制每个图纸的A:M范围一次。排除所有3个工作表名称后,它会将每个剩余工作表的A:M范围复制两次。您确定没有忘记清除第一次运行的结果吗?我看不出为什么它应该做两次。问题1-选择工作表的逻辑是什么?问题2-可能存储与每张工作表相关的列数组。编辑我的评论。。。问题1:共有18张工作表,前3张(Test2,Test,Sheet2)是我不想复制到附加页选项卡的工作表。我只需要其他15张表格中的不同数据列。Siddharth能够用他的Select Case InStr代码避免这种情况,因为在这种情况下,所有3张表的选项卡名称中都有文本“Legende”…在我的情况下并非如此。问题2:谢谢你的建议……我会寻找解决方案。如果我没有正确理解你的第一个问题,请原谅。我想看看要包括的表格是否有逻辑性。您可以循环浏览这些表,并按名称将它们排除在外?在您的代码中,什么是标准数据?如果将其替换为
ws.name
,循环可能会工作。谢谢SJR。您的第二组眼睛发现了先前的复制粘贴错误,strData应该是ws.name。宏一旦更改,就会被处理,但会产生一些意外的结果。仅排除一个图纸名称时,宏循环遍历所有剩余图纸,并复制每个图纸的A:M范围一次。排除所有3个工作表名称后,它会将每个剩余工作表的A:M范围复制两次。您确定没有忘记清除第一次运行的结果吗?我看不出它为什么要做两次。gfgf