【问题标题】:Run a macro reading sheet names from an XLS file从 XLS 文件运行宏读取工作表名称
【发布时间】:2020-02-08 19:46:42
【问题描述】:

我想运行一个宏,它从 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

【问题讨论】:

    标签: excel vba command exec xls


    【解决方案1】:
    1. 创建启用宏的工作簿。
    2. 使用 Sheet1 中的一个单元格指定您想要的工作表名称的 Excel 文件的路径。
    3. 在 Sheet1 中,使用开发者模式插入一个 Active X Control 按钮。
    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 中,在单元格 A2 中输入 Excel 路径(您想要的工作表名称)。

    6. 单击 Active X 按钮(保持设计模式处于禁用状态)。
    7. 您可以在宏工作簿的 Sheet2 中找到结果(如果需要,请在宏工作簿的 Sheet1 和 Sheet2 的第一行添加合适的列名以提高可读性)。

    【讨论】:

      【解决方案2】:

      您需要像这样将工作簿作为参数添加到 sub 中

      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
      

      【讨论】:

      • 谢谢,如何从命令行和执行文件运行它?
      • 您无法从命令行运行 Excel 宏,除非您将宏添加到工作簿打开事件并从命令行使用 ecxcel 打开它。
      • 您可以创建一个脚本(即VB script),您可以使用要传递给它的参数从命令行运行该脚本。然后,您的脚本可以打开 excel 文件并访问文件中的宏,并在启动宏时将参数传递给宏
      猜你喜欢
      • 2016-02-28
      • 2013-08-27
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      相关资源
      最近更新 更多