「最終番号」という名の数字を、ユーザーフォーム閉じて、別の日など次の機会に作業する場合に、データを引き継ぎたい場合のテクニックとしては、作業終了時に、テキストファイルで保存しておいて、次の作業時に開いて最終番号を知る、というやり方が最適かつ簡単ではないかな。PUBLIC変数とか、プログラムの変数は使えない仕組みと思う。固定メモリに保存しなくてはならないと思う。
高等な分野の話だが、一般にINIファイルなどでこの考えは使われているように思う。
https://ja.wikipedia.org/wiki/INI%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
それ用に、馴染みのエクセルのセルに保存する手もある。専用のシートを作る手もあるが、一般シートでは「なんだこれは?」と目障りかと思う。テキストファイルが一番簡単で処理が軽いとおもう、し表面に出さないでも済む.メモ帳で修正も簡単である。
ーー
デスクトップに「最終番号」ファイルを作った。
中身(メモ帳で)は、たとえば、最終番号の意味で
34
ーー
UserForm_Initializeイベントで
Private Sub UserForm_Initialize()
Open "C:\Users\xxx\Desktop\最終番号.txt" For Input As #1
Input #1, a
MsgBox a
UserForm2.TextBox1.Text = a
Close #1
End Sub
実行すると、ユーザーフォrムのテキストボックスに34が出る。
#1の「1」やUserForm2の「2」や.TextBox1の「1」は、ユーザーの状況により変わるので注意。使い終わったらClose #1 をすること。
ほかに、正しくは、「次の」番号を使うときは、=Val(a)+1が正しいだろうが、説明のためのテストなので最終番号を表示している。
こんにちは
画像の発行Noで
2016-11-001が2件有ったり、2016-12が005から始まっているのは間違いですよね?
Sub test()
Dim r As Range
Dim 発生年月 As String
発生年月 = Format(#12/1/2016#, "yyyy-mm") 'ユーザーフォームの発生日にする事
With Worksheets("Sheet2")
'管理No
MsgBox Format(.Range("B" & Rows.Count).End(xlUp) + 1, "0000")
'発行No
Set r = .Range("C" & Rows.Count).End(xlUp)
If r Like 発生年月 & "*" Then
MsgBox 発生年月 & "-" & Format(Split(r, "-")(2) + 1, "000")
Else
MsgBox 発生年月 & "-001"
End If
End With
End Sub
を修正して組み込んでみて下さい。
補足
発行No.はトラブル発生日の年月になります (例) 管理No.→0001 発生日→2016/12/22 発行No.2016-12-001