私は、現在の日付に対して、列Aにある最新の日付セルをチェックしようとしています。差異が30日であれば、私は新しい行を書きます。私の簡単なExcel VBAマクロをデバッグするには?
私が実行すると、私はシート上のCheckAttendanceを呼び出すことができないと言います(Occulnces)。しかし、なぜ?
Option Explicit
Public LastCell As Long
Public today As Date
Function CheckAttendance()
Dim DaysSinceOcc As Integer
'returns last occupied row
LastCell = Cells(Rows.Count, 1).End(xlUp).Row
'gets current date
today = Date
'subtracts last cell in specified column from today's date.
DaysSinceOcc = today - Cells(LastCell, 1).Value
'writes what I want written in the cells I want it written in.
If DaysSinceOcc > 29 Then
Cells(LastCell, 1).Offset(1, 1) = "winback"
Cells(LastCell, 1).Offset(1, 2) = -0.5
Cells(LastCell, 1).Offset(1, 4) = "Earned back 0.5 pts for 30 days perfect attendance (AutoGenerated)"
Cells(LastCell, 1).Offset(1, 5) = "AUTO"
Cells(LastCell, 1).Offset(1, 0) = today
Else
End If
End Function
Sub Attendance()
Sheets("Occurences").CheckAttendance
'yes Occurences is suppose to be spelled like that (don't ask)
End Sub
編集:おそらくこれには複数の問題があります。私は多くのことを修正しましたが、つづりました。
'シート( "出現箇所")なしでちょうど' CheckAttendance'を使用しています。 ' – Slai
@ Slaiのコメントに加えて、1)それは機能ではなくサブでなければならない。 2)コード内のセルへの適切な参照を提供する必要があります(ワークブックとワークシートを明示的に参照してください。そうでないと、コードが不安定になる可能性があります)。 – RADO
@RADOご意見ありがとうございます。あなたのコメントはA.S.Hと比較してわかりました。答えは私は2つの異なる選択肢があります:ワークシートを異なるワークシートで呼び出すことを可能にするパラメータをワークシートにするか、より具体的にすることができるので、Occurencesシートでのみ機能します。私はそれを正しく理解しているのですか、そうではないと私は思っています。 –