- ベストアンサー
Access クリップボードにデータが無い場合無視
Access2000 クリップボードでテキストデータのコピー & 貼付をやりたいのですが、下記コードの場合、クリップボードにデータが無いとエラーしてしまいます。(貼付) クリップボードにデータが無い場合は無視するコードを教えて下さい。 Private Sub コマンド_Click() Me.テキスト.SetFocus DoCmd.RunCommand acCmdPaste End Sub
- mmac
- お礼率94% (64/68)
- Visual Basic
- 回答数2
- ありがとう数3
- みんなの回答 (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 ・・・以上、参考まで。
その他の回答 (1)
- n-jun
- ベストアンサー率33% (959/2873)
フィルタがうまく動作しません。 http://www.accessclub.jp/bbs3/0385/superbeg114490.html の回答にある、 【DataObjectでクリップボードから取得する】 と言う所は参考になりませんか? と言っている私はAccessは無知ですけど。
お礼
回答有り難う御座いました。参考にさせて頂きます。 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 [再アドバイスのお願いの背景] 当初、新規追加データのみを対象「上書き事故懸念」にしていましたが、既存データの変更要が散見されたこと。それと、実際に運用してみて動作が確り「強固」していることが確認できたこと。以上の二点です。宜しくお願いします。
- ベストアンサー
- その他MS Office製品
- サブフォームの並べ替えをしたい
どうしても出来ないのでお知恵をお貸しください。 【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で強制終了させなくてはいけなくなります。 対処方法を教えて下さい。
- ベストアンサー
- Visual Basic
- 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を使用しろとかなんとか。。。) 正しい動作をするコードを教えていただけないでしょうか。 よろしくお願い致します。
- ベストアンサー
- Visual Basic
お礼
回答有り難う御座いました。 エラー回避出来ました。 他のエラーもこの方法が使えそうです。 初心者の為、エラーの無限ループが心配です。