2017-10-18 2 views
0

Ich versuche, eine Arbeitsmappenvariable "Detailwb" als eine Arbeitsmappe festzulegen, die der Benutzer mit der Application.FileDialog (MsoFileDialogFilePicker) -Funktion auswählt, aber ich erhalte die folgende Fehlermeldung: "Laufzeitfehler '9': Index außerhalb des gültigen Bereichs "in der letzten Zeile des folgenden Codes. Ich weiß, dass der Aufruf der Arbeitsmappen in diesem Format sein sollte; Arbeitsmappen ("Dateiname"), aber ich möchte, dass das Programm die .xlsx-Datei aufruft, die der Benutzer auswählt. Ich bin nur nicht sicher, was die richtige Syntax/Methode ist, um dies zu erreichen.Wie setze ich die Arbeitsmappenvariable basierend auf einem Dateinamen, den ich als String-Variable habe? (VBA)

Hier ist ein Auszug;

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

Ja, was ist MyTimeSheet? Es ist nicht in dieser Subroutine definiert. Ist es eine globale Variable? Entfernen Sie "& MyTimeSheet" und sehen Sie, was passiert –

Antwort

0

Workbooks.Open gibt einen Verweis auf die Arbeitsmappe geöffnet, so müssen Sie nur eine Zeile für diese:

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

Was MyTimeSheet obwohl tut?

+0

MyTimeSheet ist eine andere Zeichenfolgenvariable, die den Namen der bereits geöffneten Arbeitsmappe enthält und hier nicht enthalten sein muss. Ich habe bereits einen besseren Weg gefunden, dies zu erreichen. Workbooks.Open Dateiname: = MyDetailReport Set Detailwb = Arbeitsmappen (Workbooks.Count), Danke für Ihre Antwort. –

Verwandte Themen