個人的には、他の人がこれを解決するために提案したアイデアを好みます...おそらく、現在の日付で満たされた単一のセルを使用し、日付を白くして非表示にします...そうでない場合は、試してみてください:
ワークシートが必要ない場合は、たとえば同じディレクトリにある外部テキスト ファイルを使用できます。XLS を開くと、テキスト ファイルが読み取られて現在の日付が表示されます。今日と一致しない場合は、1 日 1 回のコードを実行し、テキスト ファイルを今日の日付に更新します。それ以外の場合は何もしません。
Public txt_file_location As String
Public txt_file_name As String
Private Sub Workbook_Open()
txt_file_location = "C:\Documents and Settings\Chris\Desktop"
txt_file_name = "test.txt"
Dim dateToday As Date
Dim dateInFile As Date
dateToday = Date ' will be used for both comparison and for writing to txt file if need be
dateInFile = txtfile_read(txt_file_location, txt_file_name) ' On open - read the text file to check what the current date is.
If (dateToday <> dateInFile) Then
' ok the date in the text file is different to today's date, so your script needs to be called here
Call do_some_work ' a function that runs once a day...
' Now we need to update the textfile to todays date to prevent rerunning
Call save_to_text_file(txt_file_location, txt_file_name, dateToday)
Else
MsgBox ("The script has already ran today")
End If
End Sub
Sub do_some_work()
' here could be one of the functions that needs to run once a day
MsgBox ("Some work was done!")
End Sub
Function txtfile_read(txt_file_dir, file_name)
Dim iFileNumber As Long
Dim strFilename As String
strFilename = txt_file_dir & "\" + file_name
iFileNumber = FreeFile()
Open strFilename For Input As #iFileNumber
Dim txt As Variant
Do While Not EOF(iFileNumber)
Line Input #iFileNumber, myLine
txtfile_read = myLine
Loop
Close #iFileNumber
End Function
Function save_to_text_file(txt_file_dir, file_name, content_to_be_written)
Dim iFileNumber As Long
Dim strData As String
Dim strFilename As String
strFilename = txt_file_dir & "\" + file_name
iFileNumber = FreeFile()
Open strFilename For Output As #iFileNumber
Print #iFileNumber, content_to_be_written
Close #iFileNumber
End Function