Excel (VBA)

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

 
(Windows 10全般 : Excel 2016)
Workbook Openで取得した値を使いたい。
投稿日時: 20/02/17 12:06:19
投稿者: カールおじさん

Excelのバージョンは2019ですがリストにないので、2016を選択しました。
受講者の履歴表を管理しています。
A列に日付・B列に受講者名・C列以降他項目を記録して、今回の記録終了後受講者報告メールを発信しています。
受講者なしの時:受講者なしメール(今回の受講者数は0名です)
受講者ありの時:受講者報告メール(今回の受講者情報すべて)
上記メールを区分するために下記を考えています。
Sub メール作成()
If 今回終了時の総件数(n2)=前回までの総件数(n1) then
    受講者なしメール
Else
    受講者報告メール
End If
End Sub
この時、n2はいろいろな方法で取得できますが
n1は、今回の記録開始前に取得しておかなければならないので、
Private Sub Workbook_Open()
    Worksheets("受講者記録").Range("A65536").End(xlUp).Activate
    N1 = ActiveCell.Row または、Count関数等
End Sub
でn1を取得して、この値を上記If文の中で使えればと思っていますが、可能でしょうか。
可能であればどの様な設定(構文)にすればよいでしょうか。ご教示ください。
 
また、他の方法がありましたなら併せてご教示いただければと思います。

回答
投稿日時: 20/02/17 13:29:36
投稿者: takesi

A列の日付けは記入時の日付けですか?
 
当日の日付けのセルの数
MsgBox WorksheetFunction.CountIf(Range("A:A"), Int(Now()))

回答
投稿日時: 20/02/17 13:58:59
投稿者: radames1000

メール送信済の項目を作って、送信したら「〇」をつける。
〇がついていないものは未送付と判断、件数をカウント
こんな考え方もできると思いました。

投稿日時: 20/02/17 14:04:11
投稿者: カールおじさん

takesi様
>A列の日付けは記入時の日付けですか
日付は開催日であり、開催日=記入日が原則ですが、記入日とは限りません。
記入日は、どこにも記録していません。

回答
投稿日時: 20/02/17 15:00:49
投稿者: 半平太

ThisworkbookのCommentsプロパティにでもメモっておいたらどうですか?
 

Private Sub Workbook_Open()
    Me.Comments = Worksheets("受講者記録").Range("A65536").End(xlUp).Row
End Sub

Sub メール作成()
    If 今回終了時の総件数(n2) = CLng(ThisWorkbook.Comments) Then
        受講者なしメール
    Else
        受講者報告メール
    End If
End Sub

回答
投稿日時: 20/02/18 08:10:26
投稿者: mattuwan44

列をもう一個増やして、
メールを送信した後に日付を記入しておけばいいのでは?
新しいシートに毎回記録(ログ)を残しておいてもいいのでは?

投稿日時: 20/02/19 12:07:08
投稿者: カールおじさん

ご提案いただいた皆様ありがとうございました。
私もその後、いろいろググってみたら、Public変数宣言という手もありそうだとわかりn1をその方法で実行してみたらできました。