牛、豚、鶏、どれか一つ食べられなくなるとしたら?

Excel のユーザーフォームに複数のラベルを設置しました。
この複数のラベルのCaptionプロパティを一括で変換したいと思い
次のようなプロージャを考えました。

まだテスト段階なので、ユーザーフォーム上に「ラベル名更新ボタン」を設置して
このボタンをクリックすることで次のプロージャを実行します。

Private Sub ラベル名更新ボタン_Click()
Dim ws As Worksheet
Set ws = Worksheets("サンプル") '「サンプル」sheet(データベース)の1行目の内容を一括でCaptionに設定したい。
Dim n As Long
n = WorksheetFunction.CountA(ws.Range("1:1"))

Dim i As Long
For i = 1 To n
With MyForm.Controls("Label" & i) 'ラベル名は Label1, Label2,…となっている
.Caption = ws.Cells(1, i)
End With
Next
End Sub

これで、「ラベル更新ボタン」をクリックすると、
画面上ではラベルの文字列が一括変換されます。
しかし、ユーザーフォーム編集画面にもどると、Caption名は
プロージャの実行前の状態に戻ってしまいます。
(というか、Subプロージャが終了しない?VBEで実行中の状態のままになっている。■ボタンで終了しないといけない。)

どうしたらよいでしょう?

A 回答 (3件)

こんにちは



ご提示のコードは、単に、実行時にFormのラベルを変更するものです。
ですので、編集画面での値を変更することはできません。

>コーディングを効率よく行おうと思っているので、そのような効果を期待しました。
何が効率がよいのか理解不能ですが、Initialize時にご提示のコードを実行しておけば、ラベルの表示文字列を変更することは可能です。


>不可能なことなのでしょうか?
どうしてもForm編集上のラベル等にアクセスしたいのなら、VBProjectからアクセスすることは可能です。
例えば、
 Set obj = ThisWorkbook.VBProject.VBComponents.Item("UserForm1")
 Set cntrl = obj.Designer.Controls
とすることで、「Form1」上に配置されたコントロール(群)を得られます。

さらに、
 cntrl.Item("Label1")
などで、個々のコントロールにアクセス可能なので、表示文字を始めとする各種プロパティを取得することが可能です。
(こちらの結果は、編集画面に直接反映されますので、十分にご注意ください)
    • good
    • 1
この回答へのお礼

>何が効率がよいのか理解不能ですが、Initialize時にご提示のコードを実行しておけば、ラベルの表示文字列を変更することは可能です。

VBE上で、数多くのラベルのキャプションを1つ1つ手入力で編集するのが面倒と感じて自動化できないかな、と思ったのがきっかけでした。

NBProjectというものがあるのですね!まさに自分が(以前まで)やりたいと思っていたことが実現できる機能だと感じました。ただ、すごく高度で専門的な感じがして、安易に手を出さない方がいいと感じました。

>こちらの結果は、編集画面に直接反映されますので、十分にご注意ください
このように教えていただいて、確かに、自分のやろうとしていたことが、効率的なのか、必要なことなのか、立ち止まって考えることができました。
もっと改善できることかもしれませんが、Initialize時にラベルを取得すれば、データベースの列名を編集したとしても、気にせずフォームを使える、と感じました。

とても秀逸な回答をいただき、ありがとうございます。

お礼日時:2020/12/11 02:56

VBE画面で作成したユーザーフォームが表示され且つボタンをクリックした『イベント』によって実行された結果ですから、元のユーザーフォーム作成とは関連しないって事ではないかな?



と初級レベルは思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
初心者には、なかなか難しく奥が深い問題でした。

お礼日時:2020/12/11 02:45

>これで、「ラベル更新ボタン」をクリックすると、


>画面上ではラベルの文字列が一括変換されます。
>しかし、ユーザーフォーム編集画面にもどると、Caption名は
>プロージャの実行前の状態に戻ってしまいます。
>(というか、Subプロージャが終了しない?VBEで実行中の状態のままに>なっている。■ボタンで終了しないといけない。)

それは、正しい状態ですよ。

どういう状態にしたいのでしょうか。
ひょっとして、そのマクロを実行したら編集画面のCaptionが書き換わるということを期待しているのでしょうか。それはあり得ません。
    • good
    • 0
この回答へのお礼

>そのマクロを実行したら編集画面のCaptionが書き換わるということを期待しているのでしょうか。

コーディングを効率よく行おうと思っているので、そのような効果を期待しました。

>それはあり得ません。

不可能なことなのでしょうか?

お礼日時:2020/12/07 01:46

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

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


おすすめ情報

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