• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでセルに変更があったらユーザアカウントを取得)

VBAでセルに変更があったらユーザアカウントを取得

このQ&Aのポイント
  • VBA初心者の方が、セルに変更があった場合にその変更内容とユーザアカウント名を取得したいと考えています。イベントプロシージャを使用して実現しようとしましたが、無限ループに陥ってしまう問題が発生しています。解決方法や代替手段についてアドバイスをいただきたいです。
  • VBAを使用して、セルの変更があった際にその変更内容と変更したユーザアカウント名を取得する方法について教えてください。イベントプロシージャを使用しようとしましたが、無限ループに陥ってしまうため、他の方法があれば教えてください。
  • VBAのイベントプロシージャを使用して、セルの変更を監視し、変更内容とユーザアカウント名を取得したいと考えています。しかし、現在のコードでは、書き込まれたユーザアカウントも「変更」とみなされて無限ループに陥ってしまいます。この問題を解決する方法や、代替手段があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Application.EnableEvents=False Target.Offset(0, 1).Value = Application.UserName Target.Offset(0, 2).Value = Now Application.EnableEvents=True End Sub Eventを受けた時、続くEventを無効にします。1つのEvent処理をしたら、Event処理を有効にします。

Kazu_creator
質問者

お礼

お礼が遅くなり申し訳ありません。 教えていただいた方法でできました。 いくつかVBAの参考書を持っているのですが、意外とこういう基本的な事が書いてないんですね。 VBEのヘルプも、「Application.EnableEvents」から検索すればヒットしますけど、そもそも、そういうものがあることを知らないとなかなか探せないです。 非常に助かりました。

その他の回答 (1)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

たまに見かけますね。無限ループもどきに陥る回答をされて 解決しましたぁ!・・・ての。 回避策は#1さんので十分かと思いますが Application.UserName だとインストール時の名前が返ってくるだけなのでは? 環境が違うと変わるかもしれません。確認してください。 Windowsのユーザアカウント名なら environ("username") が良さそうににも思えますけど?

Kazu_creator
質問者

お礼

なるほど、確かにユーザアカウントを取得するなら environ("username") の方がよさそうです。 ・ユーザアカウントの取得⇒environ("username") ・複数のユーザアカウント持っていて誰だか判らなくなって困る場合⇒Application.UserName で、使い分けようかと思います。ありがとうございました。

関連するQ&A