无法从variables中分配string作为工作表名称

基本上,我正在尝试在当前工作簿中创build一个与我select的文件具有相同名称的新工作表。

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()无法创build一个名为reportNamestring的新工作表。

如果将reportName AddReportSheet()中的AddReportSheet()replace为“test”这样的随机string,程序将成功创build一个名为“test”的新工作表。

我猜测reportName只是不存储为一个string? 虽然我不确定这是为什么,我不知道如何解决这个问题。

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

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

您已经在Sub AddReportSheet声明为variables名称,但是您尝试使用reportName而不是sheetName 。 由于您的Sub AddReportSheet reportNamevariables为空,因此不起作用。 所以改变你的variables名称是这样的:

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