1

マクロを 1 日に 1 回だけ実行するためのコードが必要です。マクロが存在するファイルを何回開いてもかまいません。

ファイルが 1 日開かれなかった場合、マクロを実行する必要はありません。開いたときに実行してください。

マクロがその日すでに実行されているかどうかに関係なく、情報を保持する「内部」変数またはそのようなものが必要だと思います。

さらに、さらに難しくするために、マクロは毎日異なるワークブックを開くと思います。

何かご意見は。

私は初心者なので、それがはっきりしていれば許してください。前もって感謝します。

編集:ここにいくつかのコードが見つかりました:

それはできるようですが、余分なシートを作成する必要があります。私はそれをしたくありません。

コードは次のとおりです。

Private Sub Workbook_Open()
Dim rngFindTodaysDate As Range
    With ThisWorkbook.Worksheets("Status")

        On Error GoTo X
        Set rngFindTodaysDate = .Range("A1").End(xlDown).Find(Date)
        If rngFindTodaysDate Is Nothing Then
            .Range("A" & .Range("A" & Rows.Count).End(xlUp).Row + 1) = Date

            '''''  your Code  Here

        End If
    End With
    X:
End Sub
4

4 に答える 4

2

マクロが最後に実行された日時がマクロ自体によって保存されるワークブックで、(名前付きの) 範囲、単一のセルを使用します。

Sheetx.Range("rLastRun").Value2 = Now()

それをマクロの最後に追加するか、少なくとも次のチェックのに追加します。マクロは、前回の実行セル値が今日より前かどうかをチェックします。次に、合計は次のようになります。

If Sheetx.Range("rLastRun").Value2 < Date Then

    <your macro>

    Sheetx.Range("rLastRun").Value2 = Now()

End If

毎回別のファイルを開くには、これまでに提供された情報と同じように、より具体的にする必要があります。次のことを自問してください。

  1. ファイルのプロパティにロジックはありますか?
  2. タイムスタンプを除いて毎回同じ名前を持っていますか (例: Input20121128.xlsInput20121127.xls ?
  3. ドキュメント名は可能な名前の限られたプールにあるか?
  4. いつも同じフォルダにあるのですか?
  5. 特定の作成者、日付、時刻などはありますか?

情報が提供されると、ファイルルックアップは次のようになります。

Dim strInputfile As String

<other code>

strInputfile = "<standardfolderstring>" & Format(Date, "dd/mm/yyyy") & " Test.xlsx"
于 2012-11-28T09:06:40.000 に答える
2

Windows タスク スケジューラを使用して、ファイルを 1 日に 1 回自動的に開くことができます。ここには、必要な VB スクリプト コードが含まれた非常に優れたステップバイステップのチュートリアルがあります。

ユーザーがファイルを手動で開いている可能性がある場合は、その日にマクロが既に実行されているかどうかを記録する状態変数が必要になります。最善の策は、おそらくこれを記録する専用のシートを用意することです。おそらくそれを呼び出しますRunTimesWorkbook_Open次に、次の行をイベントに追加できます。

If Date > Application.Max(Sheets("RunRecords").Range("A:A")) Then
    Call YourMacroName
    Sheets("RunRecords").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) = Date
End If
于 2012-11-28T08:28:02.507 に答える
1

個人的には、他の人がこれを解決するために提案したアイデアを好みます...おそらく、現在の日付で満たされた単一のセルを使用し、日付を白くして非表示にします...そうでない場合は、試してみてください:

ワークシートが必要ない場合は、たとえば同じディレクトリにある外部テキスト ファイルを使用できます。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
于 2012-11-28T09:09:52.490 に答える
1

ここにロジックがあります。それを調べてください。

マクロを実行するには、シート ターゲットのセルに 0 などの値を格納します。次に、マクロがトリガーされたら、その値を次のように変更します。たとえば、1。その後、シートが開いてマクロが呼び出された回数に関係なく、セルの値が 1 であるため、マクロは終了し、完全なプロセスは完了しません。

于 2012-11-28T08:36:14.920 に答える