【问题标题】:Inserting a new sheet alphabetically between two specific sheets在两个特定工作表之间按字母顺序插入新工作表
【发布时间】:2019-02-12 15:01:10
【问题描述】:

到目前为止,我已经创建了一个按钮“AddaSheet”,它会弹出一个用户表单,其中可以在文本框中插入名称“NewSheetName”。然后我有一个按钮(“AddNow”),当点击它时,需要(这是我需要帮助的地方)执行以下操作:

复制“模板”工作表并将其重命名为“NewSheetName”(即输入的文本),并按字母顺序在两个已定义工作表之间插入此新工作表。

我的工作簿中有许多包含不同元素(例如表格等)的工作表,并且我将特定类型的数据集工作表分组在一起。因此,理想情况下,如果可以在设定的范围内输入新工作表,那就太好了。

提前感谢您的帮助!

附言我是初学者,如果您能用 cmets 解释代码在做什么,我将不胜感激。

【问题讨论】:

  • 查看worksheets.add中的beforeafter参数

标签: excel vba


【解决方案1】:

这会将您的工作表按字母顺序排序

Sub SortSheetsTabName()
    ' Turn off screenupdating so no visual effects to enduser
    Application.ScreenUpdating = False
    Dim iSheets%, i%, j%
    ' Get number of sheets in workbook
    iSheets = Sheets.Count
    ' Loop through all sheets in workbook
    For i = 1 To iSheets - 1
        ' Loop through sheets to find correct position of worksheet
        For j = i + 1 To iSheets
            ' Test position
            If Sheets(j).Name < Sheets(i).Name Then
                ' Move sheet to alphabetical position
                Sheets(j).Move before:=Sheets(i)
            End If
        Next j
    Next i
    ' Turn on screenupdating for end user
    Application.ScreenUpdating = True
End Sub

Source

【讨论】:

  • 亲爱的汤姆,感谢您的快速回复。您能帮我理解以下内容吗? isheets 旁边的 % 符号,i = 1 和 -1 的作用以及 i 和 j 代表什么?非常感谢您,非常感谢您的帮助!阿尼
  • 代码将遍历您的所有工作表并将它们按字母顺序排序。如果您的工作表已经按字母顺序排列,您可以将其修改为仅适用于新创建的工作表
  • @SolarMike 同意
  • @Tom,加上 1'因为它是有用的代码 - 可以作为很多东西的基础。
【解决方案2】:

如果您需要按字母顺序在两个已定义的工作表之间插入新工作表。例如,在名为 Start 的工作表和名为 End 的工作表之间使用以下代码。

此代码的优点是,Start 之前和End 之后的工作表可以按字母顺序随机排列,但只有新模板工作表以正确的方式排序。

示例:
在以下表格中,新的Delta 表格将在BetaEpsilon 之间排序,但其余顺序完全随机:

Option Explicit

Public Sub CopyAndSortSheetInBetween()
    Dim wsTemplate As Worksheet 'template sheet
    Set wsTemplate = ThisWorkbook.Worksheets("Template")

    Dim iStart As Long 'define your start sheet
    iStart = ThisWorkbook.Sheets("Start").Index + 1

    Dim iEnd As Long 'define your end sheet
    iEnd = ThisWorkbook.Sheets("Stop").Index - 1

    If iEnd < iStart Then
        MsgBox "Stop sheet is before start sheet"
        Exit Sub
    End If

    Dim NewName As String 'name that your new sheet will be
    NewName = "Delta"

    'find out which position is between "Start" and "Stop" sheet is the correct
    Dim i As Long
    For i = iStart To iEnd
        If UCase(ThisWorkbook.Sheets(i).Name) > UCase(NewName) Then
            Exit For
        End If
    Next i

    'now i is the destination sheet number for your copied template sheet
    'and you can copy and rename your template
    wsTemplate.Copy Before:=ThisWorkbook.Sheets(i)
    ThisWorkbook.Sheets(i).Name = NewName
End Sub

【讨论】:

  • 谢谢!这是我缺少的额外步骤!
  • 我在添加新工作表名称时遇到了一些麻烦,其中新名称按字母顺序排列(例如“Taa”)。有什么建议我可以改变这个吗?谢谢!
  • 另外我正在使用 excel 2016 以防万一
  • @AniABC 我的错误错过了iEnd = ThisWorkbook.Sheets("Stop").Index - 1 中的- 1 修复了答案。
猜你喜欢
  • 2015-05-17
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
  • 2014-08-30
  • 1970-01-01
相关资源
最近更新 更多