Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1953 / 13645 ツリー ←次へ | 前へ→

【70836】ユーザフォームの保存 美貴 12/1/4(水) 23:43 質問[未読]
【70837】Re:ユーザフォームの保存 ちん 12/1/5(木) 0:21 発言[未読]
【70838】Re:ユーザフォームの保存 UO3 12/1/5(木) 0:29 発言[未読]
【70839】Re:ユーザフォームの保存 美貴 12/1/5(木) 6:09 発言[未読]
【70841】Re:ユーザフォームの保存 UO3 12/1/5(木) 15:26 回答[未読]
【70843】Re:ユーザフォームの保存 美貴 12/1/5(木) 18:41 お礼[未読]
【70849】Re:ユーザフォームの保存 Jaka 12/1/6(金) 16:34 発言[未読]
【70853】Re:ユーザフォームの保存 美貴 12/1/6(金) 22:09 お礼[未読]
【70859】Re:ユーザフォームの保存 UO3 12/1/7(土) 10:44 発言[未読]
【70860】Re:ユーザフォームの保存 美貴 12/1/7(土) 11:00 発言[未読]
【70862】Re:ユーザフォームの保存 UO3 12/1/8(日) 18:47 発言[未読]
【70863】Re:ユーザフォームの保存 UO3 12/1/8(日) 19:25 発言[未読]
【70864】Re:ユーザフォームの保存 美貴 12/1/8(日) 21:11 お礼[未読]

【70836】ユーザフォームの保存
質問  美貴  - 12/1/4(水) 23:43 -

引用なし
パスワード
   こんばんは♪

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

VBAで変更したユーザフォームを保存して
次回のデフォルトにすることは可能でしょうか?
例えば、captionにある値を設定しておいて
次回にそのユーザフォームを呼び出したときに
そのcaption値をデフォルトにしたいんです。

どうぞよろしくお願い致します♪

【70837】Re:ユーザフォームの保存
発言  ちん  - 12/1/5(木) 0:21 -

引用なし
パスワード
   ▼美貴 さん:こんばんわ、ちんといいます。
私の場合は、データシートと設定シートを良く使用います。
設定シートで、フォームに表示する値を保存しておき、
フォーム起動時に、設定シートより値を読み込んで使用しています。
昔は、テキストデータでやっていました。

参考までに・・・

>こんばんは♪
>
>いつもお世話になっております。(^。^)
>
>VBAで変更したユーザフォームを保存して
>次回のデフォルトにすることは可能でしょうか?
>例えば、captionにある値を設定しておいて
>次回にそのユーザフォームを呼び出したときに
>そのcaption値をデフォルトにしたいんです。
>
>どうぞよろしくお願い致します♪

【70838】Re:ユーザフォームの保存
発言  UO3  - 12/1/5(木) 0:29 -

引用なし
パスワード
   ▼美貴 さん:

こんばんは

イメージがはっきりとはつかめないんですが。

1.もし、ユーザーフォームを表示し、様々な編集を加えたものを、次回
 このマクロブックを開いてユーザーフォームを表示したときに、それら情報を
 継承して、最初から、その状態で表示したいということでしょうか?

 これは、単純に(?)継承したい値をUnloadする前に(QUERYCLOSEあたりで)「どこか」に保存しておき
 Initializeルーティンで、それらを抽出してセットするんでしょうか。「どこか」とは、それこそ様々。
 隠しシートを用意しておいて、そこに保存するなりレジストリを利用するなり。

2.そうではなく、ユーザーフォーム作成時に、なにがしかの編集済み(設定済み)のイメージを
 テンプレートにしたいということでしょうか?
 これは、これで単純に(?)できあがりのユーザーフォームをエクスポートしておき、テンプレートとして
 使いたいときにインポートするということになりましょうか。

具体的に何をされたいのか、わからないでレスしてますのではずしていればスルー願います。

【70839】Re:ユーザフォームの保存
発言  美貴  - 12/1/5(木) 6:09 -

引用なし
パスワード
   ▼ちんさん、U03さん

早速のレスありがとうございます。(^。^)
私の説明不足ですみませぬぅ(>_<)

やりたいのは以下です♪

・VBAでよく呼び出すマルチページのユーザフォームがあります。
・このユーザフォームの背景色をユーザが指定できるように
しています。
・ピクチャを貼り付ける方法をとっていますが、セルからのjpeg
作成の処理が不安定なために、ときどき失敗して
うまく処理がつながらずに、背景色設定ができないことがあります。
・それを避けるために、一旦貼り付けたピクチャは、その内容が
変わらないかぎり、そのままの状態でユーザが使用できるように
したいです。

つまり、ユーザフォームに任意のピクチャを貼り付けたら
その状態を次回のユーザフォーム呼び出しまで保存しておきたいんです。
毎回貼り付けは肝心のjpegファイルがうまく作られていなかったり
するので避けたいんです。

つたない説明ですみません(>_<)

どうぞよろしくお願い致します。

P.S.
今日が仕事はじめなので、レスは夜になります。
からだがちゃんとついて行くかなぁ(^_^;)

【70841】Re:ユーザフォームの保存
回答  UO3  - 12/1/5(木) 15:26 -

引用なし
パスワード
   ▼美貴 さん:

>・このユーザフォームの背景色をユーザが指定できるように
>しています。
>・ピクチャを貼り付ける方法をとっていますが、
>つまり、ユーザフォームに任意のピクチャを貼り付けたら
>その状態を次回のユーザフォーム呼び出しまで保存しておきたいんです。

ちんさんも私も申し上げていますが、設定シートを準備して、フォームが閉じられる時に
そこにピクチャイメージを保存しておき、次回、フォームが立ち上がる時に復元すればよろしいかと。

ユーザーフォームの背景色をピクチャを貼り付ける方法でということは、
ユーザーフォームのPictureプロパティにセットしているということでしょうか?
どういった操作でそれを行っているかはわかりませんが、いかではいかがですか。

・まず設定用のシートを準備します。以下のコードではシート名を"設定"にしてあります。
 このシートは非表示にしておかれたらいいと思います。
・そのシートに「コントロールツールボックス」のImageコントロールを配置しておきます。
 (いわゆるActiveXコントロールです)
 以下のコードでは、名前を"Image1"にしています。
・で、当該ユーザーフォームモジュールに。

Private Sub UserForm_Initialize()
  Me.Picture = Sheets("設定").OLEObjects("Image1").Object.Picture
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Sheets("設定").OLEObjects("Image1").Object.Picture = Me.Picture
End Sub

【70843】Re:ユーザフォームの保存
お礼  美貴  - 12/1/5(木) 18:41 -

引用なし
パスワード
   ▼UO3 さん:

こんばんは♪

ありがとうございます。
早速tryしてみますね♪
(大丈夫かなぁ(^_^;))

【70849】Re:ユーザフォームの保存
発言  Jaka  - 12/1/6(金) 16:34 -

引用なし
パスワード
   VBプロジェクトをいじればなんとかできるけど...。
因みにフォームがロードされている状態では書き換えは出来ません。
A1にフルパスが書いてあるとして。
尚、97の時は出来たりできなかったり、めちゃくちゃ不安定だった。
2003でやってみた時、書き換え後にブックを上書き保存して、次に開いて
フォームを立ち上げた時だったっけ?にマクロが無効やらどんたらこうたらいわれた。
ブックを手開き直しせばアラートはなくなったけど。
と、かなり不安定で危険かと。

フォームモジュール

Private Sub CommandButton2_Click()
Application.OnTime Now(), "書き換え"
Unload Me
End Sub

Private Sub CommandButton3_Click()
Application.OnTime Now(), "消す"
Unload Me
End Sub

標準モジュール

Sub 書き換え()
For Each myCtl In ThisWorkbook.VBProject.VBComponents.Item("UserForm1").Designer.Controls
  If TypeName(myCtl) = "Image" Then
    myCtl.Picture = LoadPicture(Range("A1").Value)
  End If
Next
End Sub

Sub 消す()
For Each myCtl In ThisWorkbook.VBProject.VBComponents.Item("UserForm1").Designer.Controls
  If TypeName(myCtl) = "Image" Then
    myCtl.Picture = Nothing
  End If
Next
End Sub

【70853】Re:ユーザフォームの保存
お礼  美貴  - 12/1/6(金) 22:09 -

引用なし
パスワード
   ▼Jaka さん:

こんばんは♪

ご丁寧にありがとうございますぅ(^。^)

確かにユーザフォーム関係は特に不安定ですよね。
私も先日、
combobox.valueと.textの違いで
翻弄されちゃいました。
どっちでもいいと思って混在で使用してて、OKだったのに
ある日突然色々とほころびが出ました。
結局、.valueで統一したら、何とか落ち着きました。(^_^;)

教えて頂いたコードを使って色々tryしてみますね♪

【70859】Re:ユーザフォームの保存
発言  UO3  - 12/1/7(土) 10:44 -

引用なし
パスワード
   ▼美貴 さん:

おはようございます

Jakaさんの回答と、それに対する美貴さんの反応(?)で、私が誤解している部分がわかりました。
私の解釈は
1.操作者が「何らかの操作で自分が好む」画像を貼り付ける。
2.その操作者の処理が「不安定?」で、失敗することもある。
3.あるいは、当初のjpegファイルが、別の場所に移動されたり、名前が変わったり、削除されたりすることもある。
 (これは、私の考えすぎ?)
4.なので、一度張り付け成功したら、以降はそれを継承したい。

この3.を強くイメージしました。

もし、最初は、プロパティで美貴さんが初期値としての画像をセットしている。
それを、操作者が、「オプション」として画像を入れ替え、それを継承したいといことなら
私の回答で言えば、Initializeでコピーするまえに、シートのImage1のPictureがNothingではないときにという
チェックをいれる必要がありますね。

今、エクセルがない環境におりまして稼動テストはできませんが。

【70860】Re:ユーザフォームの保存
発言  美貴  - 12/1/7(土) 11:00 -

引用なし
パスワード
   ▼UO3 さん:

こんにちは♪

ご丁寧にありがとうございます♪

私のやりたいことをもう少し補足しますね(^_^;)

私が作ったExcelのマクロには、ユーザフォームが
複数使われています。
そのユーザフォームの背景色をユーザが指定できるように
したいです。
楽しくなりますよね、マイExcelって感じで(^。^)

ユーザフォームは、マルチページを使用してるものもあるので
ピクチャを貼り付ける方法を使っています。
セルの色塗り情報を一旦jpegファイルにしておいて
それを貼り付けた状態でユーザフォームが立ち上がるように
しています。
しかし、この「セルの色塗り情報を一旦jpegファイルにしておいて
」の処理が少し不安定なので、ユーザフォーム立ち上げ時に
ピクチャ貼り付けを毎回してると
指定したjpegファイルが存在しなかったりしておかしくなるんです。
それを避けるために、jpegファイル自体に変更がないのであれば
貼り付け処理自体を省略したいです。
このjpegファイルの名前は色指定で前のものとぶつからないように
毎回変えていますが、
上記の貼り付け処理が省略可能であれば
固定名でもかまわないと思っています。

説明がホントヘタクソですみません(>_<)

どうぞよろしくお願い致します♪

【70862】Re:ユーザフォームの保存
発言  UO3  - 12/1/8(日) 18:47 -

引用なし
パスワード
   ▼美貴 さん:

こんばんは

エクセルの使える環境に帰ってきました。
なんとなく、やっておられることはイメージできます。
(実際に操作者が色を選択する部分のコードを例として1つでもアップいただければ
 もっと、皆さんからアイデアも含めた様々な回答があると思いますが)

>楽しくなりますよね、マイExcelって感じで(^。^)

ですね!
美貴さんが投稿された他のスレもあわせて拝見すると、いろいろ工夫しておられるようで。
(ただ・・あのセルにコードを記述してそれをエミュレートして実行させる件は、もしかしたら
 ちょっと「企画先行」といいましょうか、必要性からみると、?かもしれないなぁ・・なんて。
 テクニック論としては興味深いものでしたけど)

さて、本題です。
私がイメージしていたのは、なんらかの画像を貼り付けるということだったんですが、
画像は画像でも、背景色用につくられた画像イメージだったようですね。
それでも、画像は画像ですから、私がアップした方法でも、問題はないと思っていますが。
お試しいただけましたか?

たとえば貼り付ける。で、その後、オリジナルのjpegデータをなんらかの操作で消してしまったとしても
いったん貼り付けたものは次回ユーザーフォームを立ち上げたときには継承されます。
例では、1つだけのコントロールでしたけど、これを、必要なだけシートに保存用のImageコントロールを
用意すればよろしいとおもうのですが?

ところで、目的が「画像」を貼り付けることというより、「背景色」を操作者好みに設定してもらうということなら
こちらの処理で、書式メニューから表示させるカラーパレット「もどき」を表示して操作者に色を選ばせている
ものがありまして、もしかしたら、色ごとに準備してある「画像」選ぶのではなく、その機能を組み込んでも
おもしろいかなと思ったりしています。

これは作り込みのカラーパレット「もどき」ユーザーフォーム使います。

別案としては、シートのセルの背景色を様々な色にしておいて、操作者が、好みの色のセルを選んで、それを
BackColorにセットしてやることも1つの方法かもしれません。
(InputBoxメソッドのType8あたりと組み合わせて。)

【70863】Re:ユーザフォームの保存
発言  UO3  - 12/1/8(日) 19:25 -

引用なし
パスワード
   ▼美貴 さん:

連投、恐縮です。
興味はないかもしれませんが、最後にアップした案です。
"背景色"シートのセルに様々な背景色をセットしておきます。
(使用時には非表示にしておきます)

ユーザーフォームの背景色自体を変更します。
以下の例ではユーザーフォームをクリックすると背景色指定を動かします。
もし、いったん設定した背景色を、その後、再度フォームを開いたときのも継承する必要があれば
QueryCloseで「例」の設定シートに、背景色番号を保存しておき、Initializeで継承することもできます。

ユーザーフォーム側

Private Sub UserForm_Click()
  Me.Hide
  Call SetBackColor(Me)
  Me.Show
End Sub

標準モジュール

Sub SetBackColor(myFm As msforms.UserForm)
  Dim curSh As Worksheet
  Dim sel As Range
  
  Set curSh = ActiveSheet
  With Sheets("背景色")
    .Visible = True
    .Select
    On Error Resume Next
    Set sel = Application.InputBox("背景色にしたいセルを選択してください", "背景色選択", Type:=8)
    On Error GoTo 0
    If Not sel Is Nothing Then
      myFm.BackColor = sel(1).Interior.Color
    End If
    .Visible = False
  End With
  
  curSh.Activate
  Set sel = Nothing
  Set curSh = Nothing
  
End Sub

【70864】Re:ユーザフォームの保存
お礼  美貴  - 12/1/8(日) 21:11 -

引用なし
パスワード
   ▼UO3 さん:

こんばんは♪
美貴です(^。^)

ご丁寧にありがとうございます。
私にとってはなかなか難解なコードになります(>_<)
少しお時間を頂いてtryしたいと思います。

引き続きよろしくお願い致します。

1953 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free