• 締切済み

TransferSpreadsheetのエラー処理

TransferSpreadsheetのエラー処理について ご教授お願いします。 TransferSpreadsheetで、エクセルファイルをインポートします。 その際、エクセルにシート保護(ブック保護)がかかっている 場合、読み取りができません。ここをエラー処理を表示させたいです。 現状では If MyName <> "." And MyName <> ".." Then ' ビット単位の比較で、MyName がファイルであるかどうか pu_strImfilename = MyName DoCmd.SetWarnings False '★★★ファイルインポートする DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel97, _ "wrk_Excelファイルインポート", sBuffer & "\" & MyName, True, "インポートの範囲" DoCmd.SetWarnings True End If としています。 実行すると、保護状態のエクセルブックのみ、 '3161'が表示されます。どうぞよろしくお願いします。

みんなの回答

  • gatt_mk
  • ベストアンサー率29% (356/1220)
回答No.3

Select Case Err.Number Case 3161 MsgBox Err.Number & Err.Description & MyName End If ImportCancel = True End Select 上記記載の「End If」はどこに由来するものですか? また >実行すると、保護状態のエクセルブックのみ、'3161'が表示されます。 とありますが、「MsgBox Err.Number & Err.Description & MyName」と指定しているのでメッセージが出ますよね。そのメッセージが出ないということなのでしょうか? Select Case Err.Number Case 3161 MsgBox Err.Number & Err.Description & MyName Exit Sub End Select とでもしておけば、3161のエラーが発生したときに終了させることもできるでしょうし、スキップさせて指定したエラー時の処理まで飛ばすように指定すれば保護エラー発生後の処理ができるのではないですか? 現状保護エラー発生時にどのような現象が発生しているかをまず書かないと。

peko_12
質問者

補足

すみません、説明がかなり不足しておりました。 本日エラー処理について私自身、再度、調査と勉強をしております。 もう一度経緯と、詳細など発生事象をまとめて 質問させていただきます。 回答者のお二方、まことにありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • HIROs-NET
  • ベストアンサー率78% (15/19)
回答No.2

>On Error GoTo ImportFile >・インポート処理 >・クエリ実行 >ImportFile_Err: とありますが On Error GoTo で指定しているラベル ImportFileがないからでは? ImportFile_Err と書くべきではないでしょうか?

peko_12
質問者

補足

たびたび本当に申し訳ありません。 少しコードを伏せてここに記入したため、 記入ミスしてしまいました・・・ 仰るとおり、以下で実装しています。 On Error GoTo ImportFile_Err  ・処理 ・クエリ実行・ ImportFile_Err:

全文を見る
すると、全ての回答が全文表示されます。
  • HIROs-NET
  • ベストアンサー率78% (15/19)
回答No.1

「エラー処理を表示させる」とは、エラーメッセージを表示すると解釈してよろしいのでしょうか? そうだと仮定して、書きます。 まず 環境はVisual Basic6.0以下ということでよいのでしょうか? だとすれば On Errorステートメントを使用すればよいのではないでしょうか? あとはErrオブジェクトのNumberプロパティでエラーの原因を判別すれば良いと思います。 .NETならば Try Catchを使用しエラー情報を拾えばよいと思います。

peko_12
質問者

補足

早速のお答えありがとうございます。 説明不足でごめんなさい。 環境は、ACCESSVBAです。 On Error GoTo ・・・でエラー処理を 走らせているはずなのですがエラー処理に行く前に デバッグのダイアログメッセージが表示されてしまいます。 On Error GoTo ImportFile ・インポート処理 ・クエリ実行 ImportFile_Err: Select Case Err.Number Case 3161 MsgBox Err.Number & Err.Description & MyName End If ImportCancel = True End Select とい感じです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • インポートの自動化

    複数のエクセルファイルを自動でインポートしたいのですが DoCmd.TransferSpreadsheet _ TransferType:=acImport, SpreadsheetType:=acSpreadsheetTypeExcel97 _ , TableName:="T1", FileName:="C:\Book1.xls", HasFieldNames:=True のコードだと特定したファイルしかできないみたいです・・。 指定したフォルダの中にある複数のエクセルファイルを 自動でインポートするコードなんてあるんでしょうか? 幾分、初心者のためわからないことが多いです。 教えていただけると助かります。 よろしくお願いします。

  • EXCELファイルからACCESSへインポート

    質問させていただきます。 ACCESSのフォームから、EXCELファイルを選択してEXCELの内容を、 テーブルにインポートさせたいのですが。以下の方法で行って いるのですが、テーブルに反映されません。 Private Sub cmd_Import_Click() Dim InitialFileName As String Dim varTitle As Variant Dim FileName As String InitialFileName = "hoge.xls" varTitle = "ファイルを開く" FileName = GETHOGEOPEN(varTitle, InitialFileName) DoCmd.SetWarnings False DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "T_HOGE", FileName, True DoCmd.SetWarnings True MsgBox "完了しました" End Sub ACCESS → ACCESS2003 SP3 EXCEL →EXCEL2003 SP3 よく見ると、すでにEXCELのバージョン指定が違う(汗) これが原因かも・・・・(汗) わかる方がいらっしゃったら教えてください。

  • ACCESS エクセル取込 列指定

    下記のコードでエクセル取込を行おうと思いましたが、列指定をする"A:M, O:V"の箇所でエラーとなってしまいました。A:M列だけならエラーもなく取り込めますが、O:V列も取り込みたいです。 N列を取り込みたくない理由としては、文字と数字が混在していて、省きたいと思っております。 何か良い方法はございませんでしょうか? DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "T_SAPShohin", Path, True, "A:M, O:V" ←エラー ____________________________________________________________________ Private Sub SAPShohin_Click() Dim Path As String Dim Res As String WizHook.Key = 51488399 Res = WizHook.GetFileName(0, "", "", "", Path, "CurrentProject.Path", "(*.xlsx,*.xls)", 0, 0, 4, -1) If Res = 0 Then '取得したファイルパス(Path)でExcelからインポート DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "T_SAPShohin", Path, True, "A:M, O:V" Else '[キャンセル]ボタンが押された場合の処理 MsgBox "[キャンセル]ボタンが押されました。" Exit Sub End If MsgBox "インポートできました!"

  • ACCESS VBAでのインポート

    アクセスでエクセルのファイルをインポートするVBAを書いています。 まず、フォルダ内のファイル名を全て取得してコンボボックスで表示します。 そのコンボボックスからインポートするファイルを選択し、インポートします。 ところが、インポートしようとすると「実行時エラー'3011'」となり、オブジェクトが見つかりませんとなってしまいます。 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "氏名順_仮", Me.shimei_folder.Value & "\06.6.1氏名順.xls", True このように記述するとキチンとインポートするのですが、 path = Me.shimei_folder.Value & "\" & CStr(Me.shimei_combo.Value) DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "氏名順_仮", path, True これだと3011エラーになってしまうのです。 エラー表示が「オブジェクト"06.6.16氏名順$"が見つかりません」となるのですが、.xlsが$になってしまうのが原因??とも思います。 コンボボックス上は「06.6.16氏名順.xls」と表示されているし、デバッグしてみてもMe.shimei_combo.Valueは「06.6.16氏名順.xls」なのですが・・・。 どなたか、解決方法がわかれば教えて下さい。 ちなみにACCESS、EXCELともに2000です。

  • Access から Excelのシートをインポート時エラー

    Access の既存のテーブルにExcelのスプレッドシートからデータをインポートするため次のコマンドを実行すると、 F1フィールドがない旨のエラーメッセージが表示されます。 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "アクセスのテーブル名", "インポート元のエクセルファイル名.xls", False ここで、F1フィールドとは何でしょうか。 Excelのシートの1行目にAccessのテーブルの項目名と同名の項目名を挿入しておけば、上のコマンドの最後の引数をTrueにすればインポートは成功します。項目名のないスプレッドシートはインポートできないのでしょうか。 ご存知の方、教えてください。

  • TransferSpreadsheetでフルパス指定しない場合

    Access2003 WinXP (ADO)です。 テーブルをExcelへエクスポートするのですが DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "テーブル名", "ほにゃらら" と書いたらデスクトップに新規にExcelブックが出来上がっていて、内容もエクスポートされていました。 ブックの名前は”ほにゃらら”です。 既存のブックではなく新規のブックに吐きたかったので良いのですが、本当はエクスポート先のブックをフルパスで指定するのですよね? このままでは何か弊害が出ますでしょうか?

  • 条件分岐

    Windows2000 access2000 毎月Excelで材料費を以下のように入力しています。 店番号、日付、金額 000001,2006/07/01,1000 000001,2006/07/02,1450 000001,2006/07/03,2000 このシートを翌月にaccessにインポートします。 インポートを指示するためのフォームを作成し、店、年、月を指定して実行ボタンでインポートを行うようにしました。 このとき月の日数にあわせてインポートするシートの範囲を指定するため以下のような条件分岐にしました。 If Me!月 = "02" Then DoCmd.TransferSpreadsheet acImport, 8, "材料費", fname01, True, "材料!a2:c30" ElseIf Me!月 = "04" Or "06" Or "09" Or "11" Then DoCmd.TransferSpreadsheet acImport, 8, "材料費", fname01, True, "材料!a2:c32" Else DoCmd.TransferSpreadsheet acImport, 8, "材料費", fname01, True, "材料!a2:c33" End If ところが上2つの条件では正常にインポートされるのですが、3番目の条件でインポートを指示しても2番目の条件でインポートされてしまいます。順番を入れ替えても同じ結果になりました。 何がいけないのでしょうか。 よろしくお願いします。

  • [PG]AccessVBAでファイルのインポートする方法

    [PG]AccessVBAでファイルのインポートする方法 VBAでエクセルファイルのインポートする機能を実装しています。 下記のコードで実行しますと実行時エラー"3011"が表示され DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange で止まります。何か解決方法を教えていただけないでしょうか? Function ExcelDataImport() 'On Error GoTo エラー Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String ' --- Accessテーブルを指定します。存在していなければ自動的に作成します。 varac = "tbl_売上げテーブル" ' ---Excelファイルを指定します。必ず、存在していなくてはいけません。 varxls = "C:\売上げ.xls" ' --- データ入力のシート名とセル範囲を指定します。 ' なお、省略が可能です。省略した場合は、ワークシート全体がインポートされます。 strrange = "売上げシート!A1:D10" strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & _ "へ、データ入力を行います。" & Chr(13) & _ "Excelファイルの入力レンジは、 " & strrange & " です。" ' --- DeleteObjectメソッドを用いて、tbl_売上げテーブルを削除します。 ' --- TransferSpreadsheetメソッドを用いてデータをインポートします。 DoCmd.DeleteObject acTable, varac If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange MsgBox "データ入力は、正常に完了しました。" End If Exit Function

  • AccessからVBAでExcellシートのインポート

    すみません。教えてください。 AccessVBAでエクセルのシートをインポートしたいのです。 いつも同じ行数ではありませんのでrange指定を埋め込むわけに行きません。 DoCmd.TransferSpreadsheet acImport, , "給与データ報告書", "c:\test\test.xls", True, "a1:p6000" でインポートできるのですが DoCmd.TransferSpreadsheet acImport, , "給与データ報告書", "c:\test\test.xls", True, "" range指定をしないとエラーになります。(出来ると書いてあるが) sheet1、ワークシート名とかの指定が出来ればと思い、いろいろ試してみたのですが出来ません。 宜しくお願いいたします。

  • ACCESS VBA でのCSV取込エラー

    ACCESS VBA でのCSV取込エラー ACCESSにてフォルダ内にあるCSVファイルをすべてインポートしようとしています。 インポート定義を作成して、下記のコードを書いてみましたが、 データはすべてインポートされるのですが、 カンマが無視され、フィールドとフィールドの中間で途切れてデータが格納されてしまいます。 またフィールド4は日付形式なのですがこれがインポートエラーになります。 フィールド1 フィールド2 フィールド3 フィールド4 aaa aa,bbb bbb,ccc  エラー 2日間ほどネットサーフィンをして調べたのですが、 回避方法が見つからなかったので、お知恵を拝借できますでしょうか? よろしくお願いいたします。 Private Sub cmd06_Click() Dim MyFile As String Dim MyName As String Dim strFolderName As String DoCmd.SetWarnings False DoCmd.OpenQuery "Q09_全CSVデータ削除" DoCmd.SetWarnings True strFolderName = GetFolderName() 'フォルダ選択ダイアログを表示 If Len(strFolderName) > 0 Then '選択結果を評価 MyFile = strFolderName & "\*.csv" '【拡張子csvのファイルのみ取得】 MyName = Dir(MyFile, vbNormal) Do While MyName <> "" If MyName <> "." And MyName <> ".." Then If GetAttr(strFolderName & "\" & MyName) <> vbDirectory Then DoCmd.TransferText acImportFixed, "インポート定義", "T03_全CSVデータ", strFolderName & "\" & MyName, False, "" '【取得したファイルをインポート】 End If End If MyName = Dir Loop Else MsgBox "フォルダは選択されませんでした" End If MsgBox "データのインポートが終了しました" End Sub