Запустите макрос для чтения имен листов из файла XLS - PullRequest
0 голосов
/ 11 октября 2019

Я хотел бы запустить макрос, который читает все имена листов из файла XLS, а затем мог запускать макрос из команды «Выполнить». Как это возможно? На данный момент у меня есть следующий код, но я хотел бы обобщить его для других файлов (в основном, ввод имени файла в качестве параметра в этом макросе и команде).

Sub FnGetSheetsName()
    Dim mainworkBook As Workbook
    Set mainworkBook = ActiveWorkbook
    For i = 1 To mainworkBook.Sheets.Count
        'Either we can put all names in an array , here we are printing all the names in Sheet 2
        mainworkBook.Sheets("Sheet2").Range("A" & i) = mainworkBook.Sheets(i).Name
    Next i
End Sub

Ответы [ 2 ]

0 голосов
/ 11 октября 2019
  1. Создание книги с поддержкой макросов.
  2. Используйте одну из ячеек в Sheet1, чтобы указать путь к файлу Excel, имена листов которого вы хотите.
  3. В Sheet1 вставьте активныйX Кнопка управления в режиме разработчика.
  4. В коде позади кнопки (двойной щелчок по кнопке, оставив режим разработки включенным на вкладке разработчика -> открывается окно VBA), добавьте следующий код VB и сохраните его. :

    Private Sub CommandButton1_Click()
    
    Dim sheetCount As Integer
    Dim mainWorkBook, workbook1 As Workbook
    
    Set mainWorkBook = ActiveWorkbook
    Set workbook1 = Workbooks.Open(Range("A2"))
    
    'Clear the contents of sheet 2, starting from row 2 - verify the last cell in sheet
    Selection = mainWorkBook.Sheets("Sheet2").Range("A2:ZZ104857").ClearContents
    
    If mainWorkBook.Sheets("Sheet1").Range("A2") = "" Then
        MsgBox ("Enter Excel path")
        GoTo exit1
    End If
    
    For sheetCount = 1 To workbook1.Sheets.Count
        'Put sheet names of excel file in sheet 2 of macro book - you can find sheet names in Sheet2 starting from A2 cell.
        mainWorkBook.Sheets("Sheet2").Range("A" & sheetCount + 1).Value = workbook1.Sheets(sheetCount).Name
    Next sheetCount
    
    exit1:
    workbook1.Close (False)
    
    End Sub
    
  5. В Sheet1 (рабочей тетради макроса) введите путь к Excel (имена которых вы хотите) в ячейку A2.

  6. НажмитеАктивная кнопка X (отключение режима разработки).
  7. Результат можно найти в Листе 2 рабочей книги макроса (при необходимости добавьте подходящие имена столбцов в первой строке Листа 1 и Листа 2 рабочей книги макроса).

screenshot sheet1

0 голосов
/ 11 октября 2019

Вам необходимо добавить рабочую книгу в качестве параметра к сабвуферу, например:

Option Explicit

Sub FnGetSheetsName(ByRef mainworkBook As Workbook)

Dim i As Long

    For i = 1 To mainworkBook.Sheets.Count
        'Either we can put all names in an array , here we are printing all the names in Sheet 2
        mainworkBook.Sheets("Sheet2").Range("A" & i) = mainworkBook.Sheets(i).Name
    Next i

End Sub

Sub TestIt()
    FnGetSheetsName ActiveWorkbook
End Sub

Обновление: если вы хотите запустить макрос из командной строки, вы можете изменить имя TestIt на Auto_open итогда этот подпрограмма будет запускаться при открытии файла

Sub Auto_Open()
    FnGetSheetsName ActiveWorkbook
End Sub

Другой способ - изменить событие workbook_open. Но вам нужно добавить этот код в модуль кода ThisWorkbook.

Private Sub Workbook_Open()
    FnGetSheetsName ActiveWorkbook
End Sub
...