Access VBAでの有効なパスチェック

このQ&Aのポイント
  • Access VBAで画面入力されたパスが有効かチェックする方法について
  • Dir関数ではパスが有効と判定されるが、DoCmd.TransferSpreadsheetでエラーが発生する
  • 特定のエラーコードに対して例外処理を行い、フォルダチェックで弾く方法を探している
回答を見る
  • ベストアンサー

Access VBA での有効なパスチェック

Access VBA での有効なパスチェック お世話になっております。 Access2002 VBAで、画面入力されたパスが有効なら、 そこにテーブルの内容をExcel出力する。といったことをしているのですが、 画面入力されたパスが、 たとえば「C:\\\\\\tmp\\\\\\\」などと入力された場合、 フォルダチェックに用いているDir関数ではOKなのですが、 Excel出力するDoCmd.TransferSpreadsheetでエラーとなってしまいます。 ここでのエラーが、実行時エラー:2220なので、例外処理で拾っているのですが、 フォルダチェックの段階で、はじくよい方法はあるでしょうか? 例文です> str_tmpPath = txt_Path.Value  'ここで「C:\\\\\\tmp\\\\\\\」と入力されたとする '有効なパスかチェックする If Dir(str_tmpPath, vbDirectory) = "" Then  '上記のパスで通ってしまう。戻り値は"."   MsgBox "入力しなおして"   End End If str_SavePath = str_tmpPath & "ファイル名" 'Excel出力 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, テーブル名, str_SavePath, True  'ここで実行時エラー:2220が発生 以上、よろしくお願いいたします。

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

  • ベストアンサー
回答No.1

FileSystemObjectのFolderExistsメソッドを使用すればうまくいくようです。 FileSystemObjectで検索してみてください。

2time4date
質問者

お礼

回答が遅くなり、申し訳ありません。 結局、以下のように試してみましたがダメでした。 Private Sub コマンド271_Click()   Dim str_Path As String 'パス   Dim fFso As Object 'ファイルシステムオブジェクト   str_Path = txt_Path.Value   'フォルダの存在確認   Set fFso = CreateObject("Scripting.FileSystemObject")   If (fFso.FolderExists(str_Path) = False) Then     MsgBox "無効なパス"   End If   Set fFso = Nothing End Sub 正常な記述じゃないと、認識しませんでした。

関連するQ&A

  • Access VBA Excel エクスポート

    Access VBAにてExcel エクスポートの処理を記述しました。 現在の記述だと、出力対象のテーブル(クエリ)ごとに1つのファイルとなっており、ファイルの管理が大変なため、1つのExcelファイルで、複数シートに出力したいのですが、どこを修正すればよろしいでしょうか? ’出力対象のクエリ名が入っている配列の要素数(出力対象のクエリ数)を取得する j = UBound(QName) ’出力するクエリの分だけ繰り返す For i = 0 To j   ’同じファイル名のExcelファイルが見つかった場合 If Dir(Path & EName(i)) <> "" Then 'データ更新のため、見つかったファイルを削除する Kill Path & EName(i) End If   ’出力対象のクエリにデータ(レコード)が存在する場合 If Count(i) > 0 Then 'Excelファイルを再度作成する   ’Qname(i)が出力するクエリ名、Pathが出力先のパス、Ename(i)が出力ファイル名です。 DoCmd.TransferSpreadsheet acExport, 10, QName(i), Path & EName(i), True, "" End If End If Next

  • Access2000のモジュールで

    テーブル1にある処理をした後、そのテーブルを開いて内容を確認し、OKならエクセルにエクセルにエクスポートという処理を記述したいのですが、   ・   ・ DoCmd.OpenTable "テーブル1" If MsgBox("出力してよろしいですか。", vbYesNo, "確認") = vbYes Then DoCmd.TransferSpreadsheet acExport, , "テーブル1", "C\テーブル1.xls", True とすると、テーブルを開いてすぐにメッセージボックスが手前に表示されるので、テーブルをスクロールすることができません。 Docmd・・・とif MsgBoxの間にどんな記述を入れれば、できるようになりますか? それとも、もっとスマートなやり方があるのでしょうか? 教えてください。お願いします。

  • ACCESS-VBAでEXCEL出力

    ACCESS-VBAで外部accdb内のテーブルデータをEXCEL出力するにはどうしたらできるのでしょうか? 現在、以下の方法で内部のテーブルデータをEXCEL内の名前に紐づけてエクスポートしています。 DoCmd.TransferSpreadsheet acExport, , "データ", "test.xlsx", True

  • エクセルVBA アクセスにインポート

    エクセルのデータ(列数、行タイトルは都度かわる)をアクセスにインポートしテーブルを作成したいと思っています。 VBAでこの処理をおこないたく、下記のコードで実行したのですがデバッグがはしってしまいます。 (DとEでデバッグ) 原因がお分かりになる方がおりましたら、教えていただけますでしょうか? 何卒、よろしくお願い申し上げます。 Function ExcelDataImport() 'On Error GoTo エラー Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String varac = "T_TESTTABLE" ' --- A varxls = "C:\Users\AC\Desktop\ACTEST\RAWDATA.xlsx" ' ---B strrange = "TEST_RAWDATA" ' --- C strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & _ "へ、データ入力を行います。" & Chr(13) & _ "Excelファイルの入力レンジは、 " & strrange & " です。" DoCmd.DeleteObject acTable, varac ' --- D If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange ' -- E MsgBox "データ入力は、正常に完了しました。" End If Exit Function エラー: MsgBox "予期せぬエラーが発生しました。" & Chr(13) & _ "エラー番号:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbCritical Exit Function End Function

  • Access VBAについて教えて下さい。

    Access VBAについて教えて下さい。 <内容> 選択ボタンを押下するとファイル選択のダイアログ画面が表示されます。 そこから複数ファイルを選択してテキストボックスに選択したファイルを取得します。 実行ボタンを押下するとテキストボックスで取得したファイルを同じテーブルにインポートします。 ※テキストボックスの名前 = FileList <VBA> Private Sub 選択_Click() With Application.FileDialog(msoFileDialogFilePicker) .Filters.Clear .Title = "ファイル選択" .Filters.Add "すべてのファイル", "*.*" .Filters.Add "テキストファイル", "*.txt" .Filters.Add "TSVファイル", "*.tsv" .Filters.Add "EXCELファイル", "*.xls" .AllowMultiSelect = True .InitialFileName = CurrentProject.Path If .Show = -1 Then Me.FileList = .SelectedItems(1) 'ユーザーが [キャンセル] をクリックした場合 Else End If End With End Sub Private Sub 実行_Click() 'テーブル削除 On Error GoTo エラー Dim mySQL As String Dim strName As String Dim strmsg As String Set Db = CurrentDb strName = "テスト" strmsg = "" & strName & "テーブルを削除します。" mySQL = "DROP TABLE " & strName '「はい」ボタンを押下した場合 If MsgBox(strmsg, vbYesNo) = vbYes Then Db.Execute mySQL MsgBox strName & "テーブルを削除しました。", vbCritical MsgBox "インポートします。", vbInformation 'インポート開始 DoCmd.TransferSpreadsheet aclmport, acSpreadsheetTypeExcel8, "テスト", FileList, True MsgBox "インポート完了", vbInformation '「いいえ」ボタンを押下した場合 End If Db.Close: Set Db = Nothing Exit Sub 'テーブルが存在しなかった場合 エラー: MsgBox strName & "テーブルが存在しません。", vbExclamation MsgBox "インポートします。", vbInformation 'インポート開始 DoCmd.TransferSpreadsheet aclmport, acSpreadsheetTypeExcel8, "テスト", FileList, True MsgBox "インポート完了", vbInformation End Sub <困っていること> ファイルを複数選択することは、出来ますがテキストボックスには1ファイルしか取得出来ません。 そのため、インポートも1ファイルのみになってしまいます。 どのようにしたらテキストボックスに複数ファイル名を取得し、インポート出来るのでしょうか?

  • Access2010でExcelエクスポート

    通貨型のフィールドに、「\535,211,114,112」を入力して、 DoCmd.TransferSpreadsheet acExport, 5, "テーブル1", "C:\Test.xls", True, "" を行うと、Excelに「450691311687.48」が出力されます。 ※Excelのバージョンは2010です。 この事象について、詳しい方がおられましたら、ご教授ください。 以上、よろしくお願い致します。

  • アクセス2000→エクセル2010へエクスポート

    Private Sub cmd出力ボタン_Click() DoCmd.SetWarnings False DoCmd.TransferSpreadsheet acExport, 8, "出力クエリ", "C:データ.xlsx", True, "" DoCmd.SetWarnings True End Sub 実行すると 外部テーブルのフォーマットが正しくありません と出てしまいます。 エクセル97の形式にエクスポートする際は大丈夫でした。 spreadsheettypeの引数が違うのかとは思いますが適切な数値がわかりません。 他のやり方等もあれば教えて下さい。

  • vbaにおいて、セルのエラー検出に関して

    vbaにてセルに入力する数式のエラー検出に関して教えてください。 iserror関数で検出できない数式を簡単に検出する方法ありませんか? sub test() dim str as string str=" C2*C3* " cells(5,7).value=str end sub 簡単なVBAのコードですが、*の右側はセル相対参照もセル絶対参照も数値も入っていませんので、数式としてはエラーです。 strの値を(5,7)のセルに放り込んだら、vbaのエラーで停止してしまいます。 かといって、iserror()を使って、 sub test() dim str as string str="C2*C3*" if iserror(str)=true then else cells(5,7).value=str end if end sub としても、エラーをはじいてくれず、VBAでもエラーを出力してしまいます。 力業で、strの数式エラーをはじくしか方法はないのでしょうか? インターネットを調べているのですが、的を射た答えが出てきません。 どなたか詳しい方ご教示ください。

  • アクセス(access)からエクセルにエクスポート

    アクセスから、エクセルにクエリのデータを出力する際に、 「TransferSpreadsheet」を使用していますが、 そのエラー処理について、教えて下さい。 保存しようとしているファイルが既に開かれている場合に、 処理を中止し、エラーメッセージを出したいのですが、 どのようにすればいいのでしょうか? なお、現在のVBAは次のとおりです。 Private Sub コマンド01_Click() Dim a As String Dim b As Variant a = "Q_一覧表" b = "C:\一覧表.xls" DoCmd.TransferSpreadsheet acExport, _ acSpreadsheetTypeExcel9, a, b, True MsgBox "データを出力しました。" Exit Sub End Sub

  • Access SELECT INTO に関する質問です。

    Access SELECT INTO に関する質問です。 いつもお世話になっております。 Access 2002 VBAなのですが、 http://okwave.jp/qa/q4994969.html の内容にちなんだご質問です。 VBAで、SELECT INTO で作成したテーブルを そのままTransferSpreadsheetでExcelに吐き出したいと思っております。 しかし、TransferSpreadsheetでは引数にテーブル名しか指定できないため、 任意のソートがされていない状態でExcel出力されてしまいます。 なにか、任意のソートをした状態でExcel出力できる方法はありますか? TransferSpreadsheetでExcel出力した後、 Excel VBAコードを埋め込んで、Excelで並び替えを行うしかないのでしょうか? よろしくお願いいたします。

専門家に質問してみよう