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

时间:2017-01-26 14:18:45

标签: excel string vba excel-vba

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

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

奇怪的部分是在MsgBox(reportName)中调用Sub ImportReport()工作正常,并为我提供了我想要的文件名,但在reportName中将工作表名称分配给Private Sub AddReportSheet()无法创建以reportName字符串命名的新工作表。

如果我用“test”这样的随机字符串替换reportName中的AddReportSheet(),程序会成功创建名为“test”的新工作表。

我猜测reportName只是没有存储为字符串?虽然我不确定为什么会这样,但我不知道如何解决它。

2 个答案:

答案 0 :(得分:2)

您已在子sheetName中将AddReportSheet声明为变量名称,但您尝试使用reportName代替sheetName。由于reportName变量在您的子AddReportSheet中为空,因此无效。因此,请更改您的变量名称:

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

答案 1 :(得分:1)

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

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