【VBA】ユーザー目線で開発する1

ユーザー目線を語る

シャンプーや洗剤の詰替えの割高が許せないjimです。ども✋

お徳用?あれって何なんでしょうね?『どこが?』って思うことがあります😤

はい、今回は以前の記事(【VBA】別OfficeアプリにVBAを記述する理由)でも触れた『ユーザー目線で開発する』について、それに関する小技的なものチラッと紹介しようかなと思います。

とりあえずその前に、な~んで『ユーザー目線で開発する』のか?っていうことについて少し語ります。

先ず、ユーザーが使いにくいマクロはダメだよね。ってこと。

マクロを用意しても、間違った使い方されたら悲しいですよね?

なので、使い方等を導いたほうがいいよね。と思ってます。

それと同時に、ユーザーに手入力させたり、あれこれペタペタ触らせるのは、バグやミスの温床かなと思ってます。

なので、なるだけガッチガチなマクロを作成した方が、皆幸せになれるんじゃないかと。。。

ユーザーも『手入力や工程』は少ない方がいいでしょうし。

ええ、だから自分はクライアント目線ではなくユーザー目線で開発します。

不特定多数の人が使うマクロの場合なんかは、ユーザーフォームをガッツリ使って、マクロブック自体も読み取り専用にしてます。もう、アプリを非表示にして、ユーザーフォームしか表示しません。

こうすれば、複数のユーザーが同時に使用できて、ストレスフリーなマクロになります😆

と、そこで幾つか問題があったりする。例えば、『ユーザーごとにファイルの保存先を変えたい。』とか『メール作成機能で、本文にユーザー名を入れたい。』みたいなこと。。。

毎回、手入力?ダイアログ?コンボボックス?

てなわけで、ユーザーを特定する為の小技の紹介です👍

 

ユーザー名を取得する

そうそう。端末のユーザー名と、ユーザーの名前やメールアドレスや格納場所などを紐づける!そうすれば問題ない?

Excelなら設定シートみたいなものを用意して、ユーザー名と紐づけできる表を作ればいい。

例えば、以下のような表を用意。

これなら、ユーザー名さえ取得できれば、『名字~保存先』と紐づけできますね。

それでは、ユーザー名を取得していきます。

WshNetworkオブジェクトを使って取得

コンピューター名とユーザー名が取得できます。

ツール→参照設定→『WindowsScriptHostObjectModel』にチェックを入れます。

サクッとコーディング

Sub user()
Dim WshNetworkObject As IWshRuntimeLibrary.WshNetwork
    Set WshNetworkObject = New IWshRuntimeLibrary.WshNetwork
    Debug.Print WshNetworkObject.UserName '←ユーザー名
    Debug.Print WshNetworkObject.ComputerName '←コンピューター名
    Set WshNetworkObject = Nothing
End Sub

参照設定なしで取得

参照設定なしでも取得できます。お好きな方で。

Sub user()
Dim WshNetworkObject As Object
    Set WshNetworkObject = CreateObject("WScript.Network")
    Debug.Print WshNetworkObject.UserName
    Debug.Print WshNetworkObject.ComputerName
    Set WshNetworkObject = Nothing
End Sub

 

おまけ

さっきの表からユーザー名を検索して『名字~保存先』を取得します。

Sub omake()
Dim WshNetworkObject As Object
Dim myName As String
Dim i As Long
    Set WshNetworkObject = CreateObject("WScript.Network")
    For i = 4 To 8
        If WshNetworkObject.UserName = Cells(i, "C") Then
            Debug.Print Cells(i, "D") '名字
            Debug.Print Cells(i, "E") '名前
            Debug.Print Cells(i, "F") 'メールアドレス
            Debug.Print Cells(i, "G") '保存先
            Exit For
        End If
    Next
    Set WshNetworkObject = Nothing
End Sub

 

 

はい!ってことで、如何でしたか?ユーザー名が取得できるだけで、1段階上のマクロが組めると思いませんか?

自分はガッチガチにやることが多いので、他にも小技を紹介しようかなって思ってます。だからタイトルに『1』を付けておきました。

でも、次回の予定は不明です。自宅のOfficeにAccessなくってさ😅

したら、またね✋