• ベストアンサー
  • 困ってます

VBAでファイルOPEN ダイアログを使用したいです

現在、指定したファイルを開くVBAを書いているのですが、 ↓こんなの ----------------------------------------------------------- Dim vntFileName As Variant 'ファイルを開くダイアログを開きます vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="開けゴマ" _ , MultiSelect:=False _ ) 'ファイルが選択されているときは '選択したファイルをWorkbooks.Openメソッドで開きます If vntFileName <> False Then Workbooks.Open Filename:=vntFileName End If ---------------------------------------------------------------- あらかじめ開くディレクトリを、ネットワーク上のフォルダに指定したいのですが、どこにパスを書いたらいいのか、わかりません。 教えていただけますでしょうか。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数383
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • Wendy02
  • ベストアンサー率57% (3570/6232)

こんにちは。 こんな感じになると思います。 (ほかにも方法があるとは思いますが……) Private Declare Function SetCurrentDirectory Lib "kernel32" Alias _   "SetCurrentDirectoryA" (ByVal CurrentDir As String) As Long Sub Test1() Dim vntFileName As Variant Dim myDir As String 'あらかじめはっきりしていればよいですが、場合によって、 'ここに、ネットワーク・ドライブ・チェックのコードが必要になります。 myDir = "\\public\Excel" 'ネットワークドライブ SetCurrentDirectory myDir '変更可能 'ファイルを開くダイアログを開きます vntFileName = _

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • Excelのマクロでファイルを開くのダイアログをキャンセルしたときの挙

    Excelのマクロでファイルを開くのダイアログをキャンセルしたときの挙動についてです。 マクロで次のような記述をしています。 Sub tekitou() Dim vntFileName As Variant vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="ファイルを開く" _ , MultiSelect:=False _ ) If vntFileName <> "False" Then Workbooks.Open Filename:=vntFileName End If うんたらかんたら End Sub このとき、ファイルを開くのダイアログをキャンセルしたときでも「うんたらかんたら」の部分が実行されてしまいます。 キャンセルを押したときにそこでそれ以降をスキップして何もなかったかのような挙動をさせるためにはどのような記述をすればいいのでしょうか?

  • 複数のエクセルファイルを順番に開く

    Excel2003、OS WindowsXPを使用し、Visual Basicに関する質問です。 下記マクロを作成したのですが、これですとファイルを複数選択した場合に毎回開く順番がランダムになってしまいます。これをファイル名を参照して順番に開くようにしたいのです。 因みにファイル名は **-***_AAA_日付.xls です。 *には数字が入り、AAAには漢字による名称が入ります。 例)(1)24-002、(2)24-005、(3)24-008といった3つのファイルを開くとします。現在ですと(3)→(1)→(2)のような順番で開きますが、これを(1)→(2)→(3)のようにファイル名の数字をkeyとして順番に開きたいのです。 色々と調べてみたのですが、よく分かりませんでした…。 すみませんが、ご回答の程、宜しくお願い致します。 Opf = ThisWorkbook.Path & "\注文書・請書" ChDrive ThisWorkbook.Path ChDir Opf 'ファイルを開くダイアログを開く vntFileName = _ Application.GetOpenFileName( _ FileFilter:="エクセルファイル(*.xls),*.xls" _ , FilterIndex:=1 _ , Title:="ファイル選択" _ , MultiSelect:=True _ ) 'ファイルが選択されているとき(vntFileNameが配列型)は '選択した全てのファイルをWorkbooks.Openメソッドを使い開く If IsArray(vntFileName) Then For Each vntGetFileName In vntFileName Workbooks.Open vntGetFileName Next Else Exit Sub End If

  • エクセルVBAでマスターキーを作りたい

    こんなことが可能かどうかもよくわからないのですが。。 色んなエクセルファイルやワードファイルにパスワードをかけてて 色んな組み合わせで使っているのでややこしいので マスターキー的なものを作りたいと思っています。 ファイル選択ダイアログからファイルを選択して A列の読み取りパスワード、および同じ行のC列の書き込みパスワードを 適用してファイルを開くプログラムを作りたいのです。 行2の組み合わせで開かなければ行3の組み合わせを適用。それが無理なら行4。 ファイルが開けるまで順に下の行のものを適用するものです。 初心者なので色んなサイトで見たものをツギハギしてみてるのですが、 まずパスワードが違った時にエラーで止まってしまうし、 そもそもパス付Word文書をExcelから開けるのかもわからないのですが もし可能なら、拡張子を判断してどうやってワードかエクセルの どちらかを開かせるのか、そしてどうループさせればいいのか。。 行き詰っています。ご教授いただけると嬉しいです。 何卒よろしくお願いいたします。 Dim OPFileName As Variant OPFileName = _ Application.GetOpenFilename( _ FileFilter:="すべてのファイル(*.*),*.*" & _ ",エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" & _ ",ワードファイル(*.doc),*.doc" _ , FilterIndex:=1 _ , Title:="ファイルを選択" _ , MultiSelect:=False _ ) extension = Mid(OPFileName, pointp + 1) x = 2 If OPFileName <> False Then If extension = xls Or csv Then Workbooks.Open filename:=OPFileName, password:=Cells(x, 1).Value, WriteResPassword:=Cells(x, 3).Value, IgnoreReadOnlyRecommended:=True End If End If

  • エクセルを選択して開き印刷するマクロ

     お世話になっております。 タイトル通りのマクロの作成をしているのですが、行き詰ってしまい質問させていただきました。 説明させていただきますと、、 実行し、複数のエクセルbookを選択し開くとシートを全選択し通常使うプリンタで印刷をする。というマクロなんですが、改善していきたい事がありまして、助言をいただきたく思っております。 1.複数選択して開いても印刷されるのは開いた後アクティブになっているbookのみ。これを全て開いたbook印刷にしたい。 2.現在は通常使うプリンタで印刷するようにしていますが、複数選択し開いた時に始めの1回だけプリンタの設定画面になるようにしたい。 3.開いて印刷し閉じるだけなのにリンクなどが残っており、「保存しますか?」という文章が出るときがありますが、それを聞かれないように保存せずに閉じる。と自動的に実行してくれる。 2と3は、出来ればそうなってほしいという事なので、最重要は1番です。120個のエクセルを(1つあたりの容量は少ない)印刷しなければならないので困っております。一気に120個印刷かけるわけではなく10個位を分けてマクロ実行で印刷しようと思っております。 コードを載せさせて頂きますので、「ココをこう直せば出来るよ」など簡単な事でも結構ですのでアドバイスよろしくお願いいたします。 ----------------------------------------------------------- Sub 複数のファイルを選択して開く_エクセル版() '複数のファイルを選択する例 Dim vntFileName As Variant Dim vntGetFileName As Variant 'ファイルを開くダイアログを開きます vntFileName = _ Application.GetOpenFilename( _ FileFilter:="エクセルファイル(*.xls),*.xls" & _ ",CSVファイル(*.csv),*.csv" _ , FilterIndex:=1 _ , Title:="印刷するファイルを選択" _ , MultiSelect:=True _ ) 'ファイルが選択されているとき(vntFileNameが配列型)は '選択した全てのファイルをWorkbooks.Openメソッドを使い開きます。 If IsArray(vntFileName) Then For Each vntGetFileName In vntFileName Workbooks.Open vntGetFileName Worksheets.Select 'シート全選択 Next ActiveWindow.SelectedSheets.PrintOut Copies:=1 '通常設定のプリンタで出力 End If ActiveWindow.Close 'ファイルを閉じる End Sub

  • VB2010でCSVファイルを読み、配列に入れる

    ExcelVBAで、フォルダを選択しCSVファイルを表示⇒クリックで対象ファイルを選び配列に入れる次のプログラムを作りました。その後でデータを加工しグラフィック化してるのですが、VBAのグラフィック機能が遅いのでVB2010に変えようと思いいろいろやってみたのですが、どうもうまくいきません。 どなたか、VB2010ではどのようなプログラムになるのか、教えていただけないでしょうか。 'Excel VBA---------------------------------------- Sub CSVデータ() Dim xd(1000),yd(1000) 'フォルダを選ぶ ChDir ThisWorkbook.Path 'CSVファイルの一覧 pname = _ Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv" _ , FilterIndex:=1,Title:="開く",MultiSelect:=False) '対象ファイルをクリックで選ぶ If pname <> False Then Workbooks.Open Filename:=pname End If fname = ActiveWorkbook.Name 'CsVファイルのセルから配列へ移す nstart = 6 nend = nstart +500 k = 0 For i = nstart To nend '6行目から500行の2列、3列を読み配列に入れる k = k + 1 xd(k) = Cells(i, 2) yd(k) = Cells(i, 3) Next i End Sub

  • Excel VBA:ダイアログを使ってファイル名を取得したい

    ファイルを開く際に、GetOpenFilenameを使用し、以下のように記述しています。 Dim sFName As String Dim sPath As String sPath = ThisWorkbook.Path & "\データフォルダ" ChDir sPath sFName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", MultiSelect:=False) このとき、win98ですと、指定したフォルダが表示されますが、 win2000やXPですと、Excelのカレントフォルダが表示されます。 ダイアログ表示したときに、任意のフォルダを表示させるには、どのようにしたらよいですか? ご回答よろしくお願いします。

  • Excel VBA 違うxlsファイルの指定したシートを開く処理

    Excel VBAで違うExcelファイルの指定したシートを開きたいのですが、 うまくいきません。現在のコードは、 *フォーム* Private Sub CB1_Click() Dim A As Integer A = MsgBox("データ展開する?", 4, "データ展開?") If A = 6 Then INPORT.FILE_OPEN1 End If End Sub *INPORTモジュール* Sub FILE_OPEN1()  FILE_OPEN8 End Sub Sub FILE_OPEN8() Dim fnames As String fnames = fnames1 Workbooks.Open Filename:=fnames ***ここでしょうか?.Sheet("")と指定しても出来ません*** End Sub Function fnames1() As Variant fnames1 = Application.GetOpenFilename( _ Title:="ファイルを開く", _ FILEFILTER:="エクセルファイル (*.xls), *.xls") If fnames1 = False Then MsgBox ("ファイルを開けませんでした。" & Chr$(13) & _ "もう一度やり直して下さい。") End End If End Function また、指定する事が出来たら、選択したシートを現在のブックにコピーもしたいのですが、どの様にすればよいでしょうか? よろしくお願いします。

  • 複数のCSVファイルを自動でエクセルに変換したい

    フォルダの中に、300近いCSVフォルダがあります。 ネットで探したマクロVBAでやってみたところ、一つのCSVファイルを選び、それをエクセルファイルに変換できました。 このマクロを使って、フォルダ内にあるすべてのCSVファイルを一気にエクセルに変換するには、どうしたらいいのでしょうか。 ご教授のほど、よろしくお願いいたします。 Sub CSVからXLSX() Dim varFileName As Variant varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSVファイルの選択") If varFileName = False Then Exit Sub End If Workbooks.Open Filename:=varFileName ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.Cells ActiveWorkbook.Close SaveChanges:=False End Sub

  • vbaでファイルを取り込む方法

    Sub ボタン1_Click() Dim f As String '選んだcsvファイルをSheet1に読み込む f = Application.GetOpenFilename("CSVファイル(*.csv),*.csv", 1, "読み込むcsvファイルを選んで", False) If f = "False" Then Exit Sub Workbooks.Open f Cells.Copy ThisWorkbook.Sheets("通販素材").Range("A1") ActiveWorkbook.Close False は以前とあるサイトを参考に少し手を加えたもので、フォルダからファイルを選択し新しいシートにそのファイルの情報を抽出するというものになります。 今回質問したのは、ファイルの取り込みボタンを押してユーザーフォームが出現してから商品情報が載っているcsvもしくはエクセルファイル、在庫表のcsvもしくはエクセルファイルを選択し、処理開始したらitem、在庫表というシートを作成し読み込んだイファイルの情報を抽出するというのをやってみたいのですがどのようにアレンジすればよろしいでしょうか?

  • ◆ 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 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

専門家に質問してみよう