source

Excel의 Form Controls와 ActiveX Controls의 차이점

ittop 2023. 5. 12. 22:42
반응형

Excel의 Form Controls와 ActiveX Controls의 차이점

Excel에서 두 가지 유형의 컨트롤을 사용할 수 있는 이유는 무엇입니까? (버튼 2개, 콤보 상자 2개, 확인란 2개 등)

양식 컨트롤과 ActiveX 컨트롤의 차이점은 무엇입니까?어떤 것을 사용해야 합니까?

온라인에서 찾은 일부 코드 샘플은 컨트롤과 함께 작동하지만 다른 코드 샘플은 작동하지 않습니다.왜요?

각 유형을 어떻게 사용하고 어떻게 차이를 구별할 수 있습니까?

Excel에서 사용할 수 있는 두 가지 유형의 컨트롤을 둘러싼 [영원한] 혼란이 있습니다. 이는 서로 다른 온라인 소스에서 사용되는 대조적인 용어로 인해 더욱 악화됩니다.

이것은 양식 컨트롤ActiveX 컨트롤의 차이점대한 일반적인 개요일 뿐입니다(마지막으로 차이점을 파악하는 데 도움이 된 이전 노트를 기반으로 합니다!).코드 및 샘플 프로젝트를 포함한 각 컨트롤에 대한 자세한 정보를 보려면 포함된 링크를 방문하십시오.

(여기에 있는 원래 게시물에서 수정됨 - 이제 닫힘)


개요:

  • 컨트롤에는 두 가지 유형이 있습니다. 컨트롤 및 ActiveX 컨트롤:

  • 가지 유형의 컨트롤은 모두 워크시트에서 사용할 수 있지만 ActiveX 컨트롤만 사용자 양식에서 사용할 수 있습니다.

  • 양식 컨트롤은 도형 집합의 일부이므로(도면 객체와 마찬가지로) 다음과 같이 참조됩니다.워크시트. 도형("관리 이름")

  • ActiveX 컨트롤은 기본적으로 워크시트의 일부이므로 다음과 같이 지칭됩니다.
    워크시트. 관리 이름

  • 가지 유형의 컨트롤 모두 워크시트에서 생성, 수정 및 삭제하거나 VBA를 사용하여 프로그래밍 방식으로 삭제할 수 있지만 VBA를 사용하여 컨트롤을 참조할 때 두 가지 유형의 컨트롤은 구문이 약간 다릅니다.

  • 일부 사이트에서는 데이터 양식에 대해서도 논의합니다.이것은 데이터 입력/조작을 위해 특별히 만들어진 사용자 양식에 지나지 않으므로, (더 친숙하게 들리는) "데이터 입력 사용자 양식"이라고 부르는 것이 더 타당했을 것입니다.

  • 또한 사무실 문서에서는 워크시트를 양식으로 참조하기도 합니다.이것이 기술적으로는 맞지만, 이것이 여러분을 혼란스럽게 하지는 마세요."형태"라는 단어가 일반적인 의미로 사용된다고 생각해 보십시오.

사전 이미지: 양식


두 가지 유형의 컨트롤

  1. 양식 컨트롤

  2. ActiveX 컨트롤

둘은 비슷하게 생겼으며, 행동하고 제어되지만 동일하지는 않습니다. (여기에 나열하십시오.)

예를 들어 두 가지 유형의 콤보 상자를 비교해 보겠습니다.일부 프로그래밍 언어에서는 비슷한 컨트롤을 "드롭다운 메뉴" 또는 "드롭다운 목록"이라고 합니다.Excel에는 "폼 컨트롤 콤보 상자"와 "ActiveX 컨트롤 콤보 상자"가 있습니다.

관리 유형 비교 (확대하려면 이미지를 클릭하십시오.)

"Default name" applies to controls created manually. Controls created programmatically do not have (or require) a default name and therefore should have one assigned immediately upon creation.


제어 장치 간의 차이

(출처: 내 대답)


가용성 제어

아래 이미지는 워크시트 및 사용자 양식에서 일반적으로 사용할 수 있는 공통 컨트롤을 보여줍니다.

관리도

다른 요인이 제어 가용성에 영향을 미칠 수 있습니다.


ActiveX 컨트롤 및 관련 보안 문제 정보

ActiveX 컨트롤은 VBA 도구 상자의 확장입니다.ActiveX 컨트롤은 CheckBox 컨트롤과 같은 표준 내장 컨트롤과 마찬가지로 사용합니다.ActiveX 컨트롤을 응용 프로그램에 추가하면 해당 컨트롤은 개발 및 런타임 환경의 일부가 되며 응용 프로그램에 새로운 기능을 제공합니다.

  • ActiveX 컨트롤은 모든 OLE 컨테이너에서 사용할 수 있는 진행 중인 서버(일반적으로 작은 개체)로 구현됩니다.ActiveX 컨트롤의 전체 기능은 ActiveX 컨트롤을 인식하도록 설계된 OLE 컨테이너 내에서 사용되는 경우에만 사용할 수 있습니다.

  • 컨트롤 컨테이너 또는 컨트롤 개체라고 하는 이 컨테이너 유형은 컨트롤의 속성과 메서드를 사용하여 ActiveX 컨트롤을 작동할 수 있으며 이벤트 형식으로 ActiveX 컨트롤로부터 알림을 수신합니다.다음 그림은 이 상호 작용을 보여줍니다.

    예
    (출처: 이것과 이것)

참고 항목:


옵션 버튼(라디오 버튼)

Excel에서는 두 가지 유형의 라디오 단추를 실제로 옵션 단추라고 합니다.문제를 더욱 혼란스럽게 하기 위해:

  • 양식 컨트롤의 기본 이름은 다음과 같습니다.OptionButton1.

  • ActiveX 컨트롤의 기본 이름은 다음과 같습니다.Option Button 1.

개발 탭 아래의 리본에서 컨트롤의 속성 목록을 열거나 컨트롤을 마우스 오른쪽 단추로 클릭하여 선택하는 것이 이를 구분하는 좋은 방법입니다.Properties또는 를 누릅니다. 왜냐하면 ActiveX 컨트롤에는 단순한 폼 컨트롤보다 더 많은 옵션이 있기 때문입니다.

옵션 단추와 확인란공유 그룹 상자에 배치하여 함께 바인딩할 수 있습니다(그룹에서 한 번에 하나의 옵션만 선택할 수 있음).

그룹 상자 컨트롤을 선택한 다음 그룹화할 다른 컨트롤을 각각 선택하는 동안 유지합니다.그룹 상자 컨트롤을 마우스 오른쪽 단추로 클릭하고 다음을 선택합니다.GroupingGroup.

아래의 처음 두 링크는 각 옵션 단추 유형을 처리하기 위한 별도의 지침 집합입니다.


처리 제어 이벤트:

폼 제어 이벤트(Click이벤트만 해당)

양식 제어 이벤트는 이벤트 하나에만 응답할 수 있습니다(자세한 내용은 여기 참조).ActiveX 컨트롤만 사용하므로 이 섹션은 사용자 양식에는 적용되지 않습니다.

에 대한 절차를 추가하려면 다음과 같이 하십시오.Click이벤트:

  • 컨트롤을 마우스 오른쪽 버튼으로 클릭하고 다음을 선택합니다.Assign Macro...

  • '매크로 할당' 대화상자에서 다음을 수행합니다.

  • 기존 절차를 선택하고 를 클릭합니다.

  • 또는 를 클릭하여 VBE에서 새 절차를 만듭니다.

  • 또는 를 클릭하여 새 매크로를 기록합니다.

  • 할당된 이벤트를 제거하려면 다음에서 해당 이름을 삭제합니다.Macro Name필드를 클릭합니다.

    이벤트 할당 (확대하려면 이미지를 클릭하십시오.)

기존 매크로의 이름을 변경, 편집 또는 삭제하려면 +를 F8눌러Macro인터페이스:

매크로 대화 상자


ActiveX 컨트롤 이벤트

ActiveX 컨트롤에는 응답하도록 설정할 수 있는 보다 광범위한 이벤트 목록이 있습니다.

ActiveX 컨트롤에 이벤트를 할당하려면 컨트롤을 마우스 오른쪽 단추로 클릭하고 다음을 선택합니다.View CodeVBE에서 코드를 붙여넣거나 VBE 창의 오른쪽 상단에 있는 드롭다운 목록에서 특정 이벤트를 선택할 수 있습니다.

activeX 이벤트 (확대하려면 이미지를 클릭하십시오.)

사용자 양식에서 이벤트 처리 제어:

이벤트는 사용자 양식의 컨트롤에서도 사용할 수 있습니다.ActiveX 컨트롤만 사용자 양식에 배치할 수 있기 때문에 "더 많은 코딩 + 더 많은 기능"을 사용할 수 있습니다.

ActiveX 컨트롤은 워크시트에 추가되는 것과 동일한 방법으로 사용자 양식에 추가됩니다.사용자 양식 자체에 할당된 이벤트(즉, 배경)는 컨트롤에 의해 가려지는 모든 영역에서 "차단"되므로 사용자 양식뿐만 아니라 컨트롤에도 동일한 이벤트를 할당해야 할 수 있습니다.

를 들어, 이 사용자 양식이 다음에 응답하도록 하려면MouseMove 사용자 양식, 텍스트 상자, 옵션 단추 프레임에 동일한 이벤트 코드가 적용되었습니다.

이벤트에 응답하는 컨트롤이 있는 사용자 양식


VBA 예제

VBA를 사용하여 양식 제어 옵션 추가/수정/삭제 버튼:

Sub formControl_add()
    'create form control
    Dim ws As Worksheet: Set ws = ActiveSheet
    With ws.Shapes.AddFormControl(xlOptionButton, 25, 25, 100, 100)
        .Name = "cOptionButton1"  'name control immediately (so we can find it later)
    End With
End Sub

Sub formControl_modify()
    'modify form control's properties
    Dim ws As Worksheet: Set ws = ActiveSheet
    ws.Shapes("cOptionButton1").Select
    With Selection 'shapes must be Selected before changing
        .Characters.Text = "wxyzabcd"
   End With
End Sub

Sub formControl_delete()
    'delete form control
    Dim ws As Worksheet: Set ws = ActiveSheet
    ws.Shapes("cOptionButton1").Delete
End Sub

VBA를 사용하여 ActiveX 명령 추가/수정/삭제 버튼:

Sub activexControl_add()
    'create ActiveX control
    Dim ws As Worksheet: Set ws = ActiveSheet
    With ws.OLEObjects.Add("Forms.CommandButton.1")
        .Left = 25
        .Top = 25
        .Width = 75
        .Height = 75
        .Name = "xCommandButton1" 'name control immediately (so we can find it later)
    End With
End Sub

Sub activexControl_modify()
    ' modify activeX control's properties
    Dim ws As Worksheet: Set ws = ActiveSheet
    With ws.OLEObjects("xCommandButton1").Object
        .Caption = "abcxyz"
        .BackColor = vbGreen
    End With
End Sub

Sub activexControl_delete()
    ' delete activeX control
    Dim ws As Worksheet: Set ws = ActiveSheet
    ws.OLEObjects("xCommandButton1").Delete
End Sub

양식 컨트롤 콤보 상자에서 항목 추가/제거:

Sub ComboBox_addRemoveItems_FormControl()

    Dim ws As Worksheet: Set ws = ActiveSheet

    'add item to form control combo box
    ActiveWorkbook.Sheets("Sheet1").Shapes("Drop Down 1").ControlFormat.AddItem "abcd"

    'remove all items from from form control combo bo
    ActiveWorkbook.Sheets("Sheet1").Shapes("Drop Down 1").ControlFormat.RemoveAllItems

End Sub  

ActiveX 콤보 상자에서 항목 추가/제거:

Sub ComboBox_addRemoveItems_ActiveXControl()

    Dim ws As Worksheet: Set ws = ActiveSheet

    'add items to ActiveX combo box
    ActiveWorkbook.Sheets("Sheet1").ComboBox1.AddItem "abcd"

    'remove all items from ActiveX combo box
    ActiveWorkbook.Sheets("Sheet1").ComboBox1.Clear

End Sub  

추가 정보:

언급URL : https://stackoverflow.com/questions/50144020/differences-between-excels-form-controls-activex-controls

반응형