2017-11-06 43 views
0

excel에서 vba의 검색 범위를 지정하는 데 with ... end를 사용하려고했습니다. 한 파일에서 해봤지만 제대로 작동했습니다. 그런 다음 또 다른 시도를했는데 with 문이 무시되었습니다. 다음은 샘플 코드입니다 : 그것은, 내가이 워크 시트에서 단어 "오두막"를 포함하는 2 개 세포를 매우 간단해야한다vba가 with with with statement를 무시합니다.

Sub feat_overlap_within_set() 

Workbooks("stimulus_select_3.3.xlsm").Worksheets("feat_overlap within set 1").Activate 

With Range("A2:A542") 

Cells.Find(what:="hut").Activate 

End With 

End Sub 

은 열 A에 하나 B 열의 다른 난 항상 찾을 것으로 예상하고 있습니다 A 열에있는 것이지만, 대신이 열 때마다 항상 B 열의 하나를 가리 킵니다. 그리고 동일한 버전의 Excel (2016)로 작성된 다른 파일에서도 정상적으로 작동합니다.

+0

왜 당신이 With Block을 사용해도? – mooseman

답변

2

With 블록과 함께 사용할 수있는 "바로 가기"를 사용하고 있지 않습니다. With 블록은 기본적으로 .으로 시작하여 무언가를 입력 할 수 있도록 withObject.으로 처리됩니다.

Sub feat_overlap_within_set() 

    Workbooks("stimulus_select_3.3.xlsm").Worksheets("feat_overlap within set 1").Activate 

    With Range("A2:A542") 

     .Cells.Find(what:="hut").Activate 

    End With 

End Sub 

해당 첨단 .을 추가하는 것이 중요합니다. 그것 없이는, 당신은 단지 Cells을 참조하고 있으며, 기본값은 ActiveWorkbook.ActiveSheet.Cells입니다.


,이 일을 시트의 Activate을 방지하고 Range.Cells.Find에 불과 Range.Find 변경, 일치하는 항목이 발견되었는지 여부를 확인하는 더 좋은 방법이 될 것입니다 :

Sub feat_overlap_within_set() 

    With Workbooks("stimulus_select_3.3.xlsm").Worksheets("feat_overlap within set 1").Range("A2:A542") 
     Dim dest As Range 
     Set dest = .Find(what:="hut") 
     If dest Is Nothing Then 
      MsgBox "Not found" 
     Else 
      Application.GoTo dest 
     End If 
    End With 
End Sub 
+1

나는 주로 OP 코드에'.'가 빠진 것을 고치기 만했다. 아마도 "최소한"수정을 한 다음 "더 나은"수정을 할 것입니다. – YowE3K

+0

실제로'Activate '가 아마 어느 정도 필요합니다. 하지만 그것을 'Application.GoTo'로 변경할 것입니다. – YowE3K

+1

코드가 워크 시트의 코드 숨김으로 작성되었는지 여부에 따라 '셀'은 암시 적으로 'Me.Cells'를 참조 할 수 있습니다. 즉, 'WhateverThatSheetIs.Cells'...와 다른 곳에서는 암시 적으로 'ActiveSheet.Cells'입니다. - 따라서 왜이 암시 적'ActiveSheet' 참조는 그런 성가신 작은 악의적 인 것들입니다. –