excel - 在获取 Excel 工作簿中所有工作表名称的列表期间,VBA 代码的执行速度非常慢

标签 excel vba performance execution worksheet

我需要在 Excel 中处理包含数百个特定工作表的工作簿。我创建了这个简单的代码来获取名为“Spis faktur”的所有这些工作表的名称列表。
代码运行良好,但速度非常慢。似乎它在 0,3 秒内执行了特定工作表的一个名称,因此在完成执行所有工作表名称之前需要很长时间。

Sub ListSheets() 
Dim sh As Worksheet
Const txt = "Spis faktur"

Set sh = Sheets(txt)
  For i = 1 To Worksheets.Count
      sh.Cells(i + 1, 1) = ThisWorkbook.Sheets(i).Name
  Next i
End Sub
如有任何建议,此代码可能有什么问题,将不胜感激。

最佳答案

列出所有工作表名称

    Option Explicit
    
    Sub ListWorkSheets()
        
        Const dName As String = "Spis faktur"
        Const dfCellAddress As String = "A2"
        
        Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code

        Dim dws As Worksheet: Set dws = wb.Worksheets(dName)
        Dim wsnCount As Long: wsnCount = wb.Worksheets.Count
        
        Dim WorksheetNames() As String: ReDim WorksheetNames(1 To wsnCount, 1 To 1)
        
        Dim sws As Worksheet
        Dim n As Long
        
        ' Write to array.
        For Each sws In wb.Worksheets
            n = n + 1
            WorksheetNames(n, 1) = sws.Name
        Next sws
    
        ' Write to range.
        Dim dfCell As Range: Set dfCell = dws.Range(dfCellAddress)
        Dim drg As Range: Set drg = dfCell.Resize(wsnCount)
        drg.Value = WorksheetNames
    
        ' Clear below.
        Dim dclrrg As Range: Set dclrrg _
            = drg.Resize(dws.Rows.Count - drg.Row - wsnCount + 1).Offset(wsnCount)
        dclrrg.ClearContents ' or dclrrg.Clear
    
    End Sub

关于excel - 在获取 Excel 工作簿中所有工作表名称的列表期间,VBA 代码的执行速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70956460/

相关文章:

sql - 为什么我的 DLookup 生成 "invalid use of null"错误 : 94

java - 为什么我的 native C++ 代码在 Android 上的运行速度比 Java 慢得多?

python - 在 xlwings 中格式化表格

vba - 通过 vba 卡住行,无需激活单个工作表

Excel 表达式复制行但删除空白行

Excel VBA 输入框 - 选择范围(类型 8),但不是固定范围,即 A1 不是 $A$1

javascript - 修改 DOM 元素和限制回流的最有效方法是什么?

python - 当客户端断开连接时 Bottle.py 停止

excel - VBA复制单元格值和格式

excel - 如何编写公式以更改同一单元格中的多个字母