0

次の問題があります。

Excel スプレッドシートで特定の範囲 (B20:Y20) の行をロックし、ロックされた行を特定の色でペイントするマクロを作成しました。さらに、ロックされた行のタイムスタンプを Y20 に作成します。セル ロックの条件は、列 B20 の値が空でないことです。

マクロをアクティブにすると、まずセル B20 の値が 0 より大きいかどうかを確認する必要があります。この場合、指定した範囲の行がロックされ、色が付けられ、タイムスタンプが追加されます。

ここでの目標は、B21 の値が >0 の場合、次の行 (範囲 B21:Y21) に対して同じ手順を実行することです。これは私の問題につながります: 連続する行でマクロを実行するにはどうすれば「ロールフォワード」できますか?

私の観点からは、コードのすべてのランクを調整して、列と行が「動的」になり、現在表示されている特定の1行だけを「厳密に」実行できないようにすることが目標です。

マクロをアクティブにすることで、列 B の >0 である次の行が処理に使用されるように、コードを調整する方法を知っている人はいますか?

前もって感謝します。

これが私のコードです:

Sub Check()

If ActiveSheet.Range("B20") = "" Then
    MsgBox "Please Check Input Data.", vbOKOnly, "Error"
Else
    Call Savepostings
End If

End Sub

Sub protectrow()

Dim rng As Range
Set rng = Range("A20:Y20")
ActiveSheet.Unprotect Password:="A"
rng.Interior.Color = vbRed
rng.Locked = True
ActiveSheet.Protect Password:="A", DrawingObjects:=True, _
        Contents:=True, Scenarios:=True, _
        userinterfaceonly:=True
ActiveSheet.EnableAutoFilter = True

End Sub

Sub Savepostings()

If Cells(13, 2) = "ERROR" Then
    MsgBox "Error", vbOKOnly, "Error"
Else
    MsgBox "OK", vbOKOnly, "OK"

    Call printtime
    Call protectrow
End If

End Sub

Sub printtime()

Cells(20, 24) = printUserName
Cells(20, 25) = printTimeStamp

End Sub

Function printUserName() As String
printUserName = Application.UserName
End Function

Function printTimeStamp() As String
printTimeStamp = Now()
End Function
4

0 に答える 0