• ベストアンサー

「VBでExcel上PictureBoxダブルクリックイベントを取得したい」について

Chika-Fの回答

  • ベストアンサー
  • Chika-F
  • ベストアンサー率60% (6/10)
回答No.1

TAGOSAKU7さん、こんにちは。 サンプルをUPします。参考になると良いのですが・・・ 私も質問があります。 サンプルREMARK部分でエラーになります。 質問を投稿してありますが良回答を 得られずに困っています。 ご存知でしたら教えて下さい。 【サンプル準備】 標準フォームを1つ作成 同フォームにボタンを2つ作成 TESTという名前でExcelブックを作成 同Excelシートに「Image1」という名前でPictureBox(イメージ)を1つ作成 同ブックをアプリケーションと同フォルダーに保存 参照設定に気を付けて下さい。 【サンプル】 Option Explicit Private WithEvents XLApp As Excel.Application Private WithEvents XLBook As Excel.Workbook Private WithEvents XLSheet As Excel.Worksheet Private WithEvents XLImage As MSForms.Image '-------------------------------------------------- 'Excel起動 '-------------------------------------------------- Private Sub Command1_Click() 'AppObjectセット Set XLApp = CreateObject("Excel.Application") 'Excel起動 XLApp.Workbooks.Open FileName:=App.Path & "\TEST.xls" 'WorkBookObjectセット Set XLBook = XLApp.ActiveWorkbook 'WorkSheetObjectセット Set XLSheet = XLBook.Sheets(1) 'PictureObjectセット Set XLImage = XLSheet.OLEObjects("Image1").object 'Excel表示 XLApp.Visible = True 'フォーム非表示(2重起動防止) Me.Visible = False End Sub '-------------------------------------------------- 'アプリケーション終了 '-------------------------------------------------- Private Sub Command2_Click() Unload Me End End Sub '-------------------------------------------------- 'ExcelBookクローズ時処理 '-------------------------------------------------- Private Sub XLApp_WorkbookBeforeClose(ByVal Wb As Excel.Workbook, Cancel As Boolean) '終了時に保存メッセージを表示させない XLApp.DisplayAlerts = False 'ExcelApp終了 XLApp.Quit '変数解放 Set XLImage = Nothing Set XLSheet = Nothing Set XLBook = Nothing Set XLApp = Nothing 'フォーム表示 Me.Visible = True End Sub '-------------------------------------------------- 'ExcelImageダブルクリック時処理 '-------------------------------------------------- Private Sub XLImage_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Dim OpenRet As Variant '確認メッセージ XLApp.Visible = False MsgBox ("Get PictureBox Event") XLApp.Visible = True '----------------------------------------------------------- '---私も質問したい箇所です。最初はREM(')して下さい '--.Pictureでオートメーションエラーが出ます。 '--解決法がありましたら教えて下さい。 ' OpenRet = Application.GetOpenFilename _ ' ("BMP,*.BMP,JPEG,*.JPG,GIF,*.GIF", , "画像選択") ' If OpenRet = False Then Exit Sub ' With XLImage ' .AutoLoad = True ' .AutoSize = False ' .PictureSizeMode = fmPictureSizeModeZoom ' .PictureAlignment = fmPictureAlignmentCenter ' .Picture = LoadPicture(OpenRet) ' End With ' SavePicture XLImage.Picture, App.Path & "\TmpPict.JPg" '----------------------------------------------------------- End Sub

TAGOSAKU7
質問者

お礼

>Private WithEvents XLImage As MSForms.Image なるほど。。。 FM20.DLLの存在は、以前に見つけていたのですが、それの応用の方法をはじめて見ました。 カンシャです。_(._.)_ ・・・で、逆に質問されてしまいましたね。。。(; ̄▽ ̄A あせあせ LoadPicture ですが、命令後はVB6ならば VB6もEXCELもVB6のタイプライブラリを使用していますが、EXCELのイメージやフォームなどのオブジェクト類は全く別のDLLを元に創成されます。 なのでLoadPictureはVB6で使用した場合、VB6用のピクチャタイプで値を返します。 .Picture = MSForms.LoadPicture(OpenRet) みたいな事ができればよいのですが・・・残念な事にその行は赤々となり、エラーと表示されてしまいます。 同様にSavePictureですが、パラメータはVB6オブジェクトのイメージをパラメータに渡さなければいけません。 回避方法は・・・わかりません・・・お役に立てずすいません。。。

関連するQ&A

  • VBでExcel上PictureBoxダブルクリックイベントを取得したい

    VBでOpenしたExcelシート上にあるPictureBoxをダブルクリックした際に発生するイベントを取得したいと思っております。 ExcelVBAでは普通にPictureeBox_DblClick()で取得できますがVBで取得する場合はPictureBoxオブジェクトをどの様に取得・宣言し、プロシージャ名はどの様に書いたらよいのでしょうか。教えて下さい。お願いします。

  • 現在、VB2005でDrawLineにてPictureBox上にライン

    現在、VB2005でDrawLineにてPictureBox上にラインを描いています。 しかし、VB6とは違いラインを描いているFormが隠れるとラインが消えてしまいます。 PictureBoxのPaintイベントで描くようにすれば良いのでしょうが、ラインを描くのに 数万ループして演算しながら座標を決めてるため、Formが隠れて現れるたびに座標演算処理が働き 重くなり実用的ではありません。 Formが隠れてもラインが消えないように出来れば良いのですが、方法をご存知の方がいらっしゃいましたら 宜しくお願いいたします。

  • VBから、エクセルでファイルを開くには・・・

    またまた、お世話になりますm(__)m 環境はVB.net2003、エクセルは2002でプログラミングの勉強、データ処理をしているのですが、VBでエクセルを開き、そのエクセル上でファイル(csvやテキストなど)を開きたいのですが、VB上でどのように書けばよいのでしょうか? VBでエクセルをたちあげたり、bookやsheetを開くことはできました。 どなたかご教授お願いしますm(__)m

  • VBからEXCELを保存

    VBからEXCELに保存したいのですが、前準備としてEXCELのsheet2で保存します。VBを実行したときにExcelのsheet1に保存したいのですが、どうすればいいかわかりません、おしえてください。多分、保存するときにSheet2を対象にしていると思うので、sheet1を対象にしたいのですが・・・ /****************** VBを実行したときの処理 ********************/ 'アプリケーションの参照 Set xlApp = CreateObject("Excel.Application") 'ブックの参照 Set xlBook = xlApp.Workbooks.Open("C:\テスト\テスト.Xls") 'シートの参照 Set xlSheet = xlBook.Worksheets("Sheet1")

  • PictureBoxのMouseUpイベントを意識的に発生させる方法

    VB.Netで開発しています。 表記の通り、PictureBoxのMouseUpイベントを意識的に発生させる方法はありますでしょうか? 具体的な処理の流れは PictureBox1をドラッグ&ドロップすることで ドロップされた位置によって処理を行っているのですが 制限時間をタイマーで設けていて、制限時間が来たら 現在の位置でドロップ(MouseUp)したいのです。 どなたかいい方法ご存知の方いましたらアドバイスお願いします。

  • ダブルクリックイベントで良いのかどうか?

    お世話になります。 ダブルクリックイベントで、そのセルを赤く色を塗り、尚且つ、 そのセルをダブルクリックした事により、別のワークブックを開き、 また、開いたワークブックのシートの中からある単語を検索して その属性を現在アクティブにしている、ブックのシートに記入しよう としていますが、 まず、下記の様に、ダブルクリックイベントで、セルを赤く塗るまではうまくいったのですが、別のブックを開く事がうまく出来ません。 記述が悪いのか、または標準モジュールに記述するべきなのか分からなく困っています。 どなたかご教授頂きたく宜しくお願い申し上げます。        記 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim Rng As Range, myRng As Range Set Rng = Range("c2:d2,f2") Set myRng = Intersect(Target, Rng) If myRng Is Nothing Then Exit Sub Rng.Interior.ColorIndex = xlColorIndexNone myRng.Interior.ColorIndex = 3 Cancel = True If Intersect(Target, Range("c2")) Then Workbooks.Open Filename:="C:\Documents and Settings\Owner\デスクトップ\台帳.xls" End If End Sub

  • EXCEL VBAから、VBのフォームを開くためには?

    EXCEL VBAからVBへプログラムを移そうと努力しています。 そこで、エクセルのシートのコマンドボタンを押すと、 VBで作成したフォームが開き、そこからEXCELの処理を させたいと考えています。 VBからエクセルの処理は Excel.Application のあたりをつかうことでなんとかなりそうなんですが その逆がわからず行き詰まっています。 EXCELは2000 VBは6.0 です ご存じの方、よろしくお願いします。

  • VB6からExcelにマクロが使われているかを知るには

    VB6でExcelファイルを読み込み、各シートにマクロが使われているかを 知る方法を探しております。(ブック単位でもよいです) Worksheetsオブジェクトのプロパティにはなさそうですし、 何か情報をお持ちの方、ご教授いただければと思います。

  • VBからエクセルファイル作成

    VBでエクセルファイルを作成する処理を作っていて、ファイルは作成されるのですが、自動的にシートが3シート作られます。 作成時にシート数を指定することはできるのでしょうか? ネットでいろいろ調べるのですが、VBからのエクセル操作について書かれているサイトがあまりみつかりません。 よいサイトがありましたら、あわせて教えてください。 よろしくお願いします。

  • VB.NETからエクセルを起動して、エクセルでVBを閉じたい。

    こんにちは。 先日、エクセルのフォームを最前面に配置したいという 質問をさせて頂いたものでございます。 それで、SetWindowPosのAPIで設定する方法を教えて頂いたのですが、 最前面にする事は出来たのですが、フォームを動かすと ブックはその一つ下に現れてしまい、 ブックを最背面に配置するなどを試みてみたのですが、 どうもうまく行かないので、 エクセルから直に立ち上げることが出来ないようにして VB.NETのフォームを作ってエクセルにデータを送ろうかと思いました。 それで、データを送る方法は何とかなりそうなのですが、 VB.NETのフォームからエクセルを起動して、 次にエクセルからそのフォームを出したり、隠したりしたいのですが、 その場合、VB.NETのフォームのなんと言うハンドルを取得すればよいでしょうか? IDにも色々あるようで、どれを使えばよいのか分からなくなってしまいました。 そのIDはVBのフォームを起動した時に、エクセルと共有するiniファイルなどに、書き込んでおこうかと思っています。 よろしくお願いいたします。m(__)m