我有以下代码:
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'中?
答案 0 :(得分:1)
我们需要更多背景才能提供明确的答案。您的代码是在某种循环中还是多次调用子函数?
如果是后者,那么每次调用子/函数时都会得到一个新的StartBox和StartBox2副本,因此它们不会保留这些值。如果将dim
语句放在子语句或函数之外,那么它们将成为全局变量,并将在每次调用子函数或函数时保留它们的值。
答案 1 :(得分:0)
您需要在select语句之前设置2个变量:
...
StartBox = ActiveCell.Row
StartBox2 = ActiveCell.Column
Select Case UCase(Target.Value)
...