【问题标题】:Excel Macro Not Doing anything?Excel 宏什么都不做?
【发布时间】:2015-02-10 04:29:39
【问题描述】:

这是我的第一个 excel 宏(也是第一次使用 VBScript),所以很可能是错误的,但我正在尝试浏览我的工作簿中的每个工作表,并将工作表重命名为工作表的值“ A2" 单元格的值。顾名思义,当我运行该函数时,它什么也没做。但是它正在运行。这是我的代码:

Sub RenameSheets()

   Dim WS_Count As Integer
   Dim I As Integer

   ' Set WS_Count equal to the number of worksheets in the active
   ' workbook.
   WS_Count = ActiveWorkbook.Worksheets.Count

   ' Begin the loop.
   For I = 1 To WS_Count

      ActiveSheet.Name = ActiveSheet.Range("A2").Value

   Next I

End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:
    Sub RenameSheets()
    
    Dim WS_Count As Integer
    Dim I As Integer
    
    WS_Count = ActiveWorkbook.Worksheets.Count
    
    For I = 1 To WS_Count
    Dim WS As Worksheet
    Set WS = ActiveWorkbook.Worksheets(I)
    
    'Worksheet names can not be null
    If Len(WS.Cells(2, 1)) > 0 Then
    
        WS.Name = WS.Cells(2, 1)
    
    End If
    
    Next I
    
    End Sub
    

    【讨论】:

    • +1 :) 但是有两个建议。 1)将“Dim WS As Worksheet”放在循环之外。 2)您可能希望包含错误处理,因为如果存在具有该名称的工作表,上述代码将失败:)
    【解决方案2】:

    您没有选择不同的工作表,因此 ActiveSheet 没有改变。您可以在下面重写您的函数以获得预期的结果:

    Dim currentWorksheet as Worksheet
    For Each currentWorksheet in ActiveWorkbook.Worksheets
      currentWorksheet.name = currentWorksheet.Range("A2").Value
    Next currentWorksheet
    

    上面是一个 for..each 循环,它将 currentWorksheet 设置为工作簿中所有工作表中的每个工作表。

    【讨论】:

    • @Jordan Foreman 抱歉,我现在没有 excel,所以我记不住了。我编辑了我的回复,现在应该可以使用了。
    猜你喜欢
    • 2019-03-08
    • 2016-12-24
    • 2017-04-18
    • 2011-08-03
    • 2014-05-11
    • 2014-09-10
    • 1970-01-01
    • 2023-03-29
    • 2013-09-28
    相关资源
    最近更新 更多