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 回答