VBからExcelシート上のPictureBoxに画像を呼び込もうとしていますが、オートメーションエラーが出ます。
どうしてですか?Excel-VBAで同じ事をすると正常に動作します。

'Excel上にあるPictureBoxオブジェクトを取得
Set Image1 = xlSheet.OLEObjects("Image1").Object

'PictureBoxに画像を貼り付ける
With Image1
.AutoLoad = True
.AutoSize = False
.PictureSizeMode = fmPictureSizeModeZoom
.PictureAlignment = fmPictureAlignmentCenter
.Picture = LoadPicture("C:\MyPicture\...\pict.bmp") ←ここでエラー!
End With

開発環境
Win2000(SP2) + VB6.0(SP4) + Excel2000(SP2)

このQ&Aに関連する最新のQ&A

A 回答 (2件)

VBのPictureオブジェクトをExcelのPictureオブジェクトに


代入しているのが、いけないのかも。
API関数のStretchBltかBitBltを使うのはどうでしょう?
    • good
    • 0

>どうしてですか?Excel-VBAで同じ事をすると正常に動作します。



VBだとxlSheetのオブジェクトが定義されていないからではないですか。
ちゃんとExcelオブジェクトを定義してあげてください。

この回答への補足

早速の回答をありがとう御座います。
xlSheetのオブジェクトは正常に取れています。
(他でも使用していますので間違いありません)

'PictureBoxに画像を貼り付ける
With Image1
.AutoLoad = True
.AutoSize = False
.PictureSizeMode = fmPictureSizeModeZoom
.PictureAlignment = fmPictureAlignmentCenter
'ここまでは正常に動作します。
'例えば画像の貼り付け位置を変えたりすると
'指示どおりの動作をしています。
.Picture = LoadPicture("C:\MyPicture\...\pict.bmp") ←ここでエラー!
'このステップにくるとエラーになってしまうのです。
'このプロパティに問題があるように思えるのですが・・・
End With

補足日時:2002/01/24 13:16
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QOLEオートメーションについて教えてください。

こんばんは。
pcにMS08-008のセキュリティパッチをインストールすることを検討しているのですが、言葉の意味が難しいので教えてください。

OLE オートメーション?の脆弱性を解決するものらしいのですが、そのOLE オートメーションがJavaScriptやVBScriptによるリクエストを処理する過程に脆弱性が存在する。
http://www.hotfix.jp/archives/alert/2008/ms08-008.html

OLEオートメーションとはアプリケーションがデータを共有したり制御したりすることを可能にするもの、というところまではなんとなくわかりました。

エクセルやワードに関係があるってところもなんとなくわかりました。

しかし、データの共有とJavaScriptなどのスクリプトによる処理、ってのがまったくイメージがわかないです。

具体的にどういうことなのかお教えいたたいてもよろしいでしょうか。
よろしくお願いします。

Aベストアンサー

「データの共有」というのはどういう事を指すのかについては、こちらに記載があります。
http://www.moug.net/skillup/nksw/nksw15-02.htm

> JavaScriptやVBScriptによるリクエストを処理する
は、「OLEオブジェクトを含んだファイルが、スクリプトの処理の対象になる」と解釈すればよいと思います。
例: 対象のファイルを開いて内容を表示しなさいというスクリプトAがあった場合に、その対象として「あるOLEオブジェクトを含んだファイルB」が選ばれる

QVB.NETでPictureBoxへの描画について

VB.NETでPictureBoxへの描画について
PictureBoxに画像を表示し、余白部分を含めて、マウスで描画できる処理を作成しているのですが、
どうも上手くいかない為、皆さんの知恵をお借りしたいと思い質問させて頂きました。

まず、880×560のPictureBoxを用意し、その中に、600×480の画像を埋め込んでいます。
そのPictureBoxの中で、画像以外の部分(余白)にもマウスで線等を書きたいのです。
画像のみに描く場合は上手くいくのですが、余白を含めると上手くいかなくなってしまい、
困っております。

プログラムの違いは以下の箇所のみです。2の場合は上手くいきます。
1.PictureBox全体に描画する(画像も含め)
Dim g As Graphics = PictureBox1.CreateGraphics
2.画像のみに描画する
Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)

ちなみに、マウスではなく、ボタンクリック時に描画した時は、1の場合でも上手くいきます。
お手数ですが、ご回答の程、よろしくお願いします。

VB.NETでPictureBoxへの描画について
PictureBoxに画像を表示し、余白部分を含めて、マウスで描画できる処理を作成しているのですが、
どうも上手くいかない為、皆さんの知恵をお借りしたいと思い質問させて頂きました。

まず、880×560のPictureBoxを用意し、その中に、600×480の画像を埋め込んでいます。
そのPictureBoxの中で、画像以外の部分(余白)にもマウスで線等を書きたいのです。
画像のみに描く場合は上手くいくのですが、余白を含めると上手くいかなくなってしまい、
困っております。

プログラムの違...続きを読む

Aベストアンサー

余白を含めると上手くいかなくなってしまい という事は、どのような状態の事なのでしょうか?
その辺の事を詳しく書いて頂かないと答えようがないかと。
(VB.NET だけでは、詳しい環境が解りません、質問される場合は、環境等も含め詳しく書くように
して下さい。)


詳しい状況が解らないので、一度、下記コードを試して見て下さい。

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles MyBase.Load
  With PictureBox1
    .Width = 880
    .Height = 560
    .Image = New Bitmap(.Size.Width, .Size.Height)
  End With
  Using g As Graphics = Graphics.FromImage(PictureBox1.Image)
    g.Clear(PictureBox1.BackColor)
    '表示する画像のフルパスを指定して下さい。
    Using bmap As Bitmap = New Bitmap("..\..\..\test.jpg")
      g.DrawImage(bmap, 0, 0, bmap.Width, bmap.Height)
    End Using
  End Using
End Sub

Private Spos As MouseEventArgs
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As _
        System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
  'マウスのドラッグで線を引く
  If e.Button = System.Windows.Forms.MouseButtons.Left Then
    PictureBox1.Image = PictureBox1.Image
    Using g As Graphics = Graphics.FromImage(PictureBox1.Image)
      Using BPen As New Pen(Color.Red, 5)
        g.DrawLine(BPen, Spos.X, Spos.Y, e.X, e.Y)
      End Using
      Spos = e
    End Using
  End If
End Sub
Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As _
         System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
'描画開始位置
  If e.Button = System.Windows.Forms.MouseButtons.Left Then
    Spos = e
  End If
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _
               ByVal e As System.EventArgs) Handles Button1.Click
'保存処理
  With PictureBox1
    If Not (.Image Is Nothing) Then
      .Image.Save("test.bmp", Imaging.ImageFormat.Bmp)
    End If
  End With
End Sub

End Class

余白を含めると上手くいかなくなってしまい という事は、どのような状態の事なのでしょうか?
その辺の事を詳しく書いて頂かないと答えようがないかと。
(VB.NET だけでは、詳しい環境が解りません、質問される場合は、環境等も含め詳しく書くように
して下さい。)


詳しい状況が解らないので、一度、下記コードを試して見て下さい。

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles MyBase.Load
 ...続きを読む

QExcelマクロのオートメーションエラーについて

以前は良かったExcel2003で作成したマクロプログラムを1部修正して実行時に1回オートメーションエラーがでたら、修正部を元に戻してもオートメーションエラーがでるようになってしまいました。
このプログラムをExcel2007の他のPCで実行してもエラーはでません。
どのようにしたら、オートメーションエラーはでないようにできるでしょうか。

Aベストアンサー

>単純に何で元に戻してもだめなのか、又、何でこのファイルを他のPCにコピーしてやれば、実行できるのでしょうか?

上位バージョンで使ったものは、下位バージョンに回しても、そのままの使えないことがあります。ふつうは、下位バージョンでも、外部のライブラリなどを更新していたりするのですが、必ずしもしていないことがあります。もちろん、外部ライブラリが壊れているということもあります。

解決のためにいくつかの方法をするしかないわけで、同じ経験がある人がピタリと当たることがありますが、こちらは、今のところ、何が問題なのか、それを特定する情報は出ていません。オートメーション・オブジェクトを生成するのは、1つだけではありません。本当に数多くあります。

可能性のある方法いくつか試してみていただくしかないのであって、結果オーライだと思います。

オートメーション・エラーというなら、Active Xやいくつかの外部タイプライブラリのはずです。

どこかの行で黄色く反転して、マクロが止まっているなら分かりやすいです。しかし、ランタイムエラーの場合は、プロシージャを直接触れるなら、それらを適当な行で、[ブレイクポイント]などを付けて、どこでエラーが発生するか、検証して行けば、通常、発生しているか見つかるはずです。仮に、数万行でも、上記のようなデバッグのテクニックを使えばそんなに大変なことではありません。

ただし、プロテクトされているなら、製作者にリクエストして、PCのメインテナンスを含めてみてもらわないといけないかもしれません。さっぱり分からないというなら、ベテランの人に頼むしかありません。

もともと、Excel 2003で動いていたというなら、VBAの内容を完全な最初の段階に戻せば動くはずだ、と考えるのは自然ではないでしょうか。前回、そういうことを書いたつもりなのですが……。それに対する反応はされませんでしたね。この考え方は間違っているとお思いでしょうか?

他にも、Office を修復してみるとか。Excelの場合は、ヘルプからアプリケーションの修復をしてみるとか。

いくつか実施してみてください。ただ、ピタリと当ててほしいというなら、私のほうからはもう回答できませんが、他の回答者のためにも、もう少し情報を出さないと難しいと思います。

ただ、外部ライブラリが壊れている場合は、VBAだけの知識では解決は不可能です。

>単純に何で元に戻してもだめなのか、又、何でこのファイルを他のPCにコピーしてやれば、実行できるのでしょうか?

上位バージョンで使ったものは、下位バージョンに回しても、そのままの使えないことがあります。ふつうは、下位バージョンでも、外部のライブラリなどを更新していたりするのですが、必ずしもしていないことがあります。もちろん、外部ライブラリが壊れているということもあります。

解決のためにいくつかの方法をするしかないわけで、同じ経験がある人がピタリと当たることがありますが、こちら...続きを読む

QPictureBoxにPSetしてそれをImageへ

 VBに関して経験の浅い者です。
今、タイトル通り、ピクチャーボックスオブジェクト(名前はPict1とする)に、
Pict1.PSet(i,j),color(適当な数) と言うコードを実行していって描画し、
画像を作ったとします。
 それで、Pict1にそうして描いて表示されている画像を
イメージオブジェクト(名前はImageとする)に送って表示させたいのですが、
方法が分かりません。
 Image.[何か]=Pict1.[ナンか]とすれば良さそうだと言う検討を立ててみたの
ですが、こんな風にプロパティの色々で解決できますでしょうか?

 あと、イメージオブジェクトの説明に、「「AutoRedraw」を有効にしておくと
フォームやピクチャーボックスが変更された時にそれが即複写される」とあったの
ですが、例えば上のPict1の描写を反映させるにはどうすればいいのでしょう?
 Imageに入力する以上はAutoRedrawのターゲット(?に相当する概念)を設定する
必要があると思うのですが、、、

Aベストアンサー

Image.Picture=Pict1.Image

にして、Pict1のオブジェクトの「AutoRedraw」
をTrueにすればできますよ♪

QVC++6.0のオートメーションタブはVS2005の?

VC++6.0でプロパティを追加するとき、
ClassWizard→オートメーションタブ→プロパティの追加(A)
とやっていきますが、2005でどう対応するのか教えてください。
(これを通過しても次でまた困るのかもしれませんが)

Aベストアンサー

MFC ActiveXコントロールのプロジェクトですか?
クラスビューを開いて
作成中のコントロールのライブラリノードを展開します
作成中のコントロールが myCtrl ならば myCtrlLibといったノードです
展開したノードの 2番目の要素を右クリックして 追加 > プロパティの追加 といった手順でしょう

MSDNの『MFC ActiveX コントロール : ストック プロパティの追加』
または
『MFC ActiveX コントロール : カスタム プロパティの追加 』
あたりを参照してみてください

参考URL:http://msdn2.microsoft.com/ja-jp/library/6hx27e5c(VS.80).aspx

QPictureBoxのImageを前面に

 関数のグラフを描くプログラムを作りましたが、グラフが背面にあり、座標平面の格子に消されています。前面に出す方法はありませんか。
 FormにPictureBoxを載せ、格子はe.Graphics.DrawLineで描き、グラフはビットマップに描き、PictureBoxのImageで置きました。宜しくお願いします。

Aベストアンサー

格子をBitmapに描画して PictureBoxのBackgroundImageに設定して
グラフのビットマップを Imageプロパティに設定すれば 希望通りになると思いますよ

Q日本ビジネスオートメーションっていう会社を知っていますか

10年以上前になってしまうんですが、
神奈川県川崎近辺に
 「日本ビジネスオートメーション」っていう
コンピュータ会社があったのですが、
現在どうなっているか知っている方はいらっしゃいますか?

 *たぶん、それなりに大きな会社だったと記憶しているんですけど

Aベストアンサー

現・東芝情報システム(株)やおまへんか

参考URL:http://www.tjsys.co.jp/kai/enkaku.htm

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

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

Formが隠れてもラインが消えないように出来れば良いのですが、方法をご存知の方がいらっしゃいましたら
宜しくお願いいたします。

Aベストアンサー

下記ではいかがでしょうか?
Private Sub Button1_Click(ByVal sender As System.Object, _
             ByVal e As System.EventArgs) Handles Button1.Click
  PictureBox1.Image = New Bitmap(PictureBox1.Width, PictureBox1.Height)
  Using g As Graphics = Graphics.FromImage(PictureBox1.Image)
    g.Clear(PictureBox1.BackColor)
    g.DrawLine(Pens.Black, 0, 40, 100, 40)
  End Using
End Sub

QExcel VBAでオートメーションエラーがでる

いつもお世話になっております。

Sheets("修正シート").Select
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
Sheets("箇所見る").Select
Range("A1").Select

上記のところで実行エラー オートメーションエラーです。
とメッセージがでます。
何がいけないのでしょうか?
よろしくお願い致します。

Aベストアンサー

シートモジュールに書いていませんか?
シートが削除された瞬間に実行中のマクロが消滅するので、以後の構文は実行不可能になります。

標準モジュールに記述して下さい。

QVBのPictureBoxで画像をドラッグして表示範囲を移動したい

お世話になります。
VB.netのPictureBoxに画像を貼り付け表示しているのですが、
PictureBoxよりも大きい画像を表示した際にスクロールバーで表示範囲の移動はできるのですが、
これをスクロールバーではなくマウスをドラッグして表示範囲の移動をしたいのです。

どのようにすればできますか?
よろしくお願いします。

Aベストアンサー

MouseDown、MouseMove、MouseUpを適切に処理してやればいいようですよ

'Dragしているかのフラグと ドラッグを開始した点を覚える変数を準備
dim bDrag as Boolean, ptDrag as Point

Private Sub PictureBox1_MouseDown(引数省略)
  if bDrag = False then
    bDrag = True
    ptDrag = e.Location
  end if
End Sub

Private Sub PictureBox1_MouseMove(引数省略)
  if bDrag then
    dim pt as Point = PictureBox1.Parent.PointtoClient( Cursor.Location )
    PictureBox1.Location = pt - ptDrag
  end if
End Sub

Private Sub PictureBox1_MouseUp(引数省略)
  bDrag = False
End Sub
といった具合でどうでしょう ・・・

MouseDown、MouseMove、MouseUpを適切に処理してやればいいようですよ

'Dragしているかのフラグと ドラッグを開始した点を覚える変数を準備
dim bDrag as Boolean, ptDrag as Point

Private Sub PictureBox1_MouseDown(引数省略)
  if bDrag = False then
    bDrag = True
    ptDrag = e.Location
  end if
End Sub

Private Sub PictureBox1_MouseMove(引数省略)
  if bDrag then
    dim pt as Point = PictureBox1.Parent.PointtoClient( Cursor.Location )
    Pict...続きを読む


人気Q&Aランキング

おすすめ情報