Открывать разные папки и листы с определенным именем шаблона? - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь написать коды VBA, которые позволяют мне выбрать несколько файлов Excel и, основываясь на названиях файлов, должны импортировать данные. Например, если есть два файла Excel с одинаковым префиксом имени, например, имя начинается с N. Он должен открывать и импортировать данные, однако, если префикс имени существует один раз, он должен игнорировать файл. Я пишу следующий код, чтобы перебрать коллекцию рабочих книг и извлечь имя рабочих таблиц, однако при второй итерации он повторяется только один раз, выводится массив ошибок диапазона. Любое предложение или помощь высоко ценится.

      Sub import()
Dim shName1 As Worksheet
Dim shName2 As Worksheet
Dim FileToOpen As Variant
Dim FileName As String
Dim selectedBook As Workbook
Dim selectedBook2 As Workbook
Dim i As Byte  ''
Dim FileCnt As Long

'On Error GoTo Handle:
 ' Pick only excel files to import and allow multipleselection
 FileToOpen = Application.GetOpenFilename(Filefilter:="Excel Files (*.xlsx), *.xlsx", Title:="Select Workbook to Import", MultiSelect:=True)
    If IsArray(FileToOpen) Then
        For FileCnt = LBound(FileToOpen) To UBound(FileToOpen)
            Set selectedBook = Workbooks.Open(FileName:=FileToOpen(FileCnt))
            Set shName1 = selectedBook.Worksheets(FileCnt)
            For i = FileCnt + 1 To UBound(FileToOpen) - 1
                Set shName2 = selectedBook.Worksheets(i)
                If shName1 <> shName2 Then
                    'do samething
                Else:
                    ' do otherthing
                MsgBox shName2.Name
            Next i '
        Next FileCnt '
    End If 'is Array

End Sub

файлы изгнания выглядят так:

  1. TB Secure 20BV.xlsx
  2. журнал 20BV.xlsx
  3. TB Secure 19BV.xlsx
  4. журнал 19BV.xlsx
  5. TB Secure 21BV.xlsx Я хочу только следовать данным с именами пар, такими как 20 или 19, но 21 - это один, поэтому я не импортируйте его. Каждая книга содержит один лист.

1 Ответ

0 голосов
/ 27 февраля 2020

Чтобы перебирать книги и их таблицы, попробуйте использовать следующий код. Если вам нужно что-то сделать с листами в соответствии с их названием, пожалуйста, более точно объясните, что вам нужно ...

Sub WorkbooksAndSheetsIteration()
  Dim FileToOpen As Variant, FileCnt As Long, sh As Worksheet, selectedBook As Workbook
  FileToOpen = Application.GetOpenFilename(Filefilter:="Excel Files (*.xlsx), *.xlsx", _
                                    Title:="Select Workbook to Import", MultiSelect:=True)
        If IsArray(FileToOpen) Then
        For FileCnt = LBound(FileToOpen) To UBound(FileToOpen)
            Set selectedBook = Workbooks.Open(fileName:=FileToOpen(FileCnt))
            For Each sh In selectedBook.Sheets
                For shNo = 1 To selectedBook.Sheets.Count - 1
                    If left(sh.Name, 1) = left(selectedBook.Sheets(i).Name, 1) And _
                                                                  sh.Index <> i Then
                        boolOK = True: Exit For
                    End If
                Next
            Next
            If boolOK Then
                'do here the operation you need
                '...
            Else
                 selectedBook.Close False
            End If
            boolOK = False
        Next FileCnt
    End If
End Sub

Для сопряжения рабочих тетрадей в соответствии с номером до "BV.xlsx", пожалуйста, используйте следующий код:

Sub WorkbooksAndSheetsIterationBis()
  Dim FileToOpen As Variant, FileCnt As Long, sh As Worksheet, selectedBook As Workbook
  Dim shNo As Long, boolOK As Boolean, i As Long, wName As Variant, strN As String, strN2 As String
  FileToOpen = Application.GetOpenFilename(Filefilter:="Excel Files (*.xlsx), *.xlsx", _
                                    Title:="Select Workbook to Import", MultiSelect:=True)
        If IsArray(FileToOpen) Then
            For Each wName In FileToOpen
                strN = Split(wName, "BV.xlsx")(0)
                Debug.Print Right(strN, Len(strN) - InStrRev(strN, " ")): Stop
                For FileCnt = LBound(FileToOpen) To UBound(FileToOpen)
                    strN2 = Split(FileToOpen(FileCnt), "BV.xlsx")(0)
                    If Right(strN, Len(strN) - InStrRev(strN, " ")) = _
                            Right(strN2, Len(strN2) - InStrRev(strN2, " ")) Then
                            boolOK = True: Exit For
                    End If
                Next
                If boolOK Then
                    Set selectedBook = Workbooks.Open(fileName:=FileToOpen(wName))
                    'do here the operation you need
                    '...
                End If
                boolOK = False
            Next
        End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...