0

私は次のコードを持っています:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count > 1 Then Exit Sub
On Error Resume Next
Dim StartBox As Long
Dim StartBox2 As Long


Select Case UCase(Target.Value)


Case "NEW-BOX"
    StartBox = ActiveCell.Row
    StartBox2 = ActiveCell.Column
    MsgBox (StartBox)
    MsgBox (StartBox2)
    Selection.Offset(-1, 2).Select
    Selection.ClearContents
    Selection.Activate
    Selection.Offset(1, -2).Select

Case "RESTART-BOX"
    MsgBox (StartBox)
    MsgBox (StartBox2)

   If StartBox = 0 And StartBox2 = 0 Then
MsgBox "Cannot restart box without scanning a new box first!", vbCritical
ElseIf StartBox <> 0 And StartBox2 <> 0 Then
ActiveSheet.Range(Cells(StartBox, StartBox2), Cells(ActiveCell.Row, ActiveCell.Column)).ClearContents
End If


 End Select

End Sub

新しいボックスをスキャンすると、変数が正しい列と行に設定されますが、再起動ボックスをスキャンすると、メッセージボックスが両方とも0になりますか?どうしてこれなの?内容をクリアするためにこれらの変数をコードに渡す必要がありますが、何らかの理由でそれらを設定していても、「RESTART-BOX」に表示されませんか?

4

2 に答える 2

1

決定的な答えを提供できるようにするには、より多くのコンテキストが必要です。あなたのコードはある種のループにありますか、それともこれはサブまたは関数が複数回呼び出されていますか?

後者の場合、sub /関数を呼び出すたびにStartBoxとStartBox2の新しいコピーが作成されるため、値は保持されません。ステートメントをサブまたは関数の外部に配置dimすると、それらはグローバル変数になり、サブまたは関数への各呼び出しにわたってそれらの値を保持します。

于 2013-02-20T13:03:11.953 に答える
0

selectステートメントの前に2つの変数を設定する必要があります。

...

StartBox = ActiveCell.Row
StartBox2 = ActiveCell.Column

Select Case UCase(Target.Value)

...
于 2013-02-20T13:07:55.820 に答える