Перебирайте каждый лист, чтобы найти имя, содержащее значение, сделайте что-нибудь, снова попробуйте найти новое значение - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь перебрать листы в рабочей книге, выбрать листы с одинаковыми именами, сохранить их в PDF, затем снова зациклить, но изменить имя, которое он ищет на листах. Листы будут иметь общее число, состоящее из 4 цифр, например 0001 или 0243, и эти четыре цифры важны, поэтому листы 0030 и 0003 не объединяются.

Я получил код для работы только с одним именем, чтобы найти его (ниже), но не могу понять, как сделать так, чтобы он повторял несколько имен. Попытался сделать имя целым и добавить 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

Если бы он мог перебирать каждую цифру от 0001 до 0300, это было бы идеально, поэтому мне не нужно редактировать код каждый раз, когда я запускаю его, чтобы добавить новые имена листов. Однако, если массив будет работать лучше, я могу создать длинный массив для чисел, которые, как я знаю, будут присутствовать в файле, и добавлять новые каждый месяц по мере необходимости.

Ответы [ 2 ]

1 голос
/ 29 мая 2019

Вы можете использовать функцию для получения чисел из названия вкладки. Похоже, вы хотите только вкладки, которые включают от 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
0 голосов
/ 29 мая 2019

Я бы использовал код, подобный приведенному ниже:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...