我的工作簿有 10 个选项卡,其中一些选项卡是隐藏的,但我认为这对我的目的来说并不重要。在“SQL”选项卡上,我有一个我想要的新工作表名称的映射(参见 A14:B24)。我为单元格 A15 提供了一个命名范围 SheetStart,用于在代码中进行偏移。您可以忽略工作表上的其他所有内容。当我运行宏时,debug.printsheetName是$200,000,这是正确的,但是在下一行当我分配“选项1”时,它说下标超出范围。我认为问题在于使用 .Text()。有人可以解释这是为什么吗?解决这个问题的方法是什么?
Sub UpdateSheetNames()
Dim SheetStart As Range
Dim wb2 As Workbook
Dim sheetName As String
Dim formattedCell As Range
Set wb2 = ThisWorkbook
Set SheetStart = wb2.Sheets("SQL").Range("SheetStart")
wb2.Activate
For i = 1 To 10
' Get the formatted value from the cell
Set formattedCell = SheetStart.Offset(i - 1, 0)
sheetName = formattedCell.Text
' Remove any invalid characters for sheet names
sheetName = Replace(Replace(sheetName, "/", "_"), "\", "_")
' Check if the sheet name is too long (Excel limits sheet names to 31 characters)
If Len(sheetName) > 31 Then
sheetName = Trim(Left(sheetName, 31))
End If
Debug.Print sheetName
Sheets(sheetName).Name = "Option " & i 'subscript error here
Sheets("Summary").Range("Sheet" & i).Value = "Option " & i
Next i
End Sub
我尝试手动设置sheetName =“$200,000”,效果很好。这就是我知道问题出在 .Text 函数上的原因。
我认为问题可能出在
.Text
返回的值之前和/或之后的“流氓”空格字符...用此替换相关行以删除它们
sheetName = Trim(Replace(Replace(sheetName, "/", "_"), "\", "_"))