プロが教えるわが家の防犯対策術!

VBA初心者です。excel2016を使用しています。

=目標作業=
①「選択」ユーザーフォームのImage1にコマンドボタンから画像保存フォルダにある画像を選択してImage1に表示させる。
②「保存」Image1に選択画像を表示した状態を登録する。
③「終了」ユーザーフォームの終了

以上3工程を行った後にもう一度①「選択」ボタンを押したときに②で登録した画像が表示された状態でユーザーフォームを開きたいです。

=質問=
②「保存」ができません教えていただきたい。

=現在のUserForm1の状況=

Private Sub CommandButton1_Click() ・・・・・・・・・①
'[ファイルを開く]ダイアログボックスを表示
PicFile = Application.GetOpenFilename( _
"画像ファイル,*.jpg;*.jpeg;*.gif;*.tif;*.png;*.bmp")
If VarType(PicFile) = vbBoolean Then Cancel = True: Exit Sub
'画像をロードする
UserForm1.Image1.Picture = LoadPicture(PicFile)
'Imageサイズを自動的に画像に合わせる
UserForm1.Image1.AutoSize = False
End Sub

Private Sub CommandButton2_Click() ・・・・・・・・・②
???
End Sub

Private Sub CommandButton3_Click() ・・・・・・・・・③
Unload UserForm1
End Sub

「Excel ユーザーフォームで表示させた」の質問画像

A 回答 (3件)

こんにちは


UserForm1.Image1にPicture登録後、次回UserForm1.Showした時
前回登録したPictureをLoadしたいと言う事でしょうか

思い付く方法は、いくつかありますが、最も簡単な方法は
力技のような感じになります。

PicFile変数の宣言 モジュールレベル変数またはパブリック変数で宣言
Dim PicFile As String

Private Sub CommandButton1_Click() '①
'[ファイルを開く]ダイアログボックスを表示
PicFile = Application.GetOpenFilename( _
"画像ファイル,*.jpg;*.jpeg;*.gif;*.tif;*.png;*.bmp")
If VarType(PicFile) = vbBoolean Then Cancel = True: Exit Sub
'画像をロードする
UserForm1.Image1.Picture = LoadPicture(PicFile)
'Imageサイズを自動的に画像に合わせる
UserForm1.Image1.AutoSize = False
End Sub
Private Sub CommandButton2_Click() '②
Worksheets(1).Range("A1") = PicFile
End Sub
Private Sub CommandButton3_Click() '③
Unload Me
End Sub

Private Sub UserForm_Initialize() 'UserForm1が開く時に実行される
If Worksheets(1).Range("A1") <> "" Then
On Error Resume Next '念のため
With Image1
.Picture = LoadPicture(Worksheets(1).Range("A1").Text)
.AutoSize = False
End With
End If
End Sub

未検証ですが、
インデックス1のシートのA1セルを利用する方法です。セルは使用しない所であれば何処でも可、セルの書式などを変更しておけば見えないように出来ます

難しい方法としては
UserForm1内にラベルやテキストボックス、を非表示で作り
そのCaptionやTextにデザインモードで書き込むとか、Image1のPictureプロパティに書き込むとかになりますが、UserForm Load時には実行できないのとVBComponentオブジェクトを操作する必要がありますので割愛します。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
>UserForm1.Image1にPicture登録後、次回UserForm1.Showした時
前回登録したPictureをLoadしたいと言う事でしょうか
→まさにその通りです。

そして無事に保存することができました。
Dim PicFile As Stringがないと保存できないことがわかりました。
丁寧にありがとうございました。

また、表示する写真を増やしたりともう少し改良していきたいと思っていますので、またご指導願えたらと思います。

お礼日時:2021/05/15 10:08

登録した画像のパス(変数PicFileの情報)を何処かに保存しておいて、UserForm_InitializeイベントプロシジャでLoadPictureするっていうのが一般的だと思います。


保存先ですが、ブックを再度開いた時も同じ動作がご希望なら、適当なシートの適当なセルに保存しておくことになると思います。
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。
無事に保存することができました。

お礼日時:2021/05/15 10:17

こんにちは



ご指定の状態を固定したければ、通常操作(VBAエディタ)でのFormの編集で、画像を設定した状態にする必要があります。
具体的には、VBProjectからFormにアクセスして編集すれば宜しいかと。

以前、ほぼ同様のご質問がありましたので、参考までに挙げておきます。
https://oshiete.goo.ne.jp/qa/12176329.html
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
参考拝見させていただきました。
私には少々ハードルが高い内容のようでした。
教えていた内容が理解できるようになりたいです。
ご指導ありがとうございました。

お礼日時:2021/05/15 10:13

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A