アプリ版:「スタンプのみでお礼する」機能のリリースについて

添付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 」の質問画像

A 回答 (4件)

#3です。


コードについては、分かりませんが、おそらくプロパティで設定する初期.jpgの情報は、Excelのルートファイル?レジストリなどに保存されつのでは無いかと、、
LoadPictureは、読み込んでいるだけなので、UnLoadするとデフォルトになるのかな、、などと想像します。レジストリなのかルートデータなのか想像の範疇ですが、直接書き込めば(書き替えれば)、実現できると考えます。

プロパティウインドウでフルパスを直接入力出来ないので想像しました。
(直接入力できるものは、書き換えできるような気がします)

今まで考えた事もない事柄なので、知識はありませんが、辿って調べれば情報があるかも知れません。。
    • good
    • 0
この回答へのお礼

Qchan1962さん
重ねてのコメント、有難う御座いました。
頂いたコメントも参考に、C:\Usersに、使いたい写真を、open.jpgの名で、保存して置けば、望みの年のオープニング画像の組み込みはできました。

このアルバムSOFTは、参考図書をベースに、加えて、
沢山のGooの皆様のアドバイスも得て、画像の更新日時ではなく、
デジカメの画像の撮影日を、直接読み取るプログラムも加工して組み込み、
数年がかりで、完成したものです。誕生日以来のプリントしたアルバムは、
全てスキャナーでPCに取り込みBackUpし、プリントは全て焼却しました。

10年振りに、一行のCodeを加えようとして、10日程、悪戦苦闘しましたが、
一行のCode とCoding のタイミング・書く場所で、
本質は、いまだ未解明です。
こんな、へんてこりんな愚問?にこたえる、一行のCODEを期待して、
もう少しアドバイスの書き込みをお待ちしてみます。
(なぜ、手で書き込んだ、初期.jpgが、幽霊の様に現れるのか??)

お礼日時:2021/01/29 00:08

こんばんは、


#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"

ちょっとしつこかったですね。参考になれば幸いです。
    • good
    • 0
この回答へのお礼

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 が分からなくて混乱中です。

お礼日時:2021/01/28 21:30

>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されているかのチェックが必要になります。

ちょっと、私にはハードルが高いようですね。;;
    • good
    • 0
この回答へのお礼

Qchan1962さん 再度のコメント 有難う御座いました。
作業の目的は、年別のアルバム閲覧プログラムの作成です。
2020年、2021年。年ごとにオープニング画像を変えています。
2022年用は、手作業でオープニング画像を差し替えるのではなく、
C:\Users\open.jpgを2022年用に変更するだけで、
2022年用のプログラムが完成し、少し手作業が軽減されるかなが、
目的です。

お礼日時:2021/01/28 01:04

こんばんは、


ご質問の意味が良く理解していないかもですが、
実行終了後、VBEのフォーム上(イメージ)で画像を確認したいと言う事でしょうか?
VBA実行によるイメージプロパティ設定の場合、
LoadPictureなので、Unload Meで破棄されるのだと思います。
エディタでプロパティのPicture をフルパス(ダイアログから)を指定すればVBE編集時でも画像が表示されると思います。
CODE2側と言うよりCODE1側かも知れません。
詳しくは無いのですが、仕様では無いかと思います。
LoadPicture以外の設定方法があるかも知れませんし、記憶の範疇で確度の高い情報とは言えませんが、、参考まで。
    • good
    • 0
この回答へのお礼

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が分からなくて悩んでいます。

お礼日時:2021/01/27 22:40

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

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