VBA マクロ超初心者です。仕事で作成しなくてはいけなくなったのですが、お手上げ状態です。
同僚で解る人もいるのですが、教えていただいているのですが、何度質問できなくて助けて下さい。
少し前にも同じような質問をしましたが、下記のプログラムを修正して教えていただけると助かります。
UserFormにテキストボックス【実行日】【有効期日】【有効期日周期】を作成し、実行日を入力したら有効期日周期の年によって有効期日が自動でテキストボックスに入力されるプログラムを作成したいです。
Private Sub 実行日_Enter()
Dim dt As Date
Dim dy As Date
Dim s As String
Me.実行日 = dt
Me.有効期日=dy
テキストボックスの実行日に[20200531]と入力したら[2020/05/31]と
変換できるプログラムを作りたい。のですが、
S = "20200531"
dt = CDate(Format(s, "####/##/##"))
のプログラムでもデバックが表示されてどこがわるいのかもわかりません。
If 有効期日周期.Value = "1年" Then
d = DateAdd("yyyy", 1, dt) ' 年
Me.有効期日 = d
End If
End Sub
色々ネットで検索したのですが、どの部分のプログラムを使えばいいのか
検討もつきません。
宜しくお願い致します。
No.3ベストアンサー
- 回答日時:
こんばんは!
もう一つの質問の方に投稿しようと思ったのですが、
締め切り済みだったのでこちらに投稿します。
とりあえずやってみました
↓の画像のようなユーザーフォームになっているとします。
テキストボックス1~テキストボックス3のオブジェクト名はすべて左側のラベル名としています。
そして左側のような入力後 → コマンドボタンをクリックすると右側のようになるようにしています。
Private Sub CommandButton1_Click()
Dim myY As Long, myM As Long, myD As Long
Dim myDate As Date
With 実行日
myY = Left(.Value, 4)
myM = Mid(.Value, 5, 2)
myD = Right(.Value, 2)
myDate = DateSerial(myY, myM, myD)
.Value = myDate
End With
有効期日 = DateAdd("yyyy", Val(有効期日周期), myDate)
End Sub
※ 画像のように、テキストボックスの「有効期日周期」は単に数値のみの入力としています。
※ 今回も細かいエラー処理はしていません。
足りに「有効期日周期」が空白だとエラーになります。
※ CDate関数をお使いのようですが、
当方の認識ではシリアル値に変換可能な文字列だけがシリアル値に変換可能だと思っていますので、
単に数値の羅列ではシリアル値とは認識されないと思います。m(_ _)m
No.5
- 回答日時:
No.1のお礼に対して。
>dt = Me.実行日にして実行したら、デバックがでて黄色になります。
日付型と文字列では = で代入は不可能でしょう。
多分No.1を
Private Sub 実行日_Enter()
Dim dt As Date
Dim dy As Date
Dim s As String
s = Me.実行日.Text ' 文字列型で宣言した変数に文字列を入れる
s = Format(CLng(s), "0000/00/00")
If 有効期日周期.Text = "1年" Then
dt = CDate(s)
dy = DateAdd("yyyy", 1, dt) ' 年
Me.有効期日.Text = CStr(dy)
End If
End Sub
こんな感じじゃないのかな?
If文の意味(”1年")がこれであっているのであればですけど。
No.4
- 回答日時:
No.3です。
Cdate関数を使ってみました。
前回のコードよし少し簡単にできます。
↓に変更してみてください。
Private Sub CommandButton1_Click()
Dim myDate As Date
With 実行日
myDate = CDate(Format(.Value, "0000/00/00"))
.Value = myDate
End With
有効期日 = DateAdd("yyyy", Val(有効期日周期), myDate)
End Sub
これでも前回と同じ動きになると思います。m(_ _)m
tom04さん
回答ありがとうございます。
両方とも試しましたが、
myDate = CDate(Format(.Value, "0000/00/00")) ←がデバックが出て、【型が一致しません】とでます。20200601とエクセルにはこのまま
表示されて、もう一回enterをクリックすると、もう一行下に2020/6/1で
表示されます。
先に回答していただいた方は、
myM = Mid(.Value, 5, 2)←部分が黄色になります。そしてenterをもう一度クリックすると下に2020/6/1で表示されます。
No.2
- 回答日時:
Private Sub 実行日_Enter()
Dim dt As Date
Dim dy As Date
Dim s As String
Me.実行日 = dt
Me.有効期日=dy
テキストボックスの実行日に[20200531]と入力したら[2020/05/31]と
変換できるプログラムを作りたい。のですが、
S = "20200531"
dt = CDate(Format(s, "####/##/##"))
のプログラムでもデバックが表示されてどこがわるいのかもわかりません。
If Me.有効期日周期.Value = "1年" Then <= 有効期日周期の前にMe.がありません。
d = DateAdd("yyyy", 1, dt) ' 年
Me.有効期日 = d
End If
End Sub
No.1
- 回答日時:
質問内容をよく理解できてません(何年たっても初級者ですので)が、多分こういう事なのかな?と回答してみます。
Private Sub 実行日_Enter()
Dim dt As Date
Dim dy As Date
Dim s As String
'Me.実行日 = dt '変数に何も入れていないのですけど?
'Me.有効期日 = dy '上記同様
s = "20200531"
s = Format(CLng(s), "0000/00/00")
Me.実行日.Text = s
If 有効期日周期.Text = "1年" Then
dt = CDate(s)
dy = DateAdd("yyyy", 1, dt) ' 年
Me.有効期日.Text = CStr(dy)
End If
End Sub
もし違うようでしたらベテランさんの回答を待っててください。
めぐみんさん
ありがとうございました。
全然詳しいです!!
『'Me.実行日 = dt '変数に何も入れていないのですけど?
'Me.有効期日 = dy '上記同様 』
をdt = Me.実行日 に変えたら変数を入れたことになるのでしょうか?
(わからなくて、すみません。)
dt = Me.実行日にして実行したら、デバックがでて黄色になります。
dt = Me.実行日は、プログラムの中で実行日を入力する代わりに、dtをいれるのかと思っていました。(dt=実行日)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンに何かが勝手にダウン...
-
プログラム実行中に強制停止さ...
-
Excel実行時エラー-2146959355?
-
PC版のMinecraftが応答なしにな...
-
Windows10 で青鬼を遊びたいの...
-
パソコンのスクリーンセーバー...
-
エクセルVBA、ステップモードと...
-
たまにマクロを実行できないと...
-
【HTML】INPUTの値を引数にBAT起動
-
実行中のVBSをタスクバーに非表...
-
COBOLで集団項目から符号...
-
WindowsVistaでの三国志9起動...
-
VB.NETでボタンのクリックイベ...
-
VB.NETを実行するにはどうした...
-
VBA コントロールパネルの機能...
-
latexでのエラー
-
プログラムを番号順に進めるこ...
-
【Ruby初心者】簡単なプログラ...
-
Rubyの rails runnerについて
-
Flashゲームをホームページで楽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンに何かが勝手にダウン...
-
Excel実行時エラー-2146959355?
-
PC版のMinecraftが応答なしにな...
-
VB.NETでボタンのクリックイベ...
-
管理者として実行を毎回すると...
-
エクセルVBA、ステップモードと...
-
latexでのエラー
-
パソコンのスクリーンセーバー...
-
eclipseで、「ポート番号が使用...
-
VB.NETでDataTableにデータ追加...
-
Windows10 で青鬼を遊びたいの...
-
EXCEL-VBAでコマンド...
-
COBOLで集団項目から符号...
-
プログラム実行中に強制停止さ...
-
jbossとjdkの関係性、違いにつ...
-
実行中のVBSをタスクバーに非表...
-
【急いでます!】pythonでキー...
-
VBA コントロールパネルの機能...
-
pythonで他のアプリを操作する...
-
プロパティの値が不正ですって...
おすすめ情報