遍历每张纸以查找包含值的名称,执行某些操作,再次遍历以查找新值

时间:2019-05-29 14:06:59

标签: excel vba foreach

我试图遍历工作簿中的工作表,选择名称相同的工作表,将它们保存为PDF,然后再次循环,但更改其在工作表中查找的名称。工作表的共同数字是00010243之类的4位数字,并且这四个数字很重要,因此工作表00300003不会合并在一起。

我已经获得了仅在一个名称上查找(以下)的代码,但无法弄清楚如何使它遍历更多名称。尝试使名称成为整数并在每次循环后将其添加1,非常简短地尝试使其遍历数组值,但这对我尝试的方式无效。

For Each sh In ActiveWorkbook.Worksheets

    If sh.Name Like "*0001*" Then

        Worksheets(sh.Name).Select (False)
        ActiveSheet.ExportAsFixedFormat _
            ''' pdf format and save location'''

    End If

Next sh

如果它可以在从00010300的每个数字之间循环,那将是理想的选择,那么我每次运行它以添加新的工作表名称时都不需要编辑代码。但是,如果数组工作得最好,我可以为文件中存在的数字制作一个长数组,并根据需要每月添加新的数字。

2 个答案:

答案 0 :(得分:1)

您可以使用函数从选项卡名称中获取数字。看起来您只希望包含100到300的标签。如何尝试:

For Each sh In ActiveWorkbook.Worksheets
    vNumName = NumOnly(sh.Name)
    If vNumName >= 100 And vNumName <= 300 Then
        Worksheets(sh.Name).Select (False)
        ActiveSheet.ExportAsFixedFormat _
            ''' pdf format and save location'''
    End If
Next sh

功能:

Function NumOnly(vName As String) As Integer
    vOut = ""
    For i = 1 To Len(vName)
        If Mid(vName, i, 1) >= "0" And Mid(vName, i, 1) <= "9" Then vOut = vOut & Mid(vName, i, 1)
    Next
    If Len(vOut) >= 4 Then
        NumOnly = vOut
    Else
        NumOnly = 0
    End If
End Function

答案 1 :(得分:0)

我将使用类似于以下代码:

Dim s As Worksheet, t As String
Dim i As Long, K As Long
K = Sheets.Count

For i = 1 to i = K
    t = Sheets(i).Name

    Sheets(i).activate

    ' Do your activities within this loop
Next i

相关问题