[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『【再質問】ユーザーフォームを表示した際及び更新した際に日付の書式を一括で短い日付に変えたい』(ぶいえもん)
再質問(前回質問[20210730075402] https://www.excel.studio-kazu.jp/kw/20210730075402.html )となります。
件名のとおり、ユーザーフォームの更新及び表示するたびに
ユーザーフォームの日付を短い書式に一括で更新したいと考えています。
また、可能であれば、更新したオブジェクトに対してのみ短い書式に変えるような設定をフォーム全体またはオブジェクト全体に設定できればと考えています。
前回いただいたアドバイスを基に以下のような文を作ってみましたが、
ユーザーフォームのInitializeでしてもうまく動きません
Dim c As MSForms.Control For Each c In Me.Controls If TypeOf c Is MSForms.TextBox Then c = Format(c, "ge.m.d") c.Text = c End If Next
どの部分に問題があるかご教示いただけると幸いです。
また、特定のオブジェクトのchangeの設定を、まとめて設定する方法(UserForm_changeがないので)があればご教示いただけると幸いです。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
Dim c As MSForms.Control For Each c In Me.Controls If TypeOf c Is MSForms.TextBox Then c.Text = Format(c.Text, "ge.m.d") End If Next
とすると「型が一致しません」とエラーメッセージがでます。
(ぶいえもん) 2021/08/01(日) 08:03
シートでは、書式 短い日付和暦になっています。
ユーザーフォームを呼び出したときにコントロールソースにA1などと入力しリンクさせています
そういった複数のテキストボックスが存在するため
そのデータをユーザーフォーム上短い和暦で表示し
更新後も短い和暦になるようにしたいと考えています
(ぶいえもん) 2021/08/01(日) 08:43
(γ) 2021/08/01(日) 09:09
コントロールソースの参照をやめるか。
オブジェクト(名称が下一桁通し番号なので)配列を使って一括に変えるかのどちらかが今のところ現実的そうです。
他のサイトも参照して再度検証したところ。以下の文は有効だったのですが、
format(c.text,"ge.m.d" に置き換えるとやはりうまく動きませんでした。
======================
Private Sub UserForm_Initialize()
Dim c As Control For Each c In Controls If TypeName(c) = "TextBox" Then c = "" End If Next End Sub (ぶいえもん) 2021/08/01(日) 09:23
Private Sub UserForm_Initialize() Dim i As Long For i = 1 To 3 With Me.Controls("TextBox" & i) .Value = Cells(i, 1).Value If IsDate(.Value) Then .Value = Format(.Value, "ggge年m月d日") End If End With Next i End Sub
こんなちゃうのかしら?
(あみな) 2021/08/01(日) 10:55
>シートでは、書式 短い日付和暦になっています。 Range.Textプロパティを使用すればFormat関数は 不要なのでは? (どん) 2021/08/01(日) 11:01
日付データを入れるセルの書式を文字列にして、文字型でR.8.1とか書いたらどうですか?
その日付文字データをその後どう利用するのか分からないですが、そっちの工程で一苦労して貰う。
(半平太) 2021/08/01(日) 12:25
コメントありがとうございます。
今回作ろうとしているエクセルは、とある作業で今後活用していく帳票作成用のもので。
一旦その入力支援として入力フォームを用意しておこうと考えているものとなります。
コントロールソースを設定するだけで、「入力支援」という部分は十分補えているのですが、
コントロールソースでユーザーフォームにリンクするとデフォルトで西暦表示になってしまいます。
運用上和暦をよく使うので、ユーザーフォームで表示したとき及び更新したときに和暦で表示したいと考えております。
なお、ご提案いただいた方法であれば、もちろん和暦表示になるのですが、「入力支援」という名目があり、文字列での運用をしてしまうと「〇/1」などと入力した場合に日付で運用する場合の入力支援の恩恵が受けられないため、文字列の運用は少し難しいと考えております。
(ぶいえもん) 2021/08/01(日) 14:08
コメントありがとうございます。
Range.Textプロパティを使用すればFormat関数は
不要なのでは?
↑
ご指摘のとおり「initialize」の初期値を和暦では表示されるのですが、半平太さんへの返信のとおり入力支援を目的としているので、ユーザーフォーム上でデータを更新しても、本来確認したい日付情報(和暦)で確認できた方が望ましいと考えておりましてFormat関数は必要と考えております。
(ぶいえもん) 2021/08/01(日) 14:17
コードありがとうございます。
あみなさんのやり方をベースに実行すると得たい結果になるのですが、フォームで入力した値をセルに返す文を書くのがめんどうだと思いまして、TextBoxのControlSource でデータをリンクさせつつかつ、一括して書式設定を変更する方法がないかと模索しております
(ぶいえもん) 2021/08/01(日) 14:36
なんとかいい方法があるといいのですが…
(ぶいえもん) 2021/08/01(日) 14:37
コメントありがとうございます。
誤解があれば申し訳ありません。
今回作ろうとしているエクセルは、マクロの知識のない自分以外の人が今後継続していくものであり、極力マクロを記載せず、デフォルトの機能やわかりやすい内容で渡したいと考えているため、【目的をマクロをできるだけ使わずかつ便利に使ってもらう】ために作っているものです。
自分自身は、今後もVBA以外の言語の学習を継続していく所存です。
しかしながら、「めんどくさい」は不適切な言葉でした。
上記理由から訂正しますと、「今後使う人また修正していく人のためにマクロの記述を減らしたい」が理由です。
(ぶいえもん) 2021/08/01(日) 15:03
ということだと認識しました。
多くの方にコメントいただき感謝します。
(ぶいえもん) 2021/08/01(日) 15:04
例えば下記のように、文章は簡潔に流れ重視で!!
1.シートに複数の日付入力がある(作業列)
↓
2.これをUserForm_Initialize呼び出し動作で
↓
3.複数のtextboxへ(和暦表示)で反映させる。
↓
4.textboxの日付けを更新したら←ここが理解しずらいですね。更新は毎日ってこと?
・手動でするのが手間ってこと?
・いっぺんにtextboxを更新するってこと?
・ユーザーフォームの更新及び表示するたびに?←意味が解りません。
↓
5.Sheetの複数セル(作業列ではない)へ反映させる
(あみな) 2021/08/01(日) 15:56
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.