重命名Excel工作表VBA函数

重命名Excel工作表VBA函数,excel,vba,excel-formula,Excel,Vba,Excel Formula,以下是一个VBA函数,用于重命名单个工作簿中的所有excel工作表。我在运行函数时出错 我想这是因为角色太多了。我有大约300个工作表需要重命名,所以我想做一个if语句,这样如果名称的LEN大于31,那么它只使用前30个字符命名文件,剩下的字符。此外,如果有“/,?,*[,]”等字符,则应将其替换为空。我对VBA一无所知,我来自Python背景:) 用于重命名工作表的Excel函数: Sub RenameSheet() Dim rs As Worksheet For Each rs In Sh

以下是一个VBA函数,用于重命名单个工作簿中的所有excel工作表。我在运行函数时出错

我想这是因为角色太多了。我有大约300个工作表需要重命名,所以我想做一个
if
语句,这样如果名称的
LEN
大于31,那么它只使用前30个字符命名文件,剩下的字符。此外,如果有“/,?,*[,]”等字符,则应将其替换为空。我对VBA一无所知,我来自Python背景:)

用于重命名工作表的Excel函数:

Sub RenameSheet()
Dim rs As Worksheet
For Each rs In Sheets
rs.Name = rs.Range("B2")
Next rs
End Sub
使用左键功能:

Sub RenameSheet()
   Dim rs As Worksheet
   For Each rs In Sheets
      Debug.Print rs.Range("B2")  'print file name before creating file
      rs.Name = Left(rs.Range("B2"), 30)  'first 30 chars only
   Next rs
End Sub
使用左键功能:

Sub RenameSheet()
   Dim rs As Worksheet
   For Each rs In Sheets
      Debug.Print rs.Range("B2")  'print file name before creating file
      rs.Name = Left(rs.Range("B2"), 30)  'first 30 chars only
   Next rs
End Sub

问题可能是禁止使用的字符。您可以尝试以下代码。它将首先删除所有这些字符,然后最终将工作表名称的长度减少到30个字符

Sub RenameSheet()
    Dim rs As Worksheet
    Dim sWorksheetName As String
    
    For Each rs In Sheets
        'Store desired worksheet name to a string variable
        sWorksheetName = rs.Range("B2")
        'Replace forbidden characters
        sWorksheetName = Replace(sWorksheetName, "/", "")
        sWorksheetName = Replace(sWorksheetName, "\", "")
        sWorksheetName = Replace(sWorksheetName, "?", "")
        sWorksheetName = Replace(sWorksheetName, "*", "")
        sWorksheetName = Replace(sWorksheetName, "[", "")
        sWorksheetName = Replace(sWorksheetName, "]", "")
        'If the desired name is longer then 30 characters, only the first 30 characters
        'are used as worksheet name
        If Len(sWorksheetName) > 30 Then
            sWorksheetName = Left(sWorksheetName, 30)
        End If
        
        'Rename the worksheet
        rs.Name = sWorksheetName
    Next rs
    
End Sub

问题可能是禁止使用的字符。您可以尝试以下代码。它将首先删除所有这些字符,然后最终将工作表名称的长度减少到30个字符

Sub RenameSheet()
    Dim rs As Worksheet
    Dim sWorksheetName As String
    
    For Each rs In Sheets
        'Store desired worksheet name to a string variable
        sWorksheetName = rs.Range("B2")
        'Replace forbidden characters
        sWorksheetName = Replace(sWorksheetName, "/", "")
        sWorksheetName = Replace(sWorksheetName, "\", "")
        sWorksheetName = Replace(sWorksheetName, "?", "")
        sWorksheetName = Replace(sWorksheetName, "*", "")
        sWorksheetName = Replace(sWorksheetName, "[", "")
        sWorksheetName = Replace(sWorksheetName, "]", "")
        'If the desired name is longer then 30 characters, only the first 30 characters
        'are used as worksheet name
        If Len(sWorksheetName) > 30 Then
            sWorksheetName = Left(sWorksheetName, 30)
        End If
        
        'Rename the worksheet
        rs.Name = sWorksheetName
    Next rs
    
End Sub

您可以使用
Replace()
删除不需要的字符,使用
Left()
获取前30个字符您可以使用
Replace()
删除不需要的字符,使用
Left()
获取前30个字符在答案中添加
Debug.Print
。试试看。它应该先打印文件名,然后再保存。上次打印的文件名是什么?我在答案中添加了
Debug.print
。试试看。它应该在保存文件之前打印文件名。上次打印的文件名是什么?