String 无法将变量中的字符串指定为工作表名称

String 无法将变量中的字符串指定为工作表名称,string,vba,excel,String,Vba,Excel,基本上,我正在尝试在当前工作簿中创建一个与所选文件同名的新工作表 Sub ImportReport() '(clickable button) 'prompt to select file, get file name (of Report) Dim reportFullName As String reportFullName = PromptGetReportFullName() Dim reportName As String 'Grab

基本上,我正在尝试在当前工作簿中创建一个与所选文件同名的新工作表

Sub ImportReport()
    '(clickable button)

    'prompt to select file, get file name (of Report)
    Dim reportFullName As String
    reportFullName = PromptGetReportFullName()

    Dim reportName As String
    'Grabs the excel file name from the full directory path
    reportName = Mid(reportFullName, InStrRev(reportFullName, "\") + 1, InStrRev(reportFullName, ".") - (InStrRev(reportFullName, "\") + 1))

    'add Sheet after last Sheet with report name
    Call AddReportSheet(reportName)

End Sub

Private Function PromptGetReportFullName() As String

    Dim startingFileDirectory As String
    startingFileDirectory = Range("A6").Text
    ChDrive FileDirectory

    PromptGetReportFullName = Application.GetOpenFilename(, , "Report File")

End Function

Private Sub AddReportSheet(sheetName As String)
    With ActiveWorkbook
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).name = sheetName
    End With
End Sub
奇怪的部分是在
Sub-ImportReport()
中调用
MsgBox(reportName)
,工作正常,并为我提供了所需的文件名,但是在
Private Sub-AddReportSheet()
中将工作表名指定给
reportName
中的
无法创建使用
reportName
字符串命名的新工作表

如果将
AddReportSheet()
中的
reportName
替换为类似“test”的随机字符串,程序将成功创建名为“test”的新工作表


我猜reportName只是没有存储为字符串?虽然我不知道为什么会这样,我也不知道如何修复它。

您已在Sub
AddReportSheet
中将
sheetName
声明为变量名,但您正在尝试使用
reportName
而不是
sheetName
。由于子
AddReportSheet
中的
reportName
变量为空,因此它不起作用。因此,如下更改变量名:

Private Sub AddReportSheet(sheetName As String)
    With ActiveWorkbook
        'REPLACED reportName WITH sheetName
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).name = sheetName
    End With
End Sub

您已将
sheetName
声明为子
AddReportSheet
中的变量名,但您试图使用
reportName
而不是
sheetName
。由于子
AddReportSheet
中的
reportName
变量为空,因此它不起作用。因此,如下更改变量名:

Private Sub AddReportSheet(sheetName As String)
    With ActiveWorkbook
        'REPLACED reportName WITH sheetName
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).name = sheetName
    End With
End Sub

可能您的文件名包含工作表名称中非法的字符,或者文件名太长?Excel有以下限制:

  • 不使用“:\/?*[]”
  • 不超过32个字符

可能您的文件名包含工作表名称中非法的字符,或者文件名太长?Excel有以下限制:

  • 不使用“:\/?*[]”
  • 不超过32个字符

你说得对,那真是个愚蠢的错误。它是在尝试了许多方法来做同样的事情之后出现的。尽管如此,使用
sheetName
还是不起作用,尽管我不明白为什么不:(嗯,
sheetName
是否在
AddReportSheet
Sub中携带了所需的值?试着调试并查看。
MsgBox(sheetName)
AddReportSheet
中的
给了我一个奇怪的字符串。请编写一个简单的
Sub
来添加带有硬编码sheetName的工作表,并查看它是否有效。例如,使用ActiveWorkbook.Sheets.add添加(后面:=.Sheets(.Sheets.Count)).name=“测试”
你是对的,那真是一个愚蠢的错误。它是在尝试了许多方法来做同样的事情之后出现的。尽管如此,使用
sheetName
还是不起作用,尽管我不明白为什么不起作用:(嗯,
sheetName
是否在
AddReportSheet
Sub中携带了所需的值?试着调试并查看。
MsgBox(sheetName)
AddReportSheet
中的
给了我一个奇怪的字符串。请编写一个简单的
Sub
来添加带有硬编码sheetName的工作表,并查看它是否有效。例如,使用ActiveWorkbook.Sheets.add添加(后面:=.Sheets(.Sheets.Count)).name=“测试”
是的!就是这样!名称太长了。非常感谢。回想起来,这是错误消息上列出的可能问题之一。我只是掩饰了一下。是的!就是这样!名称太长了。非常感谢。回想起来,这是错误消息上列出的可能问题之一。我只是掩饰一下我对它很感兴趣。