无法从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一个名为reportName
string的新工作表。
如果将reportName
AddReportSheet()
中的AddReportSheet()
replace为“test”这样的随机string,程序将成功创build一个名为“test”的新工作表。
我猜测reportName只是不存储为一个string? 虽然我不确定这是为什么,我不知道如何解决这个问题。
也许你的文件名包含在表名中是非法的字符,或者它可能太长了? Excel有以下限制:
- 没有使用“:\ /?* []”
- 不超过32个字符
您已经在Sub AddReportSheet
声明为variables名称,但是您尝试使用reportName
而不是sheetName
。 由于您的Sub AddReportSheet
reportName
variables为空,因此不起作用。 所以改变你的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