variables之间没有设置的情况下?

我有以下代码:

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 

我扫描一个新的框,并将variables设置为正确的列和行,但是当我扫描重新启动框,消息框都出现0? 为什么是这样? 我需要将这些variables传递到我的代码清除内容,但由于某种原因,即使我设置它们,它们将不会出现在“RESTART-BOX”中?

我们需要更多的上下文来提供一个明确的答案。 你的代码是在某种forms的循环中,还是被多次调用的子或函数?

如果是后者,则每次调用子/函数时都会得到StartBox和StartBox2的新副本,因此它们不会保留这些值。 如果您将dim语句放在子函数或函数之外,则它们将成为全局variables,并将在每次调用子函数或函数时保留它们的值。

你需要在select语句之前设置你的2个variables:

 ... StartBox = ActiveCell.Row StartBox2 = ActiveCell.Column Select Case UCase(Target.Value) ...