• 締切済み

アクセス画像DB、画像のパスを入力したがパスに画像が無い時

MSAccessで画像のデータベースを構築しています。 MSのサイトのサンプル http://www.microsoft.com/japan/users/office_expert/200210/03-1.asp や 当コンテンツ内の http://oshiete1.goo.ne.jp/kotaeru.php3?q=605269 等を参照させて頂いて、以下の様にコードを記 述しました。 Private Sub Form_Current() If IsNull(Me![画像ファイル名]) = True Then Me![リンクイメージ].Picture = "c:\sample_db\photo\" & "dummy_ph.bmp" Else Me![リンクイメージ].Picture = "C:\sample_db\photo\" & Me![画像ファイル名] End If End Sub これだと画像ファイル名が入力されていないときにはdummy_ph.bmpが表示されますが、画像ファイル名が記述されているが C:\sample_dbのディレクトリにその画像ファイルが無かったときにもdummy_ph.bmpを表示させたいのですがそのときのコー ドの書き方を教えていただけませんでしょうか。 よろしくお願いします。

みんなの回答

noname#22222
noname#22222
回答No.2

s_husky です。 失礼!一部、テストコードの書き換え漏れ・ミスがありました。 Private Sub Form_Current() On Error GoTo Err_Form_Current   Me.imgMain.Picture = Me.txtPNAME Exit_Form_Current:   Exit Sub Err_Form_Current:   Me.imgMain.Picture = "C:\Temp\dummy.gif"   Resume Exit_Form_Current End Sub

0615yas
質問者

お礼

s_huskyさん、質問者の0615yasです。完璧に出来ました、有り難うございました。条件式 を書き換えることしか考えておらずエラートラップでやるのは目から鱗が落ちました、有 り難うございました。後から続く人がいたときのために質問内容に即して自分で書いたコ ードを書いておきます。 #################### Private Sub Form_Current() On Error GoTo err_from_current Me.[リンクイメージ].Picture = "C:\sample_db\photo\" & Me.[画像ファイル名] exit_from_current: Exit Sub err_from_current: Me.[リンクイメージ].Picture = "C:\sample_db\photo\" & "dummy_ph.bmp" Resume exit_from_current End Sub ####################

noname#22222
noname#22222
回答No.1

Me.txtPName: カレントレコードの画像ファイル名と連結しているテキストボックス。 レコードを移動した場合、次々とForm_Current()でMe.imgMain.Pictureに表示する。 こういうことかと理解しました。 であれば、次のようでもいいです。 ・該当する画像ファイルがなければエラーが発生します。 ・エラートラップでダミー画像を表示します。 Private Sub Form_Current() On Error GoTo Err_cmdImageUpdate_Click   Me.imgMain.Picture = Me.txtPNAME Exit_Form_Current:   Exit Sub Err_Form_Current:   Me.imgMain.Picture = "C:\Temp\dummy.gif"   Resume Form_Current End Sub

関連するQ&A

  • MS ACCESSのVBA-ファイルの相対アドレス

    MS ACCESS(2013)で、フォームの画像フィールドにVBAで画像ファイルを指定して表示するようにしています。ただ、現在は絶対アドレス指定をしていますが、相対アドレス指定をこころみましたが、失敗しています。相対アドレス指定のやりかたが間違えているのかもしれません。方法をお教えください。(同じドライブの同じフォルダ内のサブフォルダ内に画像がありますが、データベースごと(その関連のフォルダごと)USBなどの外部fデバイスに移そうとしています。) 絶対アドレスのVBA Private Sub PlayerPicture_Set() '----画像表示(共通) On Error GoTo Err_PlayerPicture_Set If Me.PicTrue > 5 Then Me.PicTrue = 9 Me.IMG.Picture = "E:\My\DataBase\Music\Pic\小熊003.bmp" End If If Me.PicTrue = 1 Then Me.IMG.Picture = "E:\My\DataBase\Music\Pic\Player\" & Player & ".bmp" End If If Me.PicTrue = 2 Then Me.IMG.Picture = "E:\My\DataBase\Music\Pic\Player\" & Orchestra & ".bmp" End If 変更例 If Me.PicTrue = 1 Then Me.IMG.Picture = "E:\My\DataBase\Music\Pic\Player\" & Player & ".bmp" End If ---> If Me.PicTrue = 1 Then Me.IMG.Picture = "..\Pic\Player\" & Player & ".bmp" End If 相対アドレス化するために ..(コロン、コロン)で上位にいってましたが、もしかすると、間違いかと思い、..(上位もどり)を排除 "\Pic\Player\" & Player & ".bmp" してみましたが、それでもエラーでした。 なお、Music.mdb(AccessDB)は E:\My\DataBase\Music  の直下にあります。 以下省略。

  • Access2007で、鍵のDBを作っています。レポートに鍵の画像を挿

    Access2007で、鍵のDBを作っています。レポートに鍵の画像を挿入したいと思い、http://www.accessclub.jp/samplefile/samplefile_77.htmを参考にしたのですが、このHPで紹介しているイメージコントロールの貼り付けの部分で指定したように代表?として貼り付けた画像のレコードしか出てきません。(現在、レコードは3つあります。) テーブルは「鍵 台帳」 鍵 記号(テキスト型) 鍵 名称  ・  ・  ・ 鍵画像パス(テキスト型) があり、 レポートの詳細セクション、イベントタブのファーマット時に、[イベントプロシージャ]にし、 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) On Error GoTo エラー発生 Me.ラベル0.Visible = False Me.イメージ34.Visible = True If Not IsNull(Me.鍵画像パス) Then Me.イメージ34.Picture = Me.鍵画像パス Else Me.ラベル0.Visible = True Me.イメージ34.Visible = False End If Exit Sub エラー発生: Me.イメージ34.Visible = False Me.ラベル0.Visible = True Resume Next End Sub と、してみました。ラベル0は「鍵 記号」フィールドに対応、イメージ34はイメージコントロールで貼り付け、書式タブのピクチャでC:¥Documents and Settings¥〇〇¥My Documents¥△△¥鍵管理DB\KM 611.jpgとしました。鍵 画像パスフィールドにも同じようにパスが入っています。(鍵 記号と鍵の画像ファイルは、同じ名前にしています。) このようにし、印刷プレビューにしようとすると、「パラメータの入力 鍵 画像.鍵 画像」と出てきます。何も入力せず、「OK」を押すと、プレビューでKM 611のレコードのみ出てきます。 レポートには、鍵 画像パスフィールドと、「鍵 履歴」テーブルもサブレポートで入れています。 ちなみに、鍵 履歴テーブルは ID 鍵 記号 履歴 日付  ・  ・ のようになっており、鍵 記号を「鍵 台帳」テーブルの鍵 記号フィールドとリレーションさせています。 アクセス超初心者でやっとここまでこぎつけたので、後は、なぜ出来ないのかさっぱりわかりません。 どうか、お助けいただければ、幸いです。 厚かましいですが、教えて頂けるようであれば、プロシージャを入れる場合なども、どこをクリックしてから等細かくご教授願えますでしょうか。 よろしくお願い致します。

  • アクセス2000のレポートでイメージを表示させたいのですが

    アクセス2000でデータベースを作成しています。レポートについて分からないことがあるので教えてください。 ・ImageFileというフィールドにイメージファイルのフルパスを入力しておき、フォーム上のPictureを配置し、下記のようなコードを記述して、Pictureに、イメージファイルを読み込んで表示させています。 Private Sub Form_Current() If IsNull(Me.ImageFile) Then   Me.イメージ.Picture = "d:\nonimage.jpg" Else: Me.イメージ.Picture = Me![ImageFile] End If End Sub ・同じような方法でレポートでイメージを印刷させることは出来ないでしょうか?  尚、ImageFileはレコード毎に異なるものを使用しています。

  • 「ACCESS」レポートで、外部画像を多数表示できない

    はじめまして。ACCESS初心者ですが、よろしくお願いします。 レポートで外部画像を多数表示させたく、サンプルを公開しているサイト様のソースを使用しました。 サンプルは、1枚表示のものだったので、 「Me!img_○.Picture = myPath & "\" & [番号] & "\○.jpg"」 の部分を追加してみたのですが、この場合、[番号]フォルダに指定される画像が全てないと、そのレポートが白紙になってしまいます。 指定の画像がなくても、他の画像は表示される方法はありますでしょうか。ご回答よろしくお願いいたします。 Option Compare Database Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer) '指定された画像をセットする処理 '2006/04/22 pPoy On Error GoTo Err_詳細_Print Dim myPath As String myPath = CurrentProject.Path '※ Me!img_1.Picture = myPath & "\" & [番号] & "\1.jpg" Me!img_2.Picture = myPath & "\" & [番号] & "\2.jpg"   Me!img_3.Picture = myPath & "\" & [番号] & "\3.jpg" Exit_詳細_Print: Exit Sub Err_詳細_Print: 'ファイルが見つからなかった場合はデザイン時の画像を表示 Me!img_1.Picture = myPath & "\no_img.gif" Me!img_2.Picture = myPath & "\no_img.gif" Resume Exit_詳細_Print End Sub

  • エクセルに画像を取り込めたのですが・・・

    マクロでクリアしたいのですけど クリアボタンでどんな命令を入れたらよいのでしょうか? Shape1.Delete で消せと、本には書いてあるのですが・・・ Sub クリア() Range("P4").Select Selection.ClearContents Range("P4").Select Shape1.Delete End Sub だと、エラーになります・・・当たり前ですが・・・ 文字と一緒に消したいのに消えない・・・ それと、写真をファイル名で検索して取り込むのことは可能ですか? Sub クリック写真表示() Dim shape1 As Object Set shape1 = ActiveSheet.Shapes.AddPicture("C:\Users\Iida\Pictures\10001.bmp", _ False, True, 549, 62, 161, 121) Range("P4").Select End Sub これだと、指定した写真しか入りません。。。 IFが使えるということなんですが・・・?? すべて跳ね返されます。。。頭が痛い・・・

  • ACCESSで画像を参照する設定がうまくゆきません

    あまり詳しくはないですが、ACCESSを使って仕事をしています。 ひとつのデータにひとつの画像をつけたデータを扱うのですが、画像を直接テーブルに貼り付けているので非常に容量を食ってしまいます。(JPG形式です) そこでネットで色々調べて、現在データを保管しているテーブルに、パス用のテキストボックスを追加し、既存のフォームにイメージを配置して表示させる方法を試していますが、うまくゆかず、「プロシージャの呼び出しまたは引数が不正です」というエラーが出てしまいます。 プロシージャというもの自体をはじめて知ったので、ネットで引っ張ってきたコードをそのまま貼り付けて使っている状態です(テキストボックスの名前やイメージの名前は変えています) 現状は以下の通りです。 ファイル形式:ACCESS2000 使用ソフト :ACCESS2003 テキストボックス名:パス イメージ名     :参照 フォームの「レコード移動時」の「イベントプロシージャ」に貼り付けたコード Option Compare Database Private Sub パス_BeforeUpdate(Cancel As Integer) End Sub Private Sub Form_Current() '指定された画像に入れ替える処理 '2006/04/15 pPoy On Error GoTo Err_Form_Current Dim myPath As String myPath = CurrentProject.Path If Not IsNull(Me!パス) Then Me!参照.Picture = myPath & "\" & Me!パス Else '新規レコードに移動した際はデザイン時の画像を表示 Me!参照.Picture = myPath & "花.JPG" End If Exit_Form_Current: Exit Sub Err_Form_Current: MsgBox Err.Description Resume Exit_Form_Current End Sub ちなみに、この「イベントプロシージャ」も突然消えてしまったりします。 非常に困っていますので、よろしくお願いいたしますm()m

  • 画像をアクティブセルの左上隅に配置し任意のセルに

    画像をアクティブセルの左上隅に配置し任意のセルにその画像ファイル名を自動で入力したいです やりたいことは以下になります 例えば画像をアクティブセル(D2)の左上隅に貼り付けて 貼り付けた画像のファイル名をC2に自動で入力をしたいです ファイル名に関しては拡張子も明記するコードとしないコード二つご教授して頂けると大変嬉しいです 下記のコード二つを組み合わせればできそうなんですが どのようにしたらいいのか分かりません よろしくお願いします Sub 図形挿入() Dim FilePath As Variant FilePath = Application.GetOpenFilename(",*.png") If Not FilePath = False Then ActiveSheet.Pictures.Insert(FilePath).Select Selection.ShapeRange.LockAspectRatio = msoTrue Selection.ShapeRange.Width = Selection.ShapeRange.Width * 1# Selection.ShapeRange.Left = ActiveCell.Left + 2.25 Selection.ShapeRange.Top = ActiveCell.Top + 2.25 With Selection.ShapeRange.Line .Weight = 2.25 '線の太さを2.25に .ForeColor.RGB = RGB(255, 0, 0) '赤枠に End With End If End Sub Sub ファイル名をセルに入力() Dim OpenFileName As String Dim tmp As Variant OpenFileName = Application.GetOpenFilename(FileFilter:="画像 ,*.png; *.jpg; *.gif; *.bmp", Title:="ファイルの選択") If OpenFileName <> "False" Then tmp = Split(OpenFileName, "\") Range("C2").Value = tmp(UBound(tmp)) End If End Sub

  • ACCESS どこがおかしいのか?

    ACCESSで。クエリからフォームを作成し、検索フォームを作成しようとしています。 AND条件とOR条件を作り検索(抽出)を行いたいのですが、何が間違っているのか、 検索をかけるとすべて「登録がありません」になってしまいます。 どこが間違っているのか、もしくは代替案を教えていただけますでしょうか。 以下は記述した、VBAコードです。 Private Sub 検索ボタン_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim stFil As String Set db = CurrentDb() Set rs = db.OpenRecordset("Q_Autoweb", dbOpenDynaset) 'オプションボタンで条件を選択 If 検索条件 = 1 Then rs.Filter = "[タイトル]='" & タイトル検索 & "' and [本文]='" & テキスト15 & "'" Else rs.Filter = "[タイトル]='" & タイトル検索 & "' or [本文]='" & テキスト15 & "'" End If Set rs = rs.OpenRecordset Set Me.Recordset = rs If rs.EOF = True Then MsgBox "登録がありません" Else Me.ID = rs!ID Me.案件名 = rs!案件名 Me.タイトル = rs!タイトル Me.本文 = rs!本文 End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub よろしくお願いします。

  • VBAでフォーム登録する場合の未入力のエラー

    病院を登録するフォームをつくっています。 名前を入れて登録。その後、入力画面がnullになる。 というのはできたのですが、未入力の場合 (登録した後、クリックしたときに) フィールドに必要なプロパティが True に設定されているため~~ と出てしまいます。 そのエラーメッセージを「"入力してください"」 のメッセージBOXに変えたくて上記のようにしたのですが、 変わりません。どこがおかしいのでしょうか。 どなたか、分かる方ご指導くださいませ。 Private Sub コマンド0_Click() Dim db As Database, rst As Recordset Set db = CurrentDb Set rst = db.OpenRecordset("T_病院", dbOpenTable, dbAppendOnly) With rst .AddNew ![病院名] = Me.病院名 If Me![病院名] = Null Then MsgBox "入力してください" GoTo minyuuryoku End If .Update minyuuryoku: End With Me.病院名 = Null With db End With rst.Close db.Close Set db = Nothing End Sub

  • Excel2010でのマクロによる画像貼付について

    エクセル2010で下記のマクロを実行し、一旦保存して再度開くと、 「リンクされたイメージを表示できません。ファイルが移動または削除されたか、名前が変更された可能性があります。リンクに正しいファイル名と場所が指定されていることを確認してください。」 と表示されます。 検索したところ、Pictures.Insertでなく、2010では、Shapes.Addを使用するとの事ですが、 マクロに詳しく無いため、どこを修正したらいいのかわかりません。 大量の写真貼り付けがあるので、教えて頂けると大変助かります。 どうぞよろしくお願いいたします。 Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) '===============起動の合図 If ActiveCell.FormulaR1C1 = "画像" Then Cancel = True '===============画像選択 SSS = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False) If SSS = False Then MsgBox "画像を選択してください(終了)" Exit Sub End If '===============画像の貼り付け Set CCC = ActiveSheet.Pictures.Insert(SSS) '===============タテヨコの縮尺を保持 HH = Target.Height / CCC.Height WW = Target.Width / CCC.Width If HH > WW Then CCC.Height = CCC.Height * 0.99 CCC.Width = Target.Width * 0.99 Else CCC.Height = Target.Height * 0.99 CCC.Width = CCC.Width * 0.99 End If '===============中央へ調整 HH2 = (Target.Height / 2) - (CCC.Height / 2) WW2 = (Target.Width / 2) - (CCC.Width / 2) CCC.Top = Target.Top + HH2 CCC.Left = Target.Left + WW2 Set CCC = Nothing End If End Sub