ログインIDの取得
あるコード表の編集を自動化するにあたり、「いつ、誰が編集したか?」を記録することになりました。検討の結果、私の所属する部門では
「誰が」=「どの端末で」
を意味しているため、ログインIDを自動で記録することに。
そこで過去の自分を振り返り、その当時だったらどうしたか?を考えてみました。
1.VBAに出会う前
入力は、手打ちに限る!(頑固な下町の職人オヤヂ風に)
2.VBAを覚えた直後
- 変数の宣言は、先頭で。
- 過剰なコメント群の嵐。
- 処理の途中に組み込む。
これらは結構、後期まで引き継がれています。結果、こんな感じになりました。
Sub 何某かのサブプロシージャ() ' 変数宣言 ' ログインIDを取得するためのオブジェクトです。 Dim obj As Object ' ~ 中略 ~ ' ネットにあったコードです。良く判ってません。 Set obj = CreateObject("WScript.Network") ' A1セルに、ログインIDを入力します。 Range("A1").Value = obj.UserName ' ~ 後略 ~ End Sub
3.魔法使いは「Call」を覚えた
- IDを入力する部分だけを別プロシージャにして、良きところで「Call」。
その後、病的なまでに細かく機能をサブプロシージャに切り分けるも、サブプロシージャの名前や変数名が不適切なことも相まって、「スパゲティ専門店」期に突入することに。*1
Sub 何某かのサブプロシージャ2() ' ~ 前略 ~ Call LoginID ' ~ 後略 ~ End Sub Sub LoginID() Dim obj As Object Set obj = CreateObject("WScript.Network") Range("A1") = obj.UserName End Sub
4.ユーザー定義関数って便利ね
- ファンクションプロシージャを多用するように。
- 嬉しくなって、調子に乗って作りすぎた結果、似たような名前の、似たような関数を乱発。
- 今でも結構使ってる。
Sub 何某かのサブプロシージャ3() ' ~ 前略 ~ Range("A1") = GetLoginID ' ~ 後略 ~ End Sub Function GetLoginID() As String Dim obj As Object Set obj = CreateObject("WScript.Network") GetLoginID = obj.UserName End Function
5.現在:暮らしにクラスモジュールを(ダジャレ禁止!)
- クラスモジュールに触れ、何となく使い方を覚え始めた。
- 上記3,4と混在し、
泥仕合群雄割拠の時代に突入。
[クラスモジュール](名前はとりあえず、LoginIDClass)
Dim obj As Object Private Sub Class_Initialize() Set obj = CreateObject("WScript.Network") End Sub Public Property Get LoginID() As String LoginID = obj.UserName End Property Private Sub Class_Terminate() Set obj = Nothing End Sub
[標準モジュール]
Sub 何某かのサブプロシージャ4() ' ~ 前略 ~ Dim LIC As LoginIDClass Set LIC = New LoginIDClass Range("A1") = LIC.LoginID ' ~ 後略 ~ End Sub
この先どうなっていくのか、自分のことなのにサッパリ分かりません。
でも、とても楽しみです。
参考まで。
*1:「スパゲティーコード」で検索。