2017-12-13 24 views
3

私はVBAにはとても新しいので、本当に助けてくれてありがとう! 私は毎日00時にはsaveasのコードを持っています:10時間ですごく効果があり、セルの変更のコードがありますが、それらを組み合わせる方法はわかりません... セルが変更されてもsaveasする必要があります00:10時間待機し、温度データ値が前日に属しているため、保存日から1日を減算します。前もって感謝します!VBA SaveAsと同時にセルが変更される場合

'Cell change is at Sheet2 
Sub Worksheet_Change(ByVal Target As Range) 
If Target.Address = "$C$20" Then 
     Call teste 
    End If 
If Target.Address = "$G$20" Then 
     Call teste 
    End If 
End Sub 

'ThisWorkbook 
Private Sub Workbook_Open() 
    Application.OnTime TimeValue("00:10:00"), "Abre" 
End Sub 

'Module1 
Sub Abre() 
    Application.OnTime TimeValue("00:10:00"), "Abre" 
    Dim datestr As String 
    datestr = Format(Now, "yyyymmdd, hhmm") 
    Application.DisplayAlerts = False 
    ActiveWorkbook.SaveAs "D:\Temperature Data\DailyTemp " & datestr & ".xlsm" 
End Sub 

'Module2 
Sub teste() 
MsgBox "Did not work" 
End Sub 

答えて

0

thisポストによると、あなたはOnTime関数に引数を渡すことができます。 Abreに日付を受け入れるように変更します。これを使用してファイルを保存し、適切な日付でWorksheet_ChangeAbreという名前で呼び出すことができます。以下のコードはテストされていませんが、あなたはそのアイデアを得ると思います。あなたのメソッドが2回呼び出されると、何が起きるのかを確認する必要があります:前にOnTimeをキャンセルしてから新しいメソッドを呼び出す必要がありますか?

'Cell change is at Sheet2 
Sub Worksheet_Change(ByVal Target As Range) 
If Target.Address = "$C$20" Then 
    Call teste 
End If 
If Target.Address = "$G$20" Then 
    Call teste 
End If 
Dim datestr As String 
datestr = Format(Now, "yyyymmdd, hhmm") 
Application.OnTime TimeValue("00:10:00"), procedureCalled, , False 
procedureCalled = "'Abre """ & datestr & """'" 
Application.OnTime TimeValue("00:10:00"), procedureCalled 
End Sub 

'ThisWorkbook 
Private Sub Workbook_Open() 
    Dim datestr As String 
    datestr = Format(Now, "yyyymmdd, hhmm") 
    procedureCalled = "'Abre """ & datestr & """'" 
    Application.OnTime TimeValue("00:10:00"), procedureCalled 
End Sub 

'Module1 
Public procedureCalled As String '<--variable to keep last scheduled procedure, so you can unshedule it in Worksheet_Change 
Sub Abre(savedate As String) 
    Dim datestr As String 
    datestr = Format(Now, "yyyymmdd, hhmm") 
    procedureCalled = "'Abre """ & datestr & """'" 
    Application.OnTime TimeValue("00:10:00"), procedureCalled 
    Application.DisplayAlerts = False 
    ActiveWorkbook.SaveAs "D:\Temperature Data\DailyTemp " & savedate & ".xlsm" 
End Sub 

'Module2 
Sub teste() 
MsgBox "Did not work" 
End Sub 
+0

手動でセルの値を変化させながら、それは働いたが、自動的にそれがのTimeValueを待っていた(私が欲しかったもの)が、私はマクロの変更を保存した時点で保存、セルの変更時間を無視していました。 Sheet2をアクティブにしておく必要がありますか?私は24/7を開いてSheet1が必要です!私はコードが何をしているのか理解しようとしましたが、私はまだできません...私はVBAにとって非常に新しいです...あなたの助けに本当に感謝します! – Automat

+0

@Automat私のコードを更新しました。私は最後にスケジュールされた手順を維持するためにパブリック変数を追加した。そうすれば、 'Worksheet_Change'で取り消して何度も呼び出すことを防ぐことができます。これがあなたが記述した問題を解決するかどうかはわかりませんが、試してみることができます;) –

関連する問題