2016-07-25 5 views
1

このコードでは、Excelファイルと5つの異なるDATファイルを選択するように求められます。 Excelファイルがシートにロードされ、インポートする各DATファイルに新しいシートが追加されると想定されます。 Excelファイルは正しく読み込まれますが、最初のDATファイルのインポート時にプログラムエラーが発生します。区切りなしでDATを要求し、新しいシートを追加してDATをインポートするVBA

エラー:「実行時エラー '1004':アプリケーション定義またはオブジェクト定義エラー」。

エラーが発生した場所です。

ActiveSheet.QueryTables.Add(Connection:= _ 
    DIFN, Destination _ 

これは、コードの残りの部分である:あなたが開いているファイルを想定し

' Prompt user for files 
    CAFN = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx") 
    DIFN = Application.GetOpenFilename("ESDI DAT File (*.dat), *.dat") 
    FOFN = Application.GetOpenFilename("ESFO DAT File (*.dat), *.dat") 
    FSFN = Application.GetOpenFilename("ESFS DAT File (*.dat), *.dat") 
    IPFN = Application.GetOpenFilename("ESIP DAT File (*.dat), *.dat") 
    PPFN = Application.GetOpenFilename("ESPP DAT File (*.dat), *.dat") 

' Load Combined All 
    Dim x As Workbook 
    Dim y As Workbook 

    '## Open both workbooks first: 
    Set y = ActiveWorkbook 
    Set x = Workbooks.Open(CAFN) 

    'Now, transfer values from x to y: 
    With x.Sheets("Sheet1").UsedRange 
     'Now, paste to y worksheet: 
     y.Sheets("Start").Range("A1").Resize(_ 
      .Rows.Count, .Columns.Count) = .Value 
    End With 

    'Close x: 
    x.Close 

    y.Sheets("Start").Name = "Combined All" 

' Load DAT files 
    ActiveWorkbook.Worksheets.Add.Name = "ESDI" 
    With ActiveSheet.QueryTables.Add(Connection:= _ 
     DIFN, Destination _ 
     :=Range("$A$1")) 
     .Name = "ESDI" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 437 
     .TextFileStartRow = 1 
     .TextFileParseType = xlFixedWidth 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = True 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = False 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(9, 1, 1, 9, 1, 9, 9, 1, 9, 9, 9) 
     .TextFileFixedColumnWidths = Array(3, 7, 7, 2, 10, 8, 3, 8, 40, 2) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 
    End With 
+0

'接続:= '引数? –

+0

C:\ Users \ Public \ Documents \ ESDIAPR.DAT – Jehiel238

+0

「DIFN」は次のように宣言されていますか?これが動作するにはString型である必要があります。 'CStr(DIFN)'が文字列でない場合には動作します。 –

答えて

1

このは私のために働いたコードである(正しい方向に私を指しているためYowE3Kとスコット・ホルツマンに感謝!):DIFN` `の値は、あなたがにそれを渡したときに何

' Prompt user for files 
Dim CAFN As String 
Dim DIFN As String 
Dim FOFN As String 
Dim FSFN As String 
Dim IPFN As String 
Dim PPFN As String 

CAFN = Application.GetOpenFilename("Excel Files (*.xlsx), *.xlsx") 
DIFN = Application.GetOpenFilename("ESDI DAT File (*.dat), *.dat") 
FOFN = Application.GetOpenFilename("ESFO DAT File (*.dat), *.dat") 
FSFN = Application.GetOpenFilename("ESFS DAT File (*.dat), *.dat") 
IPFN = Application.GetOpenFilename("ESIP DAT File (*.dat), *.dat") 
PPFN = Application.GetOpenFilename("ESPP DAT File (*.dat), *.dat") 

' Load Combined All 
Dim x As Workbook 
Dim y As Workbook 

'## Open both workbooks first: 
Set y = ActiveWorkbook 
Set x = Workbooks.Open(CAFN) 

'Now, transfer values from x to y: 
With x.Sheets("Sheet1").UsedRange 
    'Now, paste to y worksheet: 
    y.Sheets("Start").Range("A1").Resize(_ 
     .Rows.Count, .Columns.Count) = .Value 
End With 

'Close x: 
x.Close 

y.Sheets("Start").Name = "Combined All" 


' Load DAT files 
    ActiveWorkbook.Worksheets.Add.Name = "ESDI" 
    MsgBox ">>>" & "TEXT;" & DIFN & "<<<" 
    With Sheets("ESDI").QueryTables.Add(Connection:="TEXT;" & DIFN, Destination:=Range("$A$1")) 
     .Name = "ESDI" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 437 
     .TextFileStartRow = 1 
     .TextFileParseType = xlFixedWidth 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = True 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = False 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(9, 1, 1, 9, 1, 9, 9, 1, 9, 9, 9) 
     .TextFileFixedColumnWidths = Array(3, 7, 7, 2, 10, 8, 3, 8, 40, 2) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh 
    End With 
0

は、テキストファイル

With ActiveSheet.QueryTables.Add(Connection:= _ 
    DIFN, Destination _ 
    :=Range("$A$1")) 

ですは、

+0

ありがとう、私はまだエラーが発生します。違いがある場合、ファイルは.datファイルです。 – Jehiel238

+1

ファイルの拡張子は実際には何の違いもありません。ファイルに含まれるものだけです。 「With」ステートメントに続くすべてのコードは、列区切りのテキストファイルでなければならないと思いました。テキストファイルでない場合は、[Microsoftのドキュメント](https://msdn.microsoft.com/en-us/library/office/ff837764.aspx)を参照して、ファイルの種類を指定する必要があります。 – YowE3K

+0

ああ、はい、テキストです。 – Jehiel238

関連する問題