2013-02-20 57 views
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”中。

+1

在你。我刚刚尝试过,行为可能不是你所期望的。将它们替换为文字串'和'。 – Vicky 2013-02-20 12:57:33

+2

我不明白你的意思是“重启盒子”。如果在选择语句之前未设置2个变量,则每次都会得到0。请你可以发布更多的代码。 – glh 2013-02-20 12:59:17

+0

@Vicky谢谢你,我已经纠正了这一点,但是我仍然对变量有问题。 – SCGB 2013-02-20 12:59:50

回答

1

我们需要更多的上下文才能够提供明确的答案。你的代码是在某种类型的循环中吗?或者这是一个被多次调用的子或函数?

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

+0

我已更新我的代码以提供更多详细信息,我没有在select语句之前设置变量,但是如果我无法在此特定情况下设置变量,我不知道如何清除内容。 编辑: 经过测试,将变量设置为全局确实可行。非常感谢你。 – SCGB 2013-02-20 13:05:57

1

你需要你的SELECT语句前将2个变量:如果在底部有语句,你似乎是使用'+'的意思“和”

... 

StartBox = ActiveCell.Row 
StartBox2 = ActiveCell.Column 

Select Case UCase(Target.Value) 

... 
相关问题