基本上,我正在尝试在当前工作簿中创建一个与我选择的文件同名的新工作表。
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只是没有存储为字符串?虽然我不确定为什么会这样,但我不知道如何解决它。
答案 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具有以下限制: