- ベストアンサー
ネット上PCのエクセルのユーザーIDを検索したい
お世話になります。 可能かどうかわからず、ここに質問させていただきます。 ネット上PCのそれぞれにインストールされているエクセルのユーザーIDを検索し、どのPC(コンピュータ名)にインストールされているものか確認することは可能でしょうか? なぜこのようなことをしたいのか説明しますと、 ネット上で共有しているエクセルファイルを開こうとすると、先に誰かが開いている場合、「○○.xlsは編集の為ロックされています。使用者は'AAA'です。」とメッセージが出てきますが、この使用者が誰なのかが分からないんです。「通知」というボタンがありますがこれは、後に開こうとした人に編集できるようになった旨を知らせる通知のようですし・・・ 使用環境はWindowsXP Pro(SP3) Excel2003(SP3) ネットワークの規模はPC約100台 ちょっと漠然としていますが、VBAなり、フリーソフトなど手法はなんでもかまいません。 ご存知の方、ご教示お願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>(エクセルユーザーIDが自分の管理下にない状態で) ...という意味を、私が今ひとつ理解してないかもしれませんが 深く考えないなら 『ネット上で共有しているエクセルファイル』のWorkbook_Openイベントで ユーザー識別情報を外部ファイルに書き出して、調べたい時にそれを参照すれば良いです。 'ThisWorkbookモジュール Option Explicit Private Sub Workbook_Open() Dim CSset As Object Dim cs As Object Dim fName As String Dim n As Long Dim tmp(0 To 3) As String On Error Resume Next If ThisWorkbook.ReadOnly Then Exit Sub tmp(0) = Now() tmp(1) = "failure" Set CSset = CreateObject("WbemScripting.SWbemLocator") _ .ConnectServer _ .ExecQuery("Select * From Win32_ComputerSystem") For Each cs In CSset tmp(1) = "DomainName:" & cs.Domain tmp(2) = "CompName:" & cs.Name tmp(3) = "UserName:" & cs.UserName Next n = FreeFile fName = ThisWorkbook.FullName fName = Left$(fName, InStrRev(fName, ".") - 1) & "user.txt" Open fName For Output As #n Print #n, Join(tmp, vbTab) Close #n Set CSset = Nothing End Sub さらに簡易的で良いなら : Dim n As Long Dim tmp(0 To 2) As String On Error Resume Next If ThisWorkbook.ReadOnly Then Exit Sub tmp(0) = Now() tmp(1) = "failure" tmp(1) = "CompName:" & Environ("computername") tmp(2) = "UserName:" & Environ("username") n = FreeFile Open ThisWorkbook.FullName & "_user.txt" For Output As #n Print #n, Join(tmp, vbTab) Close #n : な感じでも。
その他の回答 (5)
- end-u
- ベストアンサー率79% (496/625)
老婆心ながら最後のアドバイス。これにて失礼します。 >管理者権限(というか、ウチはどのクライアントもユーザーIDはアドミニストレータでノンパスワードです。)でアクセスしに行ってるんですが・・・ >また、補足として、ウチのネットワークはユーザー管理されていません。 >ノンパスでWindowsを開くことが出来ます。 >(これはこれで、問題なんですけど・・・) それはそれで問題、ではなく『それこそ問題』です。 そのような環境で >ネット上PCのそれぞれにインストールされているエクセルのユーザーIDを検索し、どのPC(コンピュータ名)にインストールされているものか確認することは可能でしょうか? >できれば、今現在(エクセルユーザーIDが自分の管理下にない状態で) >調べる方法はないでしょうか? 解消すべき課題の優先順位の設定が間違っているのではないですか? すでに有効なアドバイスはしてます。ちょっとくらいは工夫や応用をしてください。 >『使用中のメッセージ』に表示される使用者はApplication.UserNameで、これは手作業でも、VBAからでも設定可能です。 >誰が(もしくはどのPCが)使用中か識別できるようなUserNameを設定すれば良いですね。 ~~~~~~~~~~~~~~~~~~~ 共有ファイルを使う対象者に、BookOpen時にマクロが走るようにした設定用ファイルをメールでもなんでも使って配信し、 PC名をApplication.UserNameに設定してもらってください。 それさえもできない状況ならネットワークユーザーの管理はあきらめたほうが良いです。
お礼
いや、おっしゃるとおりです。 「問題あり」のネットワーク環境ですので、やることは山積みです。 まずは、ご提供いただいた事を実践していきたいと思います。 アドバイスありがとうございました。
- end-u
- ベストアンサー率79% (496/625)
ネットワークユーザーのユーザーIDを取得するのが目的なのか、 Excelファイル使用が競合した時に、誰が使用中か判るようにする事が目的なのか、ですね。 後者の場合、Excelの標準機能『使用中のメッセージ』を利用できるなら、それにこした事はないと思います。 『使用中のメッセージ』に表示される使用者はApplication.UserNameで、これは手作業でも、VBAからでも設定可能です。 誰が(もしくはどのPCが)使用中か識別できるようなUserNameを設定すれば良いですね。 ※但し、企業内ルールでApplication.UserNameの変更が禁止されていたりすると話は別。 手作業で設定するのが面倒なら、 'ThisWorkbookモジュール Option Explicit Private Sub Workbook_Open() Dim x On Error GoTo errHndr x = CreateObject("Wscript.Network").UserName If MsgBox(x & " をExcelのユーザー名として登録します。", vbOKCancel) = vbOK Then Application.UserName = CStr(x) End If errHndr: End Sub こんな感じで、BookOpen時にマクロが走るようにしたxlsファイルを設定用として配付し、 一回だけ実行してもらうという事も考えられます。
補足
ご回答ありがとうございます。 なるほど、エクセルのユーザーIDをログインユーザーIDに変えちゃう わけですね。確かにこの方法をやっておけば、特定できますね。 ただ、これも予め全てのPCのエクセルユーザーIDを管理下に収めて おくという前提であれば可能ということですね。 できれば、今現在(エクセルユーザーIDが自分の管理下にない状態で) 調べる方法はないでしょうか? これは、これで、今後の為に活用させていただきます。 有益な情報ありがとうございました。
- 007MUKADE
- ベストアンサー率41% (286/694)
>・・・ネットワークの規模はPC約100台 で 1つの Exell ファイルを 使ってる状態が 異常と思います。 もっと NETの状態に適したデーターを構築しないと 先々とんでもない トラブルに会う可能性があります。 Access でも可能ですが・・・せいぜいで 10台規模 使うタイミングによっては 3台でも 障害が出てきます。 個人で管理するにはOffice系では 10台程でしょう。 SQL サーバー や オラクル 等の導入も含めて Accsee の ホーム、レポート 等を利用しながら 構築する事が 良いと思います。 後は、該当の EXELL ファイルにフルアクセス出来る PCを制限するするとか・・・・ 閲覧だけなら 読み取り専用モードで開いてもらうとか・・・ それなりに 管理をしないと ・・・ と思います。 上司(経営者)の方向は如何なんでしょう? 問題が大きくなってからでは 手遅れですので 良く検討して話し合って下さい。
補足
ごめんなさい、書き方悪かったですかね。 一つのエクセルファイルを100台で使っているわけではないです。 あくまでもネットワークの規模がそれぐらいということで、 そのネットワーク環境の中で、エクセルファイルの競合があった時、 エクセルのユーザーIDのみで、端末を特定する方法を知りたかっただ けです。ネットワークの環境が10台ぐらいなら、しらみつぶしに 一台ずつ確認していく方法もありですが、100台(+VPNで遠方にも)はちょっと・・・ で、質問させていただいた次第です。
- WDY
- ベストアンサー率27% (134/487)
No1です この方法ならどうでしょう? http://www.atmarkit.co.jp/fwin2k/win2ktips/083opened_net_file/083opened_net_file.html
補足
ご回答ありがとうございます。 おっこれは!と思って、手順どおり進めていったんですが、 「コンピュータの管理」の所で、共有フォルダの「開いているファイル」 をクリックすると、 「Windowsクライアントのセッション一覧を読み取り中にエラーが発生しました:エラー5:アクセスが拒否されました。」 と出てしまいます。 管理者権限(というか、ウチはどのクライアントもユーザーIDはアドミニストレータでノンパスワードです。)でアクセスしに行ってるんですが・・・ もう少し調べてみます。 情報ありがとうございました。
- WDY
- ベストアンサー率27% (134/487)
CVSだったかVSSだったか忘れましたが確かPC名まで見れた様な気がします。(うろ覚えです
補足
早速のご回答ありがとうございます。 ネットで調べてみました。 CVS:Concurrent Version System? VSS:Visual SourceSafe? いずれもバージョン管理ソフトのようですね。 (ネットで調べた結果が見当違いだったらすいません。) 上記ソフトの場合は、既にこれらで管理されていることが前提のよう ですので、せっかく教えていただいたのですが利用できそうにありません。
補足
あっ、なるほど。 これはいいですね。 ただ、そこそこな量を共有ファイルにしてあり、全てにコレを仕込むのも大変ですね。 今後作成する資料や頻繁に見る共有ファイルは、利用させてもらおうと思います。 また、簡単なロック情報ファイルとしても応用も出来そうですね。 ありがとうございました。 >(エクセルユーザーIDが自分の管理下にない状態で) 書き方が抽象的ですいません。 1.前略・・・エクセルの競合メッセージが出力されます。 そこには「使用者は○○○です」と表示されています。 (○○○はエクセルのユーザー名) 2.「このユーザー名って誰だろう?」となった時(今まさにここで 困ってます。誰がロックしてるかわからないんです。) 3.予めエクセルのユーザー名をWindowsのログイン名やコンピュータ 名にしておく。(最初にend-uさんに教えていただいた方法等で) ただし、この方法は、管理者がコンピュータ名やログイン名で 個人を特定できることが前提(つまり、管理下に置く)ですね。 ・・・と言いたかったんですが、分かりますでしょうか? 説明ベタですいません。 また、補足として、ウチのネットワークはユーザー管理されていません。 ノンパスでWindowsを開くことが出来ます。 (これはこれで、問題なんですけど・・・)