ダイアログボックスでファイルを複数選択して、読み込んだ内容をテキストボックスに表示させたいのですが、複数でやるとどうもうまくいきません・・・。
どういうふうにコードを記述すればよいのでしょうか?
よろしくお願いします。

このQ&Aに関連する最新のQ&A

複数」に関するQ&A: 複数形と所有格の違い

A 回答 (4件)

複数選択ダイアログ属性にしたときは、


※ファイルを1つ選択したとき
  複数選択属性を持たないダイアログと同様に扱えます。
※ファイルを複数選択したとき
  vbNullChar区切りで パス/ファイル名1/ファイル名2/ファイル名3・・・・
  といったように値が返されます。

サンプルは環境を書いてなかったので、VB6用です。
Splitが使えないバージョンのVBであれば、参考URLを元に読み替えてください。

  Dim i    As Long
  Dim valWork As Variant
  Dim strPath As String

  ' CancelError プロパティを真 (True) に設定します。
  CommonDialog1.CancelError = True
  On Error GoTo ErrHandler
  ' Flags プロパティを設定します。
  CommonDialog1.Flags = cdlOFNHideReadOnly Or cdlOFNAllowMultiselect Or cdlOFNExplorer
  ' リスト ボックスに表示されるフィルタを設定します。
  CommonDialog1.Filter = "すべてのファイル (*.*)|*.*|" & _
  "テキスト ファイル (*.txt)|*.txt|" & _
  "バッチ ファイル (*.bat)|*.bat"
  ' "テキスト ファイル" を既定のフィルタとして指定します。
  CommonDialog1.FilterIndex = 2
  ' [ファイルを開く] ダイアログ ボックスを表示します。
  CommonDialog1.ShowOpen
  
  valWork = Split(CommonDialog1.FileName, vbNullChar)
  If UBound(valWork) = 0 Then
    Debug.Print valWork(0)
  Else
    strPath = valWork(0)
    If Not (Right(strPath, 1) = "\") Then strPath = strPath & "\"
    For i = LBound(valWork) + 1 To UBound(valWork)
      Debug.Print strPath & valWork(i)
    Next i
  End If
  
  Exit Sub
  
ErrHandler:
  ' ユーザーが [キャンセル] をクリックしました。
  Exit Sub

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=221365
    • good
    • 0
この回答へのお礼

ばっちりできました!!
ありがとうございました!

お礼日時:2002/02/24 13:53

No.1の人の言うように、CommonDialogって複数選択出来るんですね。

知らなかった・・・
というわけで、私の回答は無視して下さい。
では。
    • good
    • 0
この回答へのお礼

いえいえ、
ありがとうございます。

お礼日時:2002/02/24 13:52

ダイアログボックスってコモンダイアログですよね?


ファイルの名前が取れているのであれば、
1つ目のファイルをOpen→処理→Close
2つ目の…
とやるのでは駄目なのでしょうか?
もし、同時に開きたいのであれば、
intFileNo = FreeFile
で、使用可能なファイル番号が取得できますので

intFileNo = FreeFile
Open path For mode As intFileNo




という感じでファイルを開けていけば、同時に複数ふぃ有るを扱う事が出来ますよ。
    • good
    • 0
この回答へのお礼

どうもありがとうございました~!

お礼日時:2002/02/24 13:52

こんにちは。

maruru01です。
ダイアログボックスって、CommonDialogですか?
それは出来ないんじゃないでしょうか(私には方法が思いつきません)。
ご自分で、選択用ダイアログを作ってそれを表示させるということでしょうか?
またテキストボックスに複数で表示させるというのは、どういうことでしょうか?
1つのテキストボックスに、複数のファイルの内容を表示させるということでしょうか?それなら、文章をつなげるだけですが。
何をやろうとして、どういう風にうまくいかないのかを、もう少し詳しく説明していただけないでしょうか。
ちなみに蛇足ですが、このカテゴリーなので、VBなのでしょうが、バージョンとかOSとかを書いておくといいと思いますよ、こういうコンピュータ関係の質問は。
では。
    • good
    • 0
この回答へのお礼

ちなみにVB6のWin2000です。
ありがとうございます!

お礼日時:2002/02/24 13:53

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルのフリーズ

ノートパソコンでエクセル2003を使用しているとしょっちゅう画面がフリーズしてしまいます。
フリーズ時間は最大で5秒間程で、頻度は5秒~15秒くらいに一回とかなり頻繁です。(普通のA4サイズの書類を作るのに1時間ほど掛かります)
状態としてはフリーズ中はカーソルも止まってしまい、でもその間に入力した文字等は記憶しているらしく、フリーズが解けた瞬間一気に打ち出されるような感じです。
エクセル以外は何の問題もなく、またそのエクセルのファイルを同ネットワーク上にある他のパソコンで操作しても何の問題もないので、自分のパソコンの中のエクセル本体が壊れているかのような状態です。
どなたか助けていただけないでしょうか?
ちなみにこの現象は突然起きるようになりました。

Aベストアンサー

ソフトの不具合が原因です。再インストールをお勧めします。

Qテキストボックスに書いた複数行のテキストデ-タをコマンドボタンクリック

テキストボックスに作成したデ-タをコピ-ボタンでコピ-して、OutlookExpress
などのメ-ラ-に貼り付けるようなコ-ドを書いていますが、コピ-が上手くいかない
ことが多いので、下のような方法に変えようと思います。

 (1)テキストデ-タを作成(記入)する

 (2)コマンドボタンをクリックする

 (3)自動でメモ帳が起動する

 (4)メモ帳の内容に先ほどのテキストデ-タが貼り付く
    (テキストボックスの内容をメモ帳で開く)

このようにする方法はあるのでしょうか?
shellでメモ帳を開くというのは分かるのですが、対象のファイルを
どのように指定すれば良いのかが分かりません。

よろしくお願いいたします!!!

Aベストアンサー

こんにちは。maruru01です。
違う方法を。

いったん一時ファイルとして保存し、Shellでメモ帳で呼び出します。

memoPath = (メモ帳の起動ファイルのフルパス)
FilePath = (一時ファイルのフルパス)
fileNum = FreeFile
Open FilePath For Output As #fileNum
  Print #fileNum, Text1.Text
Close #fileNum

Shell memoPath & " " & FilePath

では。

Qエクセルで画像を貼り付けるとフリーズしてしまう。

エクセルに画像を貼り付けるとパソコンがフリーズしてしまいます。何故でしょうか?解決方法を教えてください。

OSは、Windows2000です。
エクセルのバージョンは、2003。

Aベストアンサー

Win2000で198MBはちとキツイかな?
エクセルのバージョンが2003というのは、Office2003を入れていると思うのですが、他にアンチウィルス系も動いているのでしょうから、256MBは欲しいですね。

最近似たような質問があって、直接貼り付けるよりも問題のjpegをファイル保存しておき、エクセルの[挿入]→[オブジェクト]で実施したらどうかという回答があったばかりです。このときはワードでしたが、エクセルでもお試しみてはどうですか。

Qダイアログボックスで複数フォルダの複数ファイルの選択

ダイアログボックスで複数フォルダの複数ファイルの選択がうまくいきません。
単一フォルダ内からの複数ファイルの選択は機能しているのですが、ダイアログボックスで他のフォルダを選択して他のファイルを選択すると最終的に選択したファイルのみが残り、先に選択した分が累積されません。  OpenFileNameが上書きされるのが原因な気がするのですが配列への累積処理が解りません。
その後の処理で選択したファイルを全て開いて加工したいので、累積させる方法を知りたいのです。下記コードはLoop処理で行おうとして累積が解らないままのものです。
一度のダイアログ表示で複数フォルダの複数ファイルを選択出来る方法があればそれでもかまいません。どなたか助けては頂けないでしょうか。お願いします。

'**明細の選択(複数同時)**
Do
BN = Application.InputBox("対象明細書の年月を入力してください。1桁の月は02月のように入力)", , Default:="2009.04", Type:=2)
If BN = False Then '入力なければ
GoTo OWARI
End If
WorkPath = ThisWorkbook.Path & "\明細書一覧" & BN & "月"
ChDrive WorkPath
ChDir WorkPath

OpenFileName = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*.xls", _
Title:="対象の明細書を選んで下さい。Ctrlキーを押しながら複数ファイルを同時に選択出来ます。", MultiSelect:=True)

Rtn = MsgBox("他にも対象ファイルがありますか?", vbYesNo, "選択")
If Rtn = vbNo Then
Exit Do
End If
Loop

Mypath = ThisWorkbook.Path
MyFile = "\請求制御.xls" 'ここにファイル名記入
If IsArray(OpenFileName) Then
For i = 1 To UBound(OpenFileName)
If OpenFileName(i) = Mypath & MyFile Then
MsgBox "同じファイルが含まれてます。", vbInformation, "同じファイルは選択出来ません"
GoTo OWARI
End If
tmp = tmp & Dir(OpenFileName(i)) & vbCrLf
Next
MsgBox vbCrLf & tmp & vbCrLf & "の全" & i - 1 & "枚です" & vbCrLf & "これらでよろしいですか? ", vbInformation, "選択したファイルは "

ダイアログボックスで複数フォルダの複数ファイルの選択がうまくいきません。
単一フォルダ内からの複数ファイルの選択は機能しているのですが、ダイアログボックスで他のフォルダを選択して他のファイルを選択すると最終的に選択したファイルのみが残り、先に選択した分が累積されません。  OpenFileNameが上書きされるのが原因な気がするのですが配列への累積処理が解りません。
その後の処理で選択したファイルを全て開いて加工したいので、累積させる方法を知りたいのです。下記コードはLoop処理で行おう...続きを読む

Aベストアンサー

方法はいくつかあるでしょうが、Collectionを使ったサンプル。
但し、質問者提示のコードは動作しているものとする。


'=====================
'●●●変数宣言
  Dim myGetFiles As New Collection
  Dim mySelectFile
'---------------------

Do
BN = Application.InputBox("対象明細書の年月を入力してください。1桁の月は02月のように入力)", , Default:="2009.04", Type:=2)
If BN = False Then '入力なければ
GoTo Owari
End If
WorkPath = ThisWorkbook.Path & "\明細書一覧" & BN & "月"
ChDrive WorkPath
ChDir WorkPath

'--------------------------------------
'●変数を、mySelectFile に変更

mySelectFile = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*.xls", _
Title:="対象の明細書を選んで下さい。Ctrlキーを押しながら複数ファイルを同時に選択出来ます。", MultiSelect:=True)

'●●●選択ファイルをCollectionに登録

 If IsArray(mySelectFile) Then
   myGetFiles.Add mySelectFile
 End If
'-------------------------------------


Rtn = MsgBox("他にも対象ファイルがありますか?", vbYesNo, "選択")
If Rtn = vbNo Then
Exit Do
End If
Loop


'●●●Collectionの展開
'-----------------------------

 If myGetFiles.Count = 0 Then
   MsgBox "ファイルがひとつも選択されていないよ!"
   GoTo Owari '●ここは適宜修正のこと
 End If


Mypath = ThisWorkbook.Path
MyFile = "\請求制御.xls" 'ここにファイル名記入

'●下記のように展開する-------

 For Each OpenFIleName In myGetFiles
   For i = UBound(OpenFIleName) To UBound(OpenFIleName)
     If OpenFIleName(i) = Mypath & MyFile Then

   ・・・・・以下省略・・・・・・

==========================

なお、質問提示のコードにあった
>If IsArray(OpenFileName) Then
これはここでは不要、Collectionに登録するときチェック済
 
 

方法はいくつかあるでしょうが、Collectionを使ったサンプル。
但し、質問者提示のコードは動作しているものとする。


'=====================
'●●●変数宣言
  Dim myGetFiles As New Collection
  Dim mySelectFile
'---------------------

Do
BN = Application.InputBox("対象明細書の年月を入力してください。1桁の月は02月のように入力)", , Default:="2009.04", Type:=2)
If BN = False Then '入力なければ
GoTo Owari
End If
WorkPath = ThisWorkbook.Path & "\...続きを読む

Qエクセルがフリーズ

エクセルで通常の使い方をしているのに、突然マウスポインターがフリーズします
何回もあります。何が原因でしょうか?パソコンはNECのノートです。

Aベストアンサー

¥Windows¥TempフォルダにEXCEL使用に
テンポラリファイルが作成されてれば、
これを削除すると改善されるかも?

むやみに消すとまずいこともありますのでくれぐれも慎重に。

Qコンボボックスとテキストボックスをセルへ

コンボボックスのデータを行へ表示されるよう下記の通りやりました。
続けてテキストボックスを指定した同じ行のセルへ入力されるように
したいのですが、いろいろ調べたのですが、解決できず
ここで助言いただけたらと思います。
また
textbox1はA列
textbox2はB列
textbox3はM列
へとコンボボックスのデータを挟む形での入力となります。
ちなみにテキストボックスのプロジェクト名は変更してあります。

Private Sub CommandButton1_Click()
Dim lrow As Long, i As Long
With Worksheets("製品化")
lrow = .Range("F" & Rows.Count).End(xlUp).Row
For i = 0 To 6
   .Cells(lrow + 1, i + 6).Value = itemname.List(listno, i)
Next i
End With
End Sub

コンボボックスのデータを行へ表示されるよう下記の通りやりました。
続けてテキストボックスを指定した同じ行のセルへ入力されるように
したいのですが、いろいろ調べたのですが、解決できず
ここで助言いただけたらと思います。
また
textbox1はA列
textbox2はB列
textbox3はM列
へとコンボボックスのデータを挟む形での入力となります。
ちなみにテキストボックスのプロジェクト名は変更してあります。

Private Sub CommandButton1_Click()
Dim lrow As Long, i As Long
With Worksheets("製...続きを読む

Aベストアンサー

>Next i
.Cells(lrow + 1 , "A").Value = textbox1.text
.Cells(lrow + 1 , "B").Value = textbox2.text
.Cells(lrow + 1 , "M").Value = textbox3.text
>End With

と言う感じの事?

Qエクセルのフリーズとタスクマネージャーの無反応

エクセル使用時たびたびフリーズするので困っています。(多い時は1時間で3回)
質問集で同じような症状が無いか探したのですが、見つからないので質問いたします。

エクセル使用時、リボンやシート見出し、をクリックすると画面の半分が白くなりフリーズすることがあります。
「Alt] 「Ctrl] 「Delete」 を押しても無反応なので、強制終了をします。
再立ち上げ時、セーフモードを選択しても途中で停止してしまうので、通常モードで立ち上げています。(何も無い時はセーフモードで立ち上げることができます。)

1)フリーズの原因と対処法
2)「Alt] 「Ctrl] 「Delete」を押しても反応しない原因と対処法
3)そのあとの再起動時にセーフモードが途中で停止してしまう原因と対処法
分かる方がおられましたら、お教え下さい。

OSはwindows7、office2007
エクセルのサイズは33KBから188KBです。

初めて質問しますので抜けているところがあれば追加します。
よろしくお願いします。

Aベストアンサー

そうですね。。
エクセルの再インストールは、やってみましたか?

QVB2008 コンボボックスとテキストボックスの連動について

VBを使って顧客の検索などに使用するプログラムを作りたいと思っています。

項目1-1,項目1-2,項目1-3,項目1-4,項目1-5
項目2-1,項目2-2,項目2-3,項目2-4,項目2-5
項目3-1,項目3-2,項目3-3,項目3-4,項目3-5
上記のデータ名 TextFile1.txt

Dim fn As String = "C:\TextFile1.txt"
Dim dline() As String
Dim d() As String
Dim ad As ArrayList = New ArrayList()
Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default)
dline = Split(read.ReadToEnd, vbCrLf)

For i As Integer = LBound(dline) To UBound(dline)
d = Split(dline(i), ",")
ad.Add(d(0))
Next
ComboBox1.DataSource = ad
ComboBox1.text="顧客名"

以上が現在の状況です。
comboに項目1-1,2-1,3-1とセットされていますが、マウスのスクロールボタンを動かすと、項目1-1が最初に表示されず2-1が表示されます。通常にクリックして選択すると問題は無いのですが、出来ればマウスのスクロールボタンも使いたいと思いますが解決方法はあるのでしょうか。
もう1件お伺いしたいのですが、上記テキストファイルからデータを読込、項目1-2,1-3,1-4,1-5、項目2-2・・・、項目3-2・・・と、項目毎にコンボボックスと連動させて各テキストボックス1、2、3、4に表示させたいのですが、上手くいきません。長文で解りにくい点があるかと思いますが、よろしくお願い致します。

VBを使って顧客の検索などに使用するプログラムを作りたいと思っています。

項目1-1,項目1-2,項目1-3,項目1-4,項目1-5
項目2-1,項目2-2,項目2-3,項目2-4,項目2-5
項目3-1,項目3-2,項目3-3,項目3-4,項目3-5
上記のデータ名 TextFile1.txt

Dim fn As String = "C:\TextFile1.txt"
Dim dline() As String
Dim d() As String
Dim ad As ArrayList = New ArrayList()
Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default)
dline = Spl...続きを読む

Aベストアンサー

コンボボックスの中身が以下のようになっているのであれば、あとはNo2さんの提示してくれたやり方でできるのではないでしょうか?

ComboBox1
[0]:ササキ
[1]:スズキ
[2]:サトウ
[3]:ハヤシ

ComboBox2
[0]:北海道
[1]:福岡県
[2]:愛知県
[3]:北海道

ComboBox3
[0]:札幌市
[1]:福岡市
[2]:名古屋市
[3]:旭川市

このようになっていないのであれば・・・

0.変数を定義(必要になったらそのつど定義でも問題ないです)
・1行読み込みsplitした結果を入れる配列→srcAry
・↑の結果の[0]の内容を入れるList→nameList
・↑の結果の[1]の内容を入れるList→adr1List
・↑の結果の[2]の内容を入れるList→adr2List
1.テキストファイルから1行読み込む
2.読み込んだ内容をカンマでsplitし、srcAryに格納
3.各リストに追加していく。nameList.add(srcAry(0))、adr1List.add(srcAry(1))、adr2List.add(srcAry(2))
4.1~3をテキストファイルの行数くりかえす。
5.ComboBox1にnameList、ComboBox2にadr1List、ComboBox2にadr2Listを設定する。

各コンボボックスが変更された場合の動作についてはNo2さんのソースを参考にしてください。

コンボボックスの中身が以下のようになっているのであれば、あとはNo2さんの提示してくれたやり方でできるのではないでしょうか?

ComboBox1
[0]:ササキ
[1]:スズキ
[2]:サトウ
[3]:ハヤシ

ComboBox2
[0]:北海道
[1]:福岡県
[2]:愛知県
[3]:北海道

ComboBox3
[0]:札幌市
[1]:福岡市
[2]:名古屋市
[3]:旭川市

このようになっていないのであれば・・・

0.変数を定義(必要になったらそのつど定義でも問題ないです)
・1行読み込みsplitした結果を入れる配列→srcAry
・↑の結果の[0]の内容...続きを読む

Qエクセルのカメラの使用時のフリーズ

こんばんは。以前、エクセル2000の不具合という内容でノートPCの欄に質問させていただきましたものですが、明確な原因がわかりましたので再度質問させていただきます。
これは会社のノートパソコン(WIN2K)でエクセル使用時にツールバーにある「カメラ」機能を使うとにフリーズしたり、数字等を入力してエンターキーを押すと12~30秒くらい時間が固まってしまう状況に陥ってしまうため困っています。
カメラで指定範囲を選択して、別の場所に貼り付けるのであくまで画像データとして取り扱われる関係でデータ量が多くなってしまうとは考えられますが、100KBほどのデータでもフリーズ状況に陥ってしまいます。
ちなみに、フリーズ状態の時のCPU使用率はずっと100%となっています。メモリーは256MBで余裕のある環境にあります。このカメラで貼り付けたデータを削除するとスムースに動く様になります。またカメラで貼り付けたエクセルファイルを開いたまま、別のカメラを使用していないエクセルファイルを使用しても、影響が及んでしまいます。
しかし、同じカメラ機能を使ったエクセルファイルを別のパソコンで開くと多少時間はかかりますが、5秒もかからないくらいで動きます。何かカメラの設定などが悪いのでしょうか?エクセルの再インストールと*.xlbファイルの削除は実行しました。長々となってしまいましたが、よろしくお願いします。

こんばんは。以前、エクセル2000の不具合という内容でノートPCの欄に質問させていただきましたものですが、明確な原因がわかりましたので再度質問させていただきます。
これは会社のノートパソコン(WIN2K)でエクセル使用時にツールバーにある「カメラ」機能を使うとにフリーズしたり、数字等を入力してエンターキーを押すと12~30秒くらい時間が固まってしまう状況に陥ってしまうため困っています。
カメラで指定範囲を選択して、別の場所に貼り付けるのであくまで画像データとして取り扱われる関係でデータ量...続きを読む

Aベストアンサー

私は、[カメラ]機能を比較的多用するので、どんな回答が付くか静観していましたが…

「メモリーは256MB」が「余裕のある環境」かどうかは分かりませんが、仰っているような現象を経験したことがありません(昔に Win2000、Excel2000 を使っていたことがありましたが、メモリサイズがどうだったかは忘れました)。
ところで、「100KBほどのデータでもフリーズ状況に陥ってしまいます」とのことですが、この「100KBほどのデータ」というのはどうやって分かったのですか?

Qテキストボックスからコンボボックスへ自動入力したい

AccessVBA初心者です。
Access2003を使用しています。

formAフォーム上の非連結textBテキストボックスに英字を入力
して、exe実行ボタンをクリックしたら、Cテーブルに連結した
cmbCコンボボックスに該当文字列を表示したいです。
Private Sub exe_Click()
If Me.textB.Value = "A" Then
Me.cmbC.Value = 1
Else
Me.cmbC.Value = 2
End If
End Sub

実行ボタンをクリックしても、コンボボックスの内容は変わり
ません。
if文にブレークポイントを設定してステップインで一行ずつ実
行するとコンボボックスに数字にあった文字列が表示できます。
うまく表示できるように、よろしくお願い致します。

Aベストアンサー

・・・
End If
me.refresh
End Sub

とか。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング