Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2016)
Excelを上書き保存せずともカウントアップ
投稿日時: 18/09/22 10:06:22
投稿者: crown

ExcelのSheet1_A1セルに自ファイルを開いたらカウントアップするカウンターを設定したいのですが
最初は1、2回目は1回目を保存しなくても2とカウントアップさせたいのですが誰かわかる方がいらしたら教えてください。

回答
投稿日時: 18/09/22 11:07:32
投稿者: なと

ブックを保存しないならカウント値を埋め込むのは不可能なので、外部のファイルに書き出してはどうでしょう。
 
ブックのオープンと自動実行マクロ
http://www.moug.net/tech/exvba/0060077.html
この中でテキストファイルの読み込み→セルへの書き出し、カウントアップした値を書き出しを行えば実現出来るはずです。
 
Openステートメント
http://www.moug.net/tech/exvba/0060004.html

回答
投稿日時: 18/09/22 11:38:31
投稿者: よろずや
回答
投稿日時: 18/09/22 12:20:45
投稿者: VBA-stepup

こんな感じで出来ると思いますが?
何か問題があるのでしょうか?
 
標準モジュールに

Sub Mycount()
    Worksheets("Sheet1").Range("A1").Value = Worksheets("Sheet1").Range("A1").Value + 1
    Application.DisplayAlerts = False
    ActiveWorkbook.Save
    Application.DisplayAlerts = True
End Sub

 
ThisWorkbookモジュールに
Private Sub Workbook_Open()
    Call Mycount
End Sub

回答
投稿日時: 18/09/22 12:41:14
投稿者: simple

すでに適切な回答をいただいています。
余談で失礼。
 
保存したくない理由は何なんでしょうかねえ。
(1)内容が変更されていないことの保証に使いたいということでしょうか。
それなら本来は「保護」機構とかを使うほうがよいのでは?
(内容変更せずに保存されたときに疑うことになってしまうので得策ではないでしょう)
保存しなくてもカウントアップが「簡単に」できるんなら、それでやりたい、
ということだけだったのでしょうけど、ご指摘どおり、それは無理ですね。
(2)単に使用回数のカウントだけが目的であれば、保存は甘受して。
非表示シートにカウンターを置くのが簡単でしょう(既に指摘あり)。

回答
投稿日時: 18/09/23 17:19:13
投稿者: WinArrow
投稿者のウェブサイトに移動

閲覧回数を管理する対象ブックがたくさんあるならば、
それらを管理する専用ブック(マクロ付き)を作成し、
当該ブックに閲覧回数を記録するのではなく、
管理する専用ブックに記録する
という考え方もあります。
つまり、閲覧するブックを指定して、管理する専用ブック経由で「開く/上書き/閉じる」を制御する
という方法です。
 

回答
投稿日時: 18/09/23 23:31:22
投稿者: baoo

どうしてもと言うなら私ならカウントアップ値をレジストリに保存する方法をとるでしょうか。
レジストリから読み出してカウントアップしてセルに表示し、その値でレジストリ値を上書きするというやり方です。
 
結局、別の所に保存するのは一緒ですし、そこまでする必要性が本当に有るのか検討が必要でしょうね。

投稿日時: 18/09/28 21:25:25
投稿者: crown

VBA-stepup さんの引用:
こんな感じで出来ると思いますが?
何か問題があるのでしょうか?
 
標準モジュールに
Sub Mycount()
    Worksheets("Sheet1").Range("A1").Value = Worksheets("Sheet1").Range("A1").Value + 1
    Application.DisplayAlerts = False
    ActiveWorkbook.Save
    Application.DisplayAlerts = True
End Sub

 
ThisWorkbookモジュールに
Private Sub Workbook_Open()
    Call Mycount
End Sub