我有一个工作簿,其中包含使用“分隔符”工作表定义的工作表的不同部分。一节示例如下:
在“主”工作表中输入新公司时,将复制“公司模板”工作表,将其插入到“DIV - OVERVIEW”分隔表之后和“DIV - NEWS”分隔表之前,并使用该工作表重命名输入文本。该过程使用以下代码:
Dim TEMPOverview As Worksheet
wsTEMPOverview.Copy After:=.Sheets("DIV - OVERVIEW")
ActiveSheet.Name = CStr(Nm.Text)
我希望将新工作表按字母顺序放置在指定的工作表范围内。例如:“公司 B”位于“DIV - OVERVIEW”:“DIV - NEWS”工作表范围内的“公司 A”和“公司 C”之间。我想首先的问题是如何使用分隔页定义工作表的范围。然后我会使用 For 循环将复制的工作表按字母顺序放置在范围内,如下所示:
Dim o
For o = 1 To trackingWB.Sheets.Count
If trackingWB.Sheets(o).Name >= companyName.Text Then
Exit For
End If
Next o
wsTEMPOverview.Copy before:=trackingWB.Sheets(o)
ActiveSheet.Name = CStr(Nm.Text)
我该怎么办?
这样的事情会起作用:
Sub sheetTest()
CreateSheetFromTemplate "CompanyB"
CreateSheetFromTemplate "CompanyZZ"
CreateSheetFromTemplate "CompanyH"
End Sub
Sub CreateSheetFromTemplate(companyName As String)
Dim indxOv As Long, indxNews As Long, wb As Workbook, n As Long, pos As Long
Dim wsTEMPOverview As Worksheet
Set wb = ThisWorkbook
indxOv = wb.Worksheets("DIV - OVERVIEW").Index 'positions of the bounding sheets
indxNews = wb.Worksheets("DIV - NEWS").Index
Set wsTEMPOverview = wb.Worksheets("template")
For n = indxOv + 1 To indxNews - 1
If wb.Worksheets(n).Name > companyName Then 'compare names
pos = n 'insert before sheet n
Exit For 'done schecking
End If
Next n
If pos = 0 Then pos = indxNews 'new name comes after all existing sheets
wsTEMPOverview.Copy before:=wb.Sheets(pos) 'copy and rename
ActiveSheet.Name = companyName
End Sub
可能需要添加一个检查以确保该名称尚不存在。