到目前为止,我已经创建了一个按钮“ AddaSheet”,该按钮弹出一个用户窗体,其中可以在文本框中插入名称“ NewSheetName”。然后,我有一个按钮(“ AddNow”),当单击该按钮时,需要执行以下操作(这是我需要的帮助):
复制“模板”表并将其重命名为“ NewSheetName”(即输入的文本),然后将此新表按字母顺序插入两个定义的表之间。
我的工作簿中有很多工作表,其中包含表格等不同元素,并且我将一种特殊的数据集工作表分组在一起。这样的话,理想情况下,如果可以在设定范围之间输入新的工作表,那就太好了。
提前感谢您的帮助!
p.s。我是一个初学者,如果可以用注释解释代码的作用,我将不胜感激。
答案 0 :(得分:2)
这会将您的工作表按字母顺序排序
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
答案 1 :(得分:1)
如果您需要按字母顺序在两个定义的工作表之间插入新工作表。例如,在名为Start
的工作表和名为End
的工作表之间,然后使用以下代码。
此代码的优点在于,Start
之前和End
之后的工作表可以按字母顺序随机排列,但是只有新的模板工作表才以正确的方式排序。
示例:
在以下工作表中,新的Delta
工作表将在Beta
和Epsilon
之间排序,但其余顺序完全是随机的:
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