🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

3回答

4897閲覧

VBAでシート上のImageに画像を挿入したい(関数は標準モジュール内)

SkyRocket

総合スコア26

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

1クリップ

投稿2021/03/16 17:05

行いたいこと
タイトルのことを行いたいです。

手順
手順1.「Sheet2」シートにて挿入➝Active Xコントロール➝イメージをクリックし、イメージをエクセル上に作成。
手順2.次のtest関数を実行し「Sheet2」シートに画像を挿入。

困っていること
手順2の関数についてです。

VBAの(標準モジュールではないほうです)「Sheet2」に次の関数を記載し実行するとBMP画像がImage1に挿入されます。

VBA

1Public Sub test() 2 Dim Pic As Object 3 Set Pic = LoadPicture("bmp画像ファイルのパス") 4 Image1.Picture = Pic 5End Sub

この関数を「Sheet2」のところに記載はせず、
標準モジュール「Module1」に記載し実行できるようにしたいと思っています。
この処理以降にImage型で処理していきたいと考えています。
次のように試しましたが、「オブジェクト変数またはWithブロック変数が設定されていません。」
と表示され困っています。どなたかご教示いただけますと幸いです。

VBA

1Public Sub test() 2 Dim Pic As Object 3 Set Pic = LoadPicture("bmp画像ファイルのパス") 4 Dim Img As Image 5 Img.Picture = Pic 6End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

他の方のご回答にもありますがImgが標準モジュールから見えないからです。
この方法がよいかどうかは別ですが、問題を解決するにはImage1を渡してやればいいです。

vba

1Public Sub test(Img As Image) 2 Dim Pic As Object 3 Set Pic = LoadPicture("bmp画像ファイルのパス") 4 'Dim Img As Image 5 Img.Picture = Pic 6End Sub

呼び出すときはこんな感じかな

vba

1call test(Image1)

ただfunctionにしてLoadPictureを返せばいいだけなような気もする。

vba

1Public Function test() As Object 2 Dim Pic As Object 3 Set Pic = LoadPicture("bmp画像ファイルのパス") 4 Set test = Pic 5End Sub

呼び出し

vba

1Image1.Picture = test

ここまできたら直接LoadPicture書けばよくね?ってなる。

vba

1Image1.Picture = LoadPicture("bmp画像ファイルのパス")

特に検証はしていません。思い付きで書いています。

投稿2021/03/17 06:32

sousuke

総合スコア3830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SkyRocket

2021/03/18 13:52

ご回答頂きありがとうございます! 参考になるコードをいくつかご記載頂き、とても参考になりました。
guest

0

Active Xコントロールのイメージに対する処理だとすると

VBA

1 Dim Img As Image 2 Img.Picture = Pic

SkyRocketさん提示のこのコードでは「Img」が何処の誰なのかがわかりません。
Sheet1.Image1.Picture
のようにSheet1のImage1と指定して誰を指しているかを明確にする必要があります。

投稿2021/03/16 22:26

xail2222

総合スコア1508

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SkyRocket

2021/03/18 13:51

ご回答頂きありがとうございます! 何故できないのかの理由や、指定の仕方をご記載頂き、参考になりました。
guest

0

私の場合は、Pictures.Insertメソッドを使っています。

VBA

1Sub Macro7() 2 With ActiveSheet.Pictures.Insert("C:\Work\Sample1.jpg") 3 .Top = Range("B3").Top 4 .Left = Range("B3").Left 5 End With 6End Sub

他にShape.AddPictureメソッドを使う方法

VBA

1Sub AddPictureSampLinkPaste() 2 Dim myFileName As String 3 Dim myShape As Shape 4 5 myFileName = ActiveWorkbook.Path & "\mogtan.gif" 6 7 '--(1) 選択位置に画像ファイルを挿入し、変数myShapeに格納 8 Set myShape = ActiveSheet.Shapes.AddPicture( _ 9 Filename:=myFileName, _ 10 LinkToFile:=True, _ 11 SaveWithDocument:=False, _ 12 Left:=Selection.Left, _ 13 Top:=Selection.Top, _ 14 Width:=0, _ 15 Height:=0) 16 17 '--(2) 挿入した画像に対して元画像と同じ高さ・幅にする 18 With myShape 19 .ScaleHeight 1, msoTrue 20 .ScaleWidth 1, msoTrue 21 End With 22End Sub

投稿2021/03/16 19:59

casaganai

総合スコア144

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SkyRocket

2021/03/18 13:48

ご回答頂きありがとうございました!参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問