2013-02-20 1 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

이 바닥에 문이, 당신이 + '의미'와 '에'사용하는 것으로 표시합니다. 방금 시도했는데 그 행동은 예상 한 것과 다를 수 있습니다. 그들을 리터럴 문자열'and'로 대체하십시오. – Vicky

+2

"재시작 상자"란 무슨 뜻인지 이해가 안됩니다. select 문 앞에 2 개의 변수를 설정하지 않으면 매번 0이됩니다. 제발 더 많은 코드를 게시 할 수 있습니다. – glh

+0

@Vicky 고맙습니다. 저는이 문제를 해결했지만 여전히 변수에 문제가 있습니다. – SCGB

답변

1

확실한 답을 제공하려면 더 많은 컨텍스트가 필요합니다. 코드가 일종의 루프에 있거나 서브 또는 함수가 여러 번 호출 되었습니까?

하위/함수를 호출 할 때마다 StartBox 및 StartBox2 복사본을 새로 만들면 값이 유지되지 않습니다. dim 문을 하위 또는 함수 외부에 배치하면 전역 변수가되며 해당 하위 또는 함수를 호출 할 때마다 해당 값이 유지됩니다.

+0

자세한 내용을 제공하기 위해 코드를 업데이트했지만 select 문 앞에 변수를 설정하지 않았습니다. 그러나이 특정 경우에 변수를 설정할 수 없으면 내용을 지우는 다른 방법을 알지 못합니다. EDIT : 테스트 후 변수를 전역으로 설정하면 실제로 작동합니다. 고맙습니다. – SCGB

1

당신은 당신의 선택 문 전에이 개 변수를 설정해야합니다 : 당신에

... 

StartBox = ActiveCell.Row 
StartBox2 = ActiveCell.Column 

Select Case UCase(Target.Value) 

... 
관련 문제