2017-10-18 109 views
0

我想设置一个工作簿变量“Detailwb”作为用户使用Application.FileDialog(msoFileDialogFilePicker)函数选择的工作簿,但我收到以下错误消息:“运行时错误'9':在下面的代码的最后一行中下标超出范围“。我知道工作簿的调用应该采用这种格式;工作簿(“文件名”),但我希望程序调用用户选择的任何.xlsx文件。我只是不确定什么是合适的语法/方法来完成这一点。如何根据文件名设置工作簿变量作为字符串变量? (VBA)

这是一段摘录;

Private Sub CommandButton1_Click() 
'Define All Variables 
Dim GCell As Range 
Dim fDialog As FileDialog, result As Integer 
Dim Detailwb As Workbook 
Dim Timewb As Workbook 
Dim MyDetailReport As String 
Dim MyTimeSheet As String 
Dim MySheet As String 
Dim ProjNum As String 
Dim PhaseCode As String 
Dim Hours As String 
Dim WkEndDate As String 
Dim FindRowNumber As Long 
Dim FindColumn As Long 


'Define Workbooks 
Set Timewb = ThisWorkbook 


'Find source file 
Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 
    fDialog.AllowMultiSelect = False 
    fDialog.Title = "Select Daily Report File to Import" 
    fDialog.InitialFileName = "W:\PDX - Mechanical Construction\Operations\Detailing\Daily Tracking Logs\" 
    fDialog.Filters.Clear 
    fDialog.Filters.Add "Excel files", "*.xlsx" 
    If fDialog.Show = -1 Then 
     MyDetailReport = fDialog.SelectedItems(1) 
    End If 

Workbooks.Open Filename:=MyDetailReport & MyTimeSheet 
Set Detailwb = Workbooks(MyDetailReport) 
+0

是的,什么是MyTimeSheet?它在这个子程序中没有定义。它是一个全局变量吗?尝试删除“&MyTimeSheet”并查看会发生什么 –

回答

0

Workbooks.Open返回到打开的工作簿的引用,所以你只需要这一行:

Set Detailwb = Workbooks.Open(Filename:=MyDetailReport & MyTimeSheet) 

什么MyTimeSheet虽然做?

+0

MyTimeSheet是一个不同的字符串变量,其中包含已打开的工作簿的名称,不需要包含在此处。我已经想出了一个很好的方法来完成这个任务。 Workbooks.Open Filename:= MyDetailReport Set Detailwb = Workbooks(Workbooks.Count),Thanks for your response but。 –