2017-10-18 12 views
0

ユーザーがApplication.FileDialog(msoFileDialogFilePicker)関数で選択したブックとして次のエラーメッセージが表示されているワークブック変数 "Detailwb"を設定しようとしています: "ランタイムエラー '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が開かれたブックへの参照を返しますので、あなたはこれだけのための1つの行が必要です。

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

MyTimeSheetがが何をやっているの?

+0

MyTimeSheetは既に開いているワークブックの名前を格納する別の文字列変数で、ここに含める必要はありません。私はすでに、これを達成するためのより滑らかな方法を考え出しました。 Workbooks.Openファイル名:= MyDetailReport 詳細Detailwb = Workbooks(Workbooks.Count)を設定してください。 –