Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


30837 / 76732 ←次へ | 前へ→

【51157】Re:テキストファイルを相対パスでインポートする方法について
お礼  S  - 07/8/30(木) 19:56 -

引用なし
パスワード
   ▼通りすがり さん:
ご返答ありがとうございます! 

いろいろと勝手がわからず、かなり心細かったので、レスが付いて勇気が出ました^^
VBAを始めて今日で3日目なもので・・VC++には結構親しんでいるのですが・・

>私のエクセル2002で試したところ、
>毎回ファイル選択のダイアログが出てきました。

質問時にも書きましたが、私は「データ→外部データの取り込み→データ範囲プロパティ」で
「更新時にファイル名を確認」のオプションをオフにしています。オンだと、ダイアログが出ますね・・
私はExcel2000ですが、多分同じだと思います・・・

因みに、ダイアログを出す場合でも、開くのは、以前に設定したパス(か、デフォルト時のパス)だと思います。
カレントは開かないのではないでしょうか(フォルダ名を変えてからやってみるとわかると思います)。

本日この問題に取り組んでいましたが、ボタンを押すたびにクエリを作成しなおすようにして解決しました。

具体的には、baz.datのインポート先のシート(Sheet2とする)のメンバ関数として、QT()という関数を作りました。
そして、ボタンが配置されているシート(Sheet1とする)から、次のようにして呼び出すようにしました。

'-----------------------------------------------
Private Sub CommandButton1_Click()
  Call Worksheets("Sheet2").QT
End Sub
'-----------------------------------------------

QTは例えば次の通りです。ポイントは、Connectionの引数にインポート元のファイル名baz.datだけを書いて、
絶対パスでは指定しない事です(「テキストファイルのインポート」をマクロ記録したところ、
絶対パスで書かれる事が分かりました。つまり、その部分を下記のように相対パスに修正したという事です)。

'-----------------------------------------------
Sub QT()
  With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;baz.dat", Destination:=Range("A1"))
'    .Name = "Sheet2"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlOverwriteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = xlWindows
    .TextFileStartRow = 1
    .TextFileParseType = xlFixedWidth
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(2, 1)
    .TextFileFixedColumnWidths = Array(24)
    .Refresh BackgroundQuery:=False
  End With
End Sub
'-----------------------------------------------

なんとなくVBAの雰囲気?が分かってきましたので、他にも色々と試してみたいと思います。
ご意見ありがとうございました!

-----

1 hits

【51140】テキストファイルを相対パスでインポートする方法について S 07/8/29(水) 19:22 質問
【51155】Re:テキストファイルを相対パスでインポー... 通りすがり 07/8/30(木) 17:56 発言
【51157】Re:テキストファイルを相対パスでインポー... S 07/8/30(木) 19:56 お礼
【51158】Re:テキストファイルを相対パスでインポー... S 07/8/30(木) 20:30 お礼

30837 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free