2016-04-07 3 views
1

Der folgende Code mich durch die Arbeitsmappe und Arbeitsblätter gehen können, die Makros haben:wenn ein VBComponent eine Arbeitsmappe oder ein Arbeitsblatt in Bezug auf

For Each VBCmp In ActiveWorkbook.VBProject.VBComponents 
    Msgbox VBCmp.Name 
    Msgbox VBcmp.Type 
Next VBCmp 

Als this page zeigt für eine Arbeitsmappe und einem Blatt, ihre Art sind beide 100, dh vbext_ct_Document. Aber ich möchte sie immer noch unterscheiden: Ich möchte wissen, welche VBCmp über eine Arbeitsmappe ist, die über ein Arbeitsblatt ist.

Beachten Sie, dass geändert werden kann, sie sind nicht unbedingt immer ThisWorkbook oder Sheet1, so dass es keine zuverlässige Information für was ich bin nach.

Weiß jemand, ob es eine Eigenschaft darüber gibt?

Antwort

1

Arbeitsblattobjekte und Arbeitsmappenobjekte haben beide eine CodeName-Eigenschaft, die mit der VBCmp.Name-Eigenschaft übereinstimmt, sodass Sie die beiden für eine Übereinstimmung vergleichen können.

Sub Tester() 
    Dim vbcmp 
    For Each vbcmp In ActiveWorkbook.VBProject.VBComponents 
     Debug.Print vbcmp.Name, vbcmp.Type, _ 
        IIf(vbcmp.Name = ActiveWorkbook.CodeName, "Workbook", "") 
    Next vbcmp 
End Sub 
Verwandte Themen