ログイン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:「スパゲティーコード」で検索。