• ベストアンサー

FileListBoxでの複数ファイル選択

KojiSの回答

  • KojiS
  • ベストアンサー率46% (145/312)
回答No.3

> ところでここで取得したファイル名を1つずつ配列変数に格納したいのですが、 > 配列変数を宣言するときにはあらかじめ選択ファイル数がわかっている必要があります。 > こういう場合は、やはりFor~Next文2回まわし(1回目で選択ファイル数取得、Redimでその数字を変数の次元に指定、2回目で配列変数に各ファイル名を格納)しかないのでしょうか? > 出来ればループ処理は少なくしたいのですが…… > これもヘルプの Redimにのっていると思うのですが、preserveという宣言方法があります。

k_o_j_i
質問者

お礼

ご教授いただきどうもありがとうございます。 Redim preserve 変数(idx) で、変数の内容を保持したまま、再定義が出来るんですね。 となると、やはり Option Base 1 Dim strFileName()  As String j = 1 For I = 0 To File1.ListCount - 1   Redim Preserve strFileName(j)   If File1.Selected(I) Then     strFileName(j) = Dir1.Path & "\" & File1.List(I)     j = j + 1   End If Next I の様にループ内部でRedim Preserveを使うのが良さそうですね。

関連するQ&A

  • リストボックスからの複数選択

    初心者です。 ListBoxで複数の項目を選択することは可能でしょうか? ListBoxのプロパティ MultiSelect を 標準or拡張 にすると 複数選択できることは分かりましたが、選択(強調表示)した 値のみを取得するにはどうしたらよいのでしょうか?

  • ファイルを複数選択できない

    Windowsのエクスプローラなどでファイルを複数選択するときに Ctrlを押しながらファイルをクリックすると、複数選択できたのですが、最近Ctrlを押しながらの複数選択ができなくなりました。 ホームページなどを作ったりもしているので、とても不便です。 どなたか、解決策を教えてください。

  • ◆ GetOpenFilename()で複数ファイル選択ができない、I

    ◆ GetOpenFilename()で複数ファイル選択ができない、IsArray()でNG。。。   複数選択のやり方をOKWaveで見つけ便利に活用させて頂いていたのですが、  今年になって、機能しなくなり困っています。手が出ない状況です。  ご教示、よろしくお願いします。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 概要:Debugでみると、IsArray()の結果がfalse(GetOpenFilename不成功)  使用環境:  Microsoft EXCEL 2002 (10.6856.6853)SP3  Microsoft Visual Basic 6.0  Microsoft Windows XP Professional version 2002 Service Pack 3 不具合の発生箇所: 取込元ファイル = Application.GetOpenFilename(FileFilter:="Excelブック(*.xls),E*.xls", _ Title:="取込元の4ファイルを選択。Ctrlキーを押しながら複数選択。", MultiSelect:=True) If IsArray(取込元ファイル) Then ' 読む込み成功の確認、IsArray関数 <問題のマクロ> Sub メイン() ' ------------------------------------------------------------------- ' -  取込元のファイルを選択してオープン  ' ------------------------------------------------------------------- Dim 取込元ファイル, Work1, Work3 As Variant Dim i As Integer 取込元ファイル = Application.GetOpenFilename(FileFilter:="Excelブック(*.xls),E*.xls", _ Title:="取込元の4ファイルを選択。Ctrlキーを押しながら複数選択。", MultiSelect:=True) If IsArray(取込元ファイル) Then ' 読む込み成功の確認、IsArray関数 For i = 1 To UBound(取込元ファイル) '配列の上限UBound(データの件数 4件) Workbooks.Open 取込元ファイル(i)   'ファイルオープン Work1 = Dir(取込元ファイル(i)) WORK3 = WORK3 & Work1 & vbCrLf 'MSG表示用(取込んだファイル名一覧)   MsgBox "選択したファイルは " & vbCrLf & WORK3 & " ", vbInformation Next i Else MsgBox "取込元ファイルのオープンを" & vbCrLf & "中止しました", vbExclamation End If End Sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

  • ファイルの複数選択

    ファイルを複数範囲指定して削除をしたいです。 CtrlやShiftまたはドラッグ使って複数範囲選択できるはずなのですが なぜかフォルダ内だとできません。デスクトップ上ではCtrlやShiftを使って複数選択できるのにフォルダ内だとできないといった状況です。

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

    ダイアログボックスで複数フォルダの複数ファイルの選択がうまくいきません。 単一フォルダ内からの複数ファイルの選択は機能しているのですが、ダイアログボックスで他のフォルダを選択して他のファイルを選択すると最終的に選択したファイルのみが残り、先に選択した分が累積されません。  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, "選択したファイルは "

  • [Delphi]タブコントロールでタブを複数選択したい

    Delphi7/WindowsXPです。 TTabControlで、デザインがタブ形式(Style=tsTabs)で、タブ複数選択可能(MultiSelect=True)を有効にする方法はありますでしょうか? 各タブにはグループ別に分けられたデータリストがListViewで表示されているプログラムで、複数のグループの選択指定を取得したいのですが、TabControlのMultiSelectプロパティは、Styleが"tsButtons"か"tsFlatButtons"のときしか有効にならないようです。 タブ形式で複数選択ができれば、TTabControlコンポーネントにはこだわりません。 どなたかご存知の方がいらっしゃれば、アドバイスをお願いいたします。

  • Ctrlキーで画像ファイルを複数選択するには?

    Ctrlキーで画像ファイルを複数選択するには? Ctrlキーで画像ファイルを複数選択しようとすると、一定の数以上選択を続けると自動的にコピーファイルが作られてしまいます。 どういう設定をしたら治りますか? 今、削除や移動などを面倒でも1個1個やっています。複数選択だと何度やり直してもいくらでもコピーが作成されてしまいどんどんゴミ箱移しが大変になっています(泣)。

  • 【VBA】【複数ファイル選択】困っています。

    23歳OLです。 会社でマクロを組みたいと思うのですが、 どうしてもエラーがでて困っています。 ご教示よろしくお願いします。 =========質問============= ▼やりたいこと。 ・複数ファイルを選択(いろんな種類のファイルを取り込みたいです。主にテキストとログとvファイルです) ・取り込んだデータを任意のシートの列に置きたいです。 (たとえば、シート1のA列に最初に~~~って名前がついているファイル。のように。) ・新しいシートを作りたくないです。 (あくまで任意のファイルにペーストする形です。) ・複数ファイルを選択→最初のファイルを開く→ファイルの中身を任意のシートの任意の列に最後までペーストする→ファイルを閉じて次のファイルにという形です。 現在こんな形で出来上がっています。 Sub ReadMultiCSVFiles() ' [[ 変数定義 ]] Dim varFileName As Variant Dim CSVWorkSheet As Worksheet Dim NewWorkSheet As Worksheet Dim SheetName As String ' [[ ファイルパスからファイル名を取得 ]] SheetName = Dir(Filename) ' [[ ファイル名で新しいシート作成 ]] Set NewWorkSheet = CreateWorkSheet(SheetName) ' [[ 複数ファイルパス名を取得 ]] varFileName = Application.GetOpenFilename(FileFilter:="(*.*),*.*", _ Title:="CSVファイルの選択", MultiSelect:=True) ' [[ ファイルパス取得できなかったら ]] If IsArray(varFileName) = False Then Exit Sub End If ' [[ ファイルパス取得できたら ]] For Each Filename In varFileName ' [[ CSVファイルを開く ]] Dim buf As String, n As Long Open varFileName For Input As #1 【ここにエラーが出ます。型が違うと出ます】 Do Until EOF(1) Line Input #1, buf n = n + 1 Cells(n, 1) = buf Loop ' [[ CSVファイルを閉じる(保存無し) ]] ActiveWorkbook.Close SaveChanges:=False Next End Sub ' [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ' [[ ]] ' [[ ワークシート名を指定したワークシートの作成 ]] ' [[ ]] ' [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] Function CreateWorkSheet(WorkSheetName As String) As Worksheet ' 変数定義 Dim NewWorkSheet As Worksheet Dim iCheckSameName As Integer ' ワークシートの作成 ' ※一番最後に挿入 Set NewWorkSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count)) ' 同じ名前ワークシートが無いか確認 iCheckSameName = 0 For Each WS In Sheets If WS.Name = WorkSheetName Then MsgBox "ワークシート名:" + WorkSheetName + " この名前は既に使われています。" iCheckSameName = 1 End If Next '同じ名前のワークシートがなければ If iCheckSameName = 0 Then NewWorkSheet.Name = WorkSheetName Set CreateWorkSheet = NewWorkSheet End If End Function =============================== ※いろんなサイトから切り貼りして試行錯誤してみています。 お力をいただけると嬉しいです。

  • フォルダ内の複数ファイル同時選択について

    ファイルの移動、コピーや削除をする際に「Ctrl」+左クリックで複数のファイルを選択していましたが何かの拍子で設定を変えてしまったみたいで同時に複数のファイルを選択できなくなってしまいました。 フォルダオプション等をいじってでいろいろ試してみましたがどうにもなりません。 設定の直し方御存知の方、ご教授願います

  • ファイルを複数選択した時のファイルの順番

    VB.NetでOpenFileDialogコントロールを使ってファイルを複数選択できるようにしました。 私が欲しいのは、このファイルを選択した順番をどうやって取得すればよいのか悩んでいます。 選択したファイル群はOpenFileDialogのFileNamesコレクションにファイル名が格納されています。 しかし、FileNamesコレクションはファイルを選択した順番に並んでいません。 色々なパターンを試してみましたがこの順番の規則性がわかりません。 規則性がわかればファイルを選択した順番がわかると思うのですが、なにかいい方法はないでしょうか? 【環境】Visual Basic 2008 Express Edition & Windows XP