• ベストアンサー

Access クリップボードにデータが無い場合無視

Access2000 クリップボードでテキストデータのコピー & 貼付をやりたいのですが、下記コードの場合、クリップボードにデータが無いとエラーしてしまいます。(貼付) クリップボードにデータが無い場合は無視するコードを教えて下さい。 Private Sub コマンド_Click() Me.テキスト.SetFocus DoCmd.RunCommand acCmdPaste End Sub

  • mmac
  • お礼率94% (64/68)

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

> クリップボードにデータが無い場合は無視するコードを教えて下さい。 現状のコードでエラーが発生した場合、エラーメッセージと同時に エラー番号(実行時エラー '2046')が表示されると思います。 これを利用するのもひとつの手です(エラートラップ)。 Private Sub コマンド_Click() '何らかのエラーが発生した場合、「エラー処理」に飛ばすための宣言 On Error Goto エラー処理   Me!テキスト.SetFocus   DoCmd.RunCommand acCmdPaste 終了処理:   '「終了処理」の位置を示すラベル   'Subを抜ける   '(別の処理を示すラベルがあっても、処理はラベルを無視して継続   ' するため、明示的にSubを抜ける必要があります)   '※この1行を忘れると、エラーの無限ループになるので要注意※0   Exit Sub エラー処理:  '「エラー処理」の位置を示すラベル   '「Err」でエラー番号が取得できます。   '(より明示的にするなら「Err.Number」)   Select Case Err     Case 2046       'エラーが発生した次の行に戻って処理を続行       '(必要なら、ここにMsgBoxなどを追加します)       Resume Next     Case Else       '上記以外のエラーが発生した場合は、そのエラー番号と       'エラーメッセージを表示して処理を中止(「終了処理」に移動)       '※「Case ○○」の追加により、別のエラーの切り分けも可能※       MsgBox Err & ":" & Error$, , Me.Name & " コマンド"       Resume 終了処理   End Select Exit Sub ・・・以上、参考まで。

mmac
質問者

お礼

回答有り難う御座いました。 エラー回避出来ました。 他のエラーもこの方法が使えそうです。 初心者の為、エラーの無限ループが心配です。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

フィルタがうまく動作しません。 http://www.accessclub.jp/bbs3/0385/superbeg114490.html の回答にある、 【DataObjectでクリップボードから取得する】 と言う所は参考になりませんか? と言っている私はAccessは無知ですけど。

mmac
質問者

お礼

回答有り難う御座いました。参考にさせて頂きます。 Object Libraryの参照は出来れば使用せず他にも対応出来る様 エラーコードを避ける様にしたいです。

関連するQ&A

  • Access VBA クリップボードの内容を

    Access2003 を使用しています。 クリップボードに取り込んだ商品名を、あるボタン(仮称:cmd01)を押せば A1 というデータに代入したいと思います。そのVBAの書き方を教えてください。 つまり Private Sub Cmd01_Click()     dim A1 as string     A1=(クリップボードに取り込んだ商品名) End Sub このようなイメージにしたいのですが・・・

  • 既存のVBAに機能を追加させたい

    先日、このサイトでアドバイスをいただきましたが「ありがとうございます」、更に能力をアップできればと思っています。アドバイスをお願いします。 [やりたいこと] 既存のVBA記述に機能を追加したい。「このサイトでアドバイスをいただいたVBAに機能追加」 現在、テキストボックスが空「データなし時」の場合に限り、貼り付けコマンドが実行されますが、「データありの場合」は、表示されたダイアログの「はい」を押しても上書きされません。今回(機能を追加)、データありの場合も「貼り付け(上書き)」を実行させたいと思っています。 ・フォーム:フォーム10 ・コマンドボタン:コマンド10 ・テキストボックス:テキスト10 Private Sub コマンド10_Click()   Me!テキスト10.SetFocus   If Not IsNull(Me!テキスト10) Then     If MsgBox("すでに入力されてます。上書しますか?", vbYesNo) = vbNo Then       Me!コマンド10.SetFocus     End If   Else     If MsgBox("クリップボードのデータを貼り付けますか", vbYesNo) = vbYes Then       DoCmd.RunCommand acCmdPaste     End If   End If End Sub [再アドバイスのお願いの背景] 当初、新規追加データのみを対象「上書き事故懸念」にしていましたが、既存データの変更要が散見されたこと。それと、実際に運用してみて動作が確り「強固」していることが確認できたこと。以上の二点です。宜しくお願いします。

  • サブフォームの並べ替えをしたい

    どうしても出来ないのでお知恵をお貸しください。 【1】「オートフォーム:データーシート」で、テーブル1を紐付けて、 子フォームを作成しました。 【2】「デザインビュー」で親フォームを作り、 その子フォームをドロップアンドドラッグしてサブフォームにしました。 【3】親フォームにコマンドボタンを一つ設置しました。 (図参照) 【4】コマンドボタンのイベントプロシージャーに Private Sub コマンド1_Click() Forms("親").Controls("子").Controls("入金").SetFocus DoCmd.RunCommand acCmdSortAscending '昇順並べ替え End Sub とコードを書きました。 そして、親フォームを開き、コマンドボタンを押すと、 実行時エラー2046 「コマンドアクション"昇順で並べ替え" は無効です」 となってしまいます。 しかし、図のように 子フォームのデータシート上のどれかの値にフォーカスがある状態で 標準モジュールに書き写した Sub test1() Forms("親").Controls("子").Controls("取引日").SetFocus DoCmd.RunCommand acCmdSortAscending '昇順並べ替え End Sub を実行すると 問題なく並び替えがされます。 RunCommand を使わなくてもいいので 「コマンドボタンを押したら、サブフォームの並び替えをする」には どうすればいいのでしょうか。 ご教授よろしくお願い致します。(アクセス2003)

  • アクセス 帳票ビュー・単票ビューをボタンで切り替え

    帳票ビュー・単票ビューをボタンで切り替えたいのですが、どの定数を指定すればいいのかわかりません。 Private Sub 単票ビュー_Click() Call test End Sub Private Sub 帳票ビュー_Click() Call test End Sub Sub test() If ActiveControl.Caption = "帳票ビュー" Then DoCmd.RunCommand acCmdFormView '単票ビューにする ElseIf ActiveControl.Caption = "単票ビュー" Then DoCmd.RunCommand acCmdFormView '帳票ビューにする End If End Sub こんな感じで作ったのですが、「acCmdFormView」ではダメで、単票ビュー、帳票ビューをそれぞれ指定したのですが、コードを教えていただけますか?

  • クリップボードにデータを送る(コピーする)には?

    vbaでクリップボードにデータを送る(コピーする)には? エクセルです。 Sub Macro() Selection.Copy End Sub で、クリップボードにデータを送ってることになりますよね? 「どこかのセルをコピーする」ではなく、例えば「abc」という文字をコピーさせて、 いつでも貼り付けられる状態にしたいのですが、vbaでそういうことは可能ですか? Sub Macro() "abc"をクリップボードに送る End Sub 的な事がしたいです。

  • Access 2重3重のポップアップフォームの場合

    Accessです。 フォームを3つ作りました。 フォーム1=「A] フォーム1=「B]>ポップアップ「はい」 作業ウインド固定「はい」 フォーム1=「C]>ポップアップ「はい」 作業ウインド固定「はい」 「A」が開くとき Private Sub Form_Open(Cancel As Integer) ____DoCmd.OpenForm "フォーム2", , , , , acHidden ____DoCmd.OpenForm "フォーム3", , , , , acHidden End Sub として 「A」にはボタンがあってクリックすると「B」が Visible=True になります。 Private Sub コマンド1_Click() ____Forms!フォーム2.Visible = True ____Forms!フォーム2.SetFocus End Sub さらに「B」にもボタンがあってクリックすると「C」が Visible=True になります。 Private Sub コマンド1_Click() ____Forms!フォーム3.Visible = True ____Forms!フォーム3.SetFocus End Sub 「C」が現れた後、マウスイベントがきかなくなります。 というより、閉じることもできなく、アクセス本体をCLT+ALT+DELで強制終了させなくてはいけなくなります。 対処方法を教えて下さい。

  • access setfocusについて

    いつもお世話になっております。 いろいろ調べたのですが行き詰っておりまして ご教授お願いします。 下記記述でsetfocusでエラーになってしまいます。 Private Sub コマンド_Click() If IsNull(Me.テキストボックスコントロール名) Then MsgBox "未入力です" Me.テキストボックスコントロール名.SetFocus End If テキストボックスの処理記述 End Sub https://www.moug.net/tech/acvba/0030005.html こちらを参考にしました。 よろしくお願いします。

  • ACCESSデータをEXCELに出力したい。

    ACCESSでフィルタを使って複数項目(空欄の箇所がある場合もあり)を抽出したデータ(サブフォームに表示)だけをEXCELに出力したいのですが、下記のコードではすべてのデータが出力されてしまいます。 ------------------------------- Private Sub 出力_Click() DoCmd.OutputTo acOutputQuery, "Q_出力", acFormatXLS End Sub ------------------------------- 情報が少なかったらすみません。 よろしくお願いいたします。

  • アクセスについてです(レポート)

    フォームからレポートを開く時に、 VBAでコントロールにコントロールソースを指定したいのですが どうやらエラーになってしまうようです。 フォームからではなく手動でレポートを開く場合は エラーにはなりません。 レポートのレコードソースは、T_testを指定していて、 その上にあるコントロールは非連結で指定したコントロールソースをvbaで入れたいです。 なので、レポートのLoadイベントで Private Sub Report_Load() Me.テキスト0.ControlSource = "8月" End Sub として、手動でレポートを開く分には問題ないのですが このコードのまま、フォームから Private Sub コマンド0_Click() DoCmd.OpenReport "レポート1", acViewPreview End Sub とすると、Me.テキスト0.ControlSource = "8月"で、 実行時エラー2191 印刷プレビュー時または印刷を開始した後は コントロールソースプロパティを設定できません。 のエラーが発生します。 フォームから Private Sub コマンド0_Click() DoCmd.OpenReport "レポート1", acViewDesign End Sub とすると、レポートのLoadイベントが発生しませんでした。 ご回答よろしくお願いします。

  • クリップボードの中身を判別

    PHPなどは理解しておりますが、VBに関してはまったく素人で何もわからないものです。 今回、クリップボードの中身を常に監視して、ある文字列が含まれていたらそのまま、それ以外の文字列の場合は空にするアプリが必要になりました。 そこでネットでいろいろ探して次のように作りました。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'クリップボードの文字列データを取得する Dim ClipBoardValue As IDataObject Dim ClipBoardString As String Dim okng As Boolean Do 'クリップボードのデータを取得() ClipBoardValue = Clipboard.GetDataObject ClipBoardString = ClipBoardValue.GetData(DataFormats.Text).ToString okng = ClipBoardString.Contains("反応あり") If (okng) Then 'クリップボードに文字列をコピーする Clipboard.SetDataObject("反応あり") Else Clipboard.SetDataObject("") End If Loop End Sub End Class 一つのフォームにボタンを一つ設置し、起動したら監視開始、ボタンをクリックしたら終了という形にしています。 動作させると、以下の問題があります。 ・どんな文字をコピーしてもすぐ空になってしまう ・フォームが表示されない ・起動時にクリップボードの中身が空だとエラーが表示される (オブジェクトのインスタンスにはnewを使用しろとかなんとか。。。) 正しい動作をするコードを教えていただけないでしょうか。 よろしくお願い致します。

専門家に質問してみよう