質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

11156閲覧

vbaで読み取り専用時にユーザー名を表示させたい

Tetsuya3456

総合スコア22

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/09/26 09:44

編集2019/09/29 10:59

vbaであるエクセルファイルを開く際、読み取り専用だったら処理を中断させるように実装しているのですが、誰が開いているかユーザー名を表示させることは可能でしょうか?

vbaではなく手動で、誰かが開いているエクセルファイルを開くと、ユーザー名が表示される仕様をvbaでも実装したく色々調べてみたのですが、見つからず質問させて頂きました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2019/09/26 10:34

>あるファイル がExcelファイルであれば、タグにExcelを追加してください。
Tetsuya3456

2019/09/29 10:39

遅くなりすいません。 先程つけました! ご指摘ありがとうございますm(_ _)m
Zuishin

2019/09/29 10:50

「あるファイル」ではなく「テキストファイル」「画像ファイル」と書いてください。ブックではないんでしょう?
Tetsuya3456

2019/09/29 10:53

あるファイルはエクセルファイルのことです。わかりづらく申し訳ありません。追記しておきました。
Zuishin

2019/09/29 10:54

では通常のエクセルというのは何ですか?
Tetsuya3456

2019/09/29 10:56

vbaでエクセルファイルを開いた場合ではなく、手動でエクセルファイルを開いた場合という意味合いでした。
guest

回答2

0

ベストアンサー

あるExcelファイルにvbaを仕込みます。

Excelファイルオープン時にテキストファイルを生成して
WshNetworkオブジェクトを利用して、コンピュータのユーザー名を書き込みます。
読み取り専用であれば、テキストファイルからユーザー名を取得すればよいです。
ファイルを閉じる時にテキストファイルは削除します。
該当Excelファイルをマクロを有効にして開かなければならないので、
ユーザーが意識しなくてもマクロを有効で開くようにvbscriptを利用してExcelを開いてもらっています。
強制的に「マクロ有効」で開かせる。

Private Sub Workbook_Open() Dim Path As String Path = ThisWorkbook.Path & "\user.txt" If Not ActiveWorkbook.ReadOnly Then '読み取り専用でない場合 Dim objNetWork As Object     Set objNetWork = CreateObject("WScript.Network") Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") With FSO.CreateTextFile(Path) .WriteLine objNetWork.UserName .Close End With Set objNetWork = Nothing Set FSO = Nothing End If End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) '*********************************************** ' ファイルを閉じる際テキストファイル削除 ' '*********************************************** Dim Path As String Path = ThisWorkbook.Path & "\user.txt" If Not ActiveWorkbook.ReadOnly And Dir(Path) <> "" Then Kill Path End If End Sub
'読み取り専用の場合 Dim Path As String Path = ThisWorkbook.Path & "\user.txt" If Dir(Path) <> "" Then Open Path For Input As #1 Dim buf As String Line Input #1, buf MsgBox "ユーザー:" & buf & "が使用中" Close #1 End If

投稿2019/10/01 14:10

ryuno_vanilla

総合スコア119

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tetsuya3456

2019/10/08 08:55

ご回答ありがとうございます!返信が遅れてしまい、大変申し訳ありません。 ご提示頂いたやり方を試してみたいと思います。ありがとうございます!
guest

0

投稿2019/09/26 10:29

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tetsuya3456

2019/09/29 10:39

遅くなりすいません。 上記の方法も試しましたが、共有ファイルではないため、エラーが表示されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問