Excel VBA質問箱 IV

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

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


1140 / 13645 ツリー ←次へ | 前へ→

【76082】入力フォーム 勉強中 14/9/19(金) 23:05 質問[未読]
【76083】Re:入力フォーム kanabun 14/9/20(土) 0:03 発言[未読]
【76084】Re:入力フォーム カリーニン 14/9/20(土) 0:07 発言[未読]
【76085】Re:入力フォーム カリーニン 14/9/20(土) 0:12 発言[未読]
【76089】Re:入力フォーム 勉強中 14/9/20(土) 21:08 お礼[未読]

【76082】入力フォーム
質問  勉強中  - 14/9/19(金) 23:05 -

引用なし
パスワード
   お世話になります。
はじめて利用させていただきます。
現在,下の内容を,ボタンに登録して,マクロ実行し,デスクトップ上の特定のCSVファイルデータ(「計算書」というファイル名のもの)をエクセルに取り込んでいます。

下記のままだと,マクロボタンを押して,データを取り込む前にその都度に取り込みたいデータ元となるデスクトップ上のCSVデータのファイル名を「計算書」として訂正しておかなければなりません。デスクトップ上のCSVファイルとしては「計算書1」や「収益表」と名前もついているものもあるので,それらのデータを取り込みたい際にも毎回ファイル名を「計算書」と訂正している状態です・・・。

そこで質問なのですが,下の記述を改良して,マクロボタンを押すと,入力フォームのようなものが画面上にあらわれて,そこに例えば,「計算書1」や「収益表」と手入力して,OKボタンやENTERを押せば,デスクトップ上の当該名前のCSVファイルのデータを取り込むような記述にする方法を探しています。

本,ネットなどを見て探してみましたが,よく分かりませんでした。
どなたかご教示いただければ幸いです。

どうかよろしくお願いいたします。


Sub データ取込()
  With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\Documents and Settings\Owner\デスクトップ\計算書.csv", Destination:=Range( _
    "A1"))
    .Name = "計算書"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 932
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(2, 1, 1, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
  End With
End Sub

【76083】Re:入力フォーム
発言  kanabun  - 14/9/20(土) 0:03 -

引用なし
パスワード
   ▼勉強中 さん:
> 下の記述を改良して,マクロボタンを押すと,入力フォームのようなものが画面上にあらわれて,そこに例えば,「計算書1」や「収益表」と手入力して,OKボタンやENTERを押せば,デスクトップ上の当該名前のCSVファイルのデータを取り込むような記述にする方法を探しています。
>

そのQueryTables のまえに ファイル選択ダイアログを出すようにすれば、
ご希望の動作になるかと思います。

'------------------------------------------------------- 標準モジュール
Option Explicit
Declare Function SetCurrentDirectoryA Lib "kernel32" _
   (ByVal lpPathName As String) As Long
  
Sub データ取込()
  Dim deskTop$
  Dim csvName
  
  deskTop = CreateObject("WScript.Shell").SpecialFolders("Desktop")
  SetCurrentDirectoryA deskTop
  csvName = Application.GetOpenFilename("CSV,*.csv")
  If VarType(csvName) = vbBoolean Then Exit Sub
  
  With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & csvName, Destination:=Range("A1"))
    .Name = CreateObject("Scripting.FileSystemObject"). _
        GetBaseName(csvName)

  (以下、略)

  (最後は、以下のようにするといいですよ)

    .Refresh BackgroundQuery:=False
    .Delete
  End With

【76084】Re:入力フォーム
発言  カリーニン  - 14/9/20(土) 0:07 -

引用なし
パスワード
   ダイアログで選択させる方法です。

14 . ユーザーからの入力を受け付ける
ht tp://www.big.or.jp/~seto/vbaref/vbaref14.htm

ダイアログで開くフォルダを指定する場合は↓が参考になると思います。

ファイルを開くダイアログではじめに開くフォルダを設定する
ht tp://vbaexcel.seesaa.net/article/148313379.html

なお、デスクトップは

CreateObject("WScript.Shell").SpecialFolders("Desktop")

とすれば現在のユーザーのデスクトップを指定できます。

ダイアログでファイルを選択するコードのサンプルです。

Dim WSH As Object
Dim crdr As String
Dim Ret As Variant

Set WSH = CreateObject("WScript.Shell")
'カレントディレクトリ取得
crdr = CreateObject("WScript.Shell").CurrentDirectory

'カレントディレクトリ変更/今回はデスクトップに変更
CreateObject("WScript.Shell").CurrentDirectory = CreateObject("WScript.Shell").SpecialFolders("Desktop")

'読み込むファイルをダイアログで指定
Ret = Application.GetOpenFilename("テキストファイル(*.txt),*.txt")

'キャンセルの場合
If Ret = False Then
  MsgBox "キャンセルが選択されました。"
  'カレントディレクトリを戻す
  CreateObject("WScript.Shell").CurrentDirectory = crdr
  '終了
  Exit Sub
End If

'ダイアログで選択したファイルのパス
MsgBox ret
'テキスト読み込みのコードをここに書く

'カレントディレクトリを戻す
CreateObject("WScript.Shell").CurrentDirectory = crdr

【76085】Re:入力フォーム
発言  カリーニン  - 14/9/20(土) 0:12 -

引用なし
パスワード
   kanabunさんすみません。衝突しちゃいました。

あと、私のコードはtxtを選択するようになってましたので

>Ret = Application.GetOpenFilename("テキストファイル(*.txt),*.txt")

↓のように変更しておためしください。

Ret = Application.GetOpenFilename("CSVファイル(*.csv),*.csv")

【76089】Re:入力フォーム
お礼  勉強中  - 14/9/20(土) 21:08 -

引用なし
パスワード
   皆様,ご教示ありがとうございました。
おかげさまで,なんとかなりそうです。
大変参考になりました。
ありがとうございます。

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