![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
添付CODE1で、ユーザーフォームのAutoOpenのImage1(空白)に、open.jpgを貼り付けました。
この段階では、PC画面に、Image1のopen.jpgは写っています。
CODE2で動作終了後、visual basicに戻り、Image1を確認しても空白です。
CODE2をどう直せば保存されるのか、アドバイスを頂ければありがたいです(10年ぶりのVBAです)。
'/// CODE1 標準モジュールに記述
Sub Auto_Open()
AutoOpen.Image1.Picture = LoadPicture("C:\Users\open.jpg")
AutoOpen.Show
End Sub
'/// CODE2 ユーザーフォーム AutoOpen に記述
Sub CommandButton1_Click()
ActiveWorkbook.Save
Unload Me
Application.Quit
End '/// エクスプローラーに戻る
End Sub
![「VBA ユーザーフォーム Image1 」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/a/543046084_60110490d7e23/M.jpg)
No.4ベストアンサー
- 回答日時:
#3です。
コードについては、分かりませんが、おそらくプロパティで設定する初期.jpgの情報は、Excelのルートファイル?レジストリなどに保存されつのでは無いかと、、
LoadPictureは、読み込んでいるだけなので、UnLoadするとデフォルトになるのかな、、などと想像します。レジストリなのかルートデータなのか想像の範疇ですが、直接書き込めば(書き替えれば)、実現できると考えます。
プロパティウインドウでフルパスを直接入力出来ないので想像しました。
(直接入力できるものは、書き換えできるような気がします)
今まで考えた事もない事柄なので、知識はありませんが、辿って調べれば情報があるかも知れません。。
Qchan1962さん
重ねてのコメント、有難う御座いました。
頂いたコメントも参考に、C:\Usersに、使いたい写真を、open.jpgの名で、保存して置けば、望みの年のオープニング画像の組み込みはできました。
このアルバムSOFTは、参考図書をベースに、加えて、
沢山のGooの皆様のアドバイスも得て、画像の更新日時ではなく、
デジカメの画像の撮影日を、直接読み取るプログラムも加工して組み込み、
数年がかりで、完成したものです。誕生日以来のプリントしたアルバムは、
全てスキャナーでPCに取り込みBackUpし、プリントは全て焼却しました。
10年振りに、一行のCodeを加えようとして、10日程、悪戦苦闘しましたが、
一行のCode とCoding のタイミング・書く場所で、
本質は、いまだ未解明です。
こんな、へんてこりんな愚問?にこたえる、一行のCODEを期待して、
もう少しアドバイスの書き込みをお待ちしてみます。
(なぜ、手で書き込んだ、初期.jpgが、幽霊の様に現れるのか??)
No.3
- 回答日時:
こんばんは、
#2お礼を拝見し、なるほどと思うところがありました。
すでに出来ているプログラムに汎用性を持たせたいと言う事と解釈いたしました。 すでにフローが出来ていると思いますしどのようなロジックが組まれているか分かりませんが、画像の抽出部分を考えた場合、下記のようなロジックはいかがでしょう。
オープニング画像の名前を 例えば、2020_open.jpg、、2021_open.jpg,,
2022_open.jpg などとして、XXXX_open.jpgのxxxx部分を
シートセル(インプットボックスなどでもOK)から取得する。
アルバム画像ファイルもフォルダ名別にまとめ同階層に保存、フォルダ名を例えば 2020_Picture として場合。
仮に シートインデックス1のA1セルに年数を入力して保存ののち
Sub Auto_Open() (開く)と sheet(1).Range("A1").Value値を参照してLoadPictureが実行される形。そうすれば、VBAを編集しなくともA1セルの値を変えるだけで(画像の振り分け保存は必要)該当年数のPictureが表示されるのでは、と思います。
Sub Auto_Open()
AutoOpen.Show
End Sub
AutoOpen UserFormモジュール
Private Sub UserForm_Initialize()
AutoOpen.Image1.Picture = _
LoadPicture("C:\Users\" & Sheets(1).Range("A1") & "_open.jpg")
End Sub
アルバムの画像をどのように取得しているか分かりませんが、
フォルダパスは、こんな感じ、、
path = "C:\Users\" _
& Sheets(1).Range("A1") & "_Picture"
ちょっとしつこかったですね。参考になれば幸いです。
Qchan1962さん
三度目の、ご丁寧なコメント、有難う御座いました。
UserForm_Initialize() やセルからの年度の読み込みは、
改めてトライしてみて、よく理解できました。
***まだ残っている疑問点は、
① 自分で作成したユーザーオーム:AutoOpen.Image1に、
手動で、デフォルト画像:初期.jpgを埋め込みました。
② VBAの、Auto_Open() や、UserForm_Initialize() で、
AutoOpen.Image1に、"C:\Users\open.jpg"を、Loadしました。
run結果:アルバムのオープニング画面は、希望通り、open.jpg表示で〇。
終了ボタンのクリック:
Unload Me Application.Quit End '/// エクスプローラーに戻り〇。
混乱している疑問点:
終了ボタン: いたずらで書き直し
**ボタンクリックの段階では、"C:\Users"にある画像は、open.jpgのみ!
Unload Me
AutoOpen.Show '///Application.Quit End を書き直し
結果:初期.jpgが表示される ???????
AutoOpen.Image1を、初期.jpgから、上書きして、open.jpgに変更したが、
その結果がSaveされていない。どこかのタイミングで、この変更結果を、
SaveするCodingが必要な様ですが、このCode が分からなくて混乱中です。
No.2
- 回答日時:
>open.jpgが残る
ごめんなさい、初期.jpgと入れ替わると言う意味でしょうか、、
UserFormにLoadPictureでイメージを設定する場合、
デフォルト(エディタ上)設定は、設定できないようです。
通常?かは、分かりませんが、
標準モジュール
Sub Auto_Open()
AutoOpen.Show
End Sub
UserFormモジュール
Private Sub UserForm_Initialize()
Image1.Picture = LoadPicture("C:\Users\open.jpg")
End Sub
UserFormが表示される度、 Image1.Pictureが設定される
LoadPictureで更新する場合、
Image1.Picture = LoadPicture("C:\Users\hoge.jpg")
Me.Repaint '念のため
シートモジュールなどからの
Sub CommandButton1_Click() でフォームを閉じる場合
エラー対策として、loadされているかのチェックが必要になります。
ちょっと、私にはハードルが高いようですね。;;
Qchan1962さん 再度のコメント 有難う御座いました。
作業の目的は、年別のアルバム閲覧プログラムの作成です。
2020年、2021年。年ごとにオープニング画像を変えています。
2022年用は、手作業でオープニング画像を差し替えるのではなく、
C:\Users\open.jpgを2022年用に変更するだけで、
2022年用のプログラムが完成し、少し手作業が軽減されるかなが、
目的です。
No.1
- 回答日時:
こんばんは、
ご質問の意味が良く理解していないかもですが、
実行終了後、VBEのフォーム上(イメージ)で画像を確認したいと言う事でしょうか?
VBA実行によるイメージプロパティ設定の場合、
LoadPictureなので、Unload Meで破棄されるのだと思います。
エディタでプロパティのPicture をフルパス(ダイアログから)を指定すればVBE編集時でも画像が表示されると思います。
CODE2側と言うよりCODE1側かも知れません。
詳しくは無いのですが、仕様では無いかと思います。
LoadPicture以外の設定方法があるかも知れませんし、記憶の範疇で確度の高い情報とは言えませんが、、参考まで。
Qchan1962さん
設問が上手く表現でき無かった問に、コメントを頂き、有難う御座いました。
手動で、開発→Visual Basic→Pictureで、初期.jpgを、AutoOpen.Image1に埋め込みました。
CODE2は、Private Sub CommandButton1_Click() End End Sub に書き換えました。
これでRunすると、PC画面に、open.jpgが表示されます。
終了後に確認すると、AutoOpen.Image1には、初期.jpgが埋め込まれています。
終了後に、AutoOpen.Image1に、open.jpgが残るCodingが分からなくて悩んでいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
Excel ユーザーフォームで表示させた画像をユーザーフォーム上で保存したい
Visual Basic(VBA)
-
【エクセルのマクロ】クリップボードのbitmapをフォームに表示させたい
Visual Basic(VBA)
-
【エクセル】シート内の表をUserFormに画像として表示させる方法
Excel(エクセル)
-
-
4
EXCEL VBA 複数のImageコントロールにクリップボードに保存されている画像を表示したい
Visual Basic(VBA)
-
5
エクセルで貼り付けたオブジェクトの画像をユーザーフォームのイメージコントロールで表示する方法
Excel(エクセル)
-
6
エクセルのVBAでクリップボードにコピーした画像をpng(or jpg or bmp)保存したい
Visual Basic(VBA)
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
ユーザーフォームで動的(Me.Controls.Add)に作成したコントロールの削除
Visual Basic(VBA)
-
9
UserForm1.Showでエラーになります。
工学
-
10
VBAのユーザーフォームのイメージコントロールに読み込んだ画像を左に90°回転させたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで別モジュールへの変数の受...
-
VBA This Workbookモジュール...
-
関数の引数にクラスを使いたい
-
Application.OnKey:項目入力中...
-
ユーザー定義関数に#NAME?が返...
-
別シートに罫線がひけない
-
EXECEL VBA コマンドボタンか...
-
PC2-3200(DDR2 SDRAM)搭載機にP...
-
エクセルVBAでシートモジュール...
-
モジュールの最大数はいくつな...
-
メモリーの相性
-
Form間の値の渡し方
-
エクセルのユーザー関数が小文字に
-
Excel VBAで、ユーザーフォーム...
-
Access VBA標準モジュールにつ...
-
ユーザーフォームに最小化・最...
-
Excel VBAでグローバルな変数は...
-
VBAで旧字体を異字体に一括で変...
-
標準モジュール
-
Excel VBAでリンク切れをチェッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
グラフのX,Y座標を取得したい
-
Excel VBA 『Call』で呼び出す...
-
VBAで別モジュールへの変数の受...
-
エクセルVBAでシートモジュール...
-
'Range'メソッドは失敗しました
-
VBでグローバル変数を宣言するには
-
モジュールの最大数はいくつな...
-
VBAで旧字体を異字体に一括で変...
-
モジュールとは何ですか
-
Excel VBAで、ユーザーフォーム...
-
【vba】フォームに書いてあ...
-
VBA This Workbookモジュール...
-
Form間の値の渡し方
-
標準モジュールを削除したい。(...
-
Excel VBA 定義されたプロージ...
-
Access VBA標準モジュールにつ...
-
Excel VBA 標準モジュール内で...
-
本当にPublicな変数(配列で)
おすすめ情報