【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なくってさ😅
したら、またね✋
ディスカッション
コメント一覧
まだ、コメントがありません