|
▼通りすがり さん:
ご返答ありがとうございます!
いろいろと勝手がわからず、かなり心細かったので、レスが付いて勇気が出ました^^
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の雰囲気?が分かってきましたので、他にも色々と試してみたいと思います。
ご意見ありがとうございました!
-----
|
|