2014-07-14 4 views
2

저는 Mac 2011 용 Excel을 사용하고 있으며 한 장에 몇 개의 확인란이 있습니다. 나는 다음과 같은 코드를 자동화하기 위해 노력하고있어 : 런타임 오류 445 개체가이 작업을 지원하지 않습니다ActiveSheet vs. WorkSheet

Private Sub CheckBox12_Click() 
    Dim ws As Worksheet 
    Set ws = ActiveSheet 
    With ws 
     If .Shapes("CheckBox12").OLEFormat.Object.Value = xlOn Then 
      .Range("CK1").EntireColumn.Hidden = False 
     Else 
      .Range("CK1").EntireColumn.Hidden = True 
     End If 
    End With 
End Sub 

이 코드는 나에게 오류를 제공합니다.

은 제거 WS 및 단지

Private Sub CheckBox12_Click() 
    With ActiveSheet 
     If .Shapes("CheckBox12").OLEFormat.Object.Value = xlOn Then 
      .Range("CK1").EntireColumn.Hidden = False 
     Else 
      .Range("CK1").EntireColumn.Hidden = True 
     End If 
    End With 
End Sub 

을하지만 경우에 잘 작동합니다.

여기 거래가 무엇입니까? 나는 ActiveSheet를 사용할 수 있다는 것을 알고 있지만 항상 코드로 프로퍼티의 드롭 다운리스트를 제공하기 때문에 먼저 ws를 설정하는 것을 좋아한다.

+0

코드의 체크 박스 부분을 시도해 보았습니다. 활성 시트인지 워크 시트인지에 관계없이 작동합니다. 문제는 다른 곳에있는 것처럼 보인다. 참고 : 저는 Windows OS에서 작업하고 있습니다. – hnk

+0

Dimws As Worksheet로 방금 선언했으나 실제 워크 시트에 지정하지 않았습니다. 귀하의 질문에 대한 빠른 답변 : 두 번째 코드 스 니펫을 사용하십시오. 감사합니다, –

+0

고마워. 알렉스 내가 말한 후 Set ws = ActiveSheet라고 말하면 충분하지 않습니까? – Yunfei

답변

0

런타임 오류가 아니라 컴파일러 오류가 발생한다고 생각합니다.

나는 ActiveSheet가 작동하는 이유는 그것이 컴파일러가 검사하지 않기 때문이라고 생각합니다. 반면에 ws는 컴파일러가 파싱을 시도하고 실제로 거짓 플래그를 가지고 있기 때문에 작동하지 않습니다. 따라서 컴파일러 검사기에 오류가 있습니다. 실제로 오류가 있어서는 안된 오류를 표시합니다.

Object doesn't support this action (Error 445)

편집 : 또한이를 시도하고 작동하는지 알려 : ActiveSheetWorksheet이 같은 일이 아니라는 것을 또한 주목할 가치가있다

Dim ws As Object 
Set ws = ActiveSheet 
With ws 
    ... 

합니다. ActiveSheet에는 ChartSheet도 포함될 수 있습니다. ChartSheet는 결코 워크 시트가 될 수 없습니다. 따라서 With wsWith ActiveSheet 사이에 차이가 있다는 것은 놀라운 일이 아닙니다. 당신이 변수에 개체를 설정하는 것입니다 시도해야

또 한가지 :

Dim ws As Worksheet 
Set ws = ActiveSheet 
Dim chk As Object 
With ws 
    Set chk = .Shapes("CheckBox12").OLEFormat.Object 
    If chk.Value = xlOn Then 
     .Range("CK1").EntireColumn.Hidden = False 
    Else 
     .Range("CK1").EntireColumn.Hidden = True 
    End If 
End With 

이 방정식에서 WS 변수를 제거 할 수 있습니다. 물론 일반 오브젝트 as Object을 사용하는 것이 아니라 올바른 오브젝트로 희미 해지는 것이 더 나을 것입니다. 그러나 그것이 무엇이 될지 확실하지 않습니다.

+0

On Error Resume을 다음 번 사용해야합니까? 좀 손이 물결 모양 같습니다 – Yunfei

+0

아니 오류 재개 다음을 사용해서는 안됩니다. ActiveSheet가 작동하면 이해 여부와 상관없이 사용할 것입니다. 물론 당신은 당신이 그것을 이해하기를 원하기 때문에 질문을 정확하게 제기했습니다. –

관련 문제