>マクロ登録前の段階ではカンマ区切りでデータ更新できていたのですが、マクロ登録後はカンマ区切りになりません。
あら、失礼しました。
#そんな仕様だったかしらん。
Sub test2()
Dim qt As QueryTable
Dim b As Boolean
Dim x As Variant
On Error Resume Next
Set qt = Sheets("HIN").Range("A3").QueryTable
On Error GoTo 0
If qt Is Nothing Then
MsgBox "no QueryTable": Exit Sub
End If
x = Application.GetOpenFilename(",*.txt")
If VarType(x) = vbBoolean Then
MsgBox "cancel"
Else
b = qt.TextFilePromptOnRefresh
qt.TextFilePromptOnRefresh = False
qt.Connection = "TEXT;" & x
qt.TextFileCommaDelimiter = True '■カンマ区切りを設定
'qt.TextFileTabDelimiter = True 'タブ区切り。(必要に応じて)
qt.Refresh BackgroundQuery:=False
qt.TextFilePromptOnRefresh = b
End If
Sheets("Sheet1").Select
Set qt = Nothing
End Sub
>qt.TextFileCommaDelimiter = True
この行を挿入です。
ちなみに、(あくまで参考)
手動で更新する事がなければ、
毎回QueryTableでTextだけ残してQueryTableの定義は削除、という処理でも良いかもしれません。
以下はActiveSheetのRange("A3")起点でtextのみ取り込む例。
Sub test3()
Dim x As Variant
Dim n As Long
x = Application.GetOpenFilename(",*.txt")
If VarType(x) = vbBoolean Then
MsgBox "cancel"
Exit Sub
End If
With ActiveSheet
'場合によっては既存データ消去の必要あり
'n = .Cells(.Rows.Count, 1).End(xlUp).Row
'If n >= 3 Then
' .Rows("3:" & n).ClearContents
'End If
With .QueryTables.Add(Connection:="TEXT;" & x, _
Destination:=.Range("A3"))
.RefreshStyle = xlOverwriteCells
.FillAdjacentFormulas = False
.AdjustColumnWidth = False
.PreserveFormatting = True
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileTabDelimiter = True
.TextFileCommaDelimiter = True
.TextFileConsecutiveDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileSpaceDelimiter = False
.Refresh BackgroundQuery:=False
.Parent.Names(.Name).Delete
.Delete
End With
End With
End Sub
既に作ってある[外部データ範囲](QueryTable)を更新するケースですね?
その場合、[データの更新]ダイアログでファイル拡張子を指定するのはちょっと面倒です。(多分)
手動操作をエミュレートするようなコードになってしまいそう。
なので、[外部データ範囲のプロパティ]で指定するところの
「更新時にファイル名を確認」オプション(TextFilePromptOnRefreshプロパティ)の設定を一時的にOffにして、
GetOpenFilenameメソッドでファイルを選択するようにしたほうが簡単そうです。
Sub test()
Dim qt As QueryTable
Dim b As Boolean
Dim x As Variant 'キャンセルに対応するためVariant型でファイル名を受ける
'"HIN"SheetのA3セルが含まれているQueryTableをSet
On Error Resume Next
Set qt = Sheets("HIN").Range("A3").QueryTable
On Error GoTo 0
'QueryTableが無ければExit
If qt Is Nothing Then
MsgBox "no QueryTable": Exit Sub
End If
'GetOpenFilenameメソッドで拡張子を指定↓
x = Application.GetOpenFilename(",*.txt")
'キャンセル時はGetOpenFilenameメソッドはvbBoolean型を返す
If VarType(x) = vbBoolean Then
MsgBox "cancel"
Else
'「更新時にファイル名を確認」オプションを一時記憶
b = qt.TextFilePromptOnRefresh
'「更新時にファイル名を確認」オプションを外す
qt.TextFilePromptOnRefresh = False
'GetOpenFilenameで得たファイル名をセット
qt.Connection = "TEXT;" & x
qt.Refresh BackgroundQuery:=False
'「更新時にファイル名を確認」オプションを戻して手動時にも対応の余地を残す
qt.TextFilePromptOnRefresh = b
End If
Sheets("Sheet1").Select
Set qt = Nothing
End Sub
でも、既に作ってあるQueryTableの更新の為に『マクロ実行スイッチを配置』するより
[外部データ範囲]範囲(A3)右クリック[データの更新]か、
コマンドボタンユーザー設定から[データ]-[データの更新]ボタンをメインメニューに配置するだけでも良さそうな気もしますが。
#確かにファイル拡張子の指定はできないですけどね。
お礼
end-u 様 アドバイス有難う御座います。 こちらの説明不足で何度もお手数取らせてしまい大変申し訳有りません。 >qt.TextFileCommaDelimiter = True の追加でうまくいく事ができました。 有難う御座いました。