it-source

Excel VBA에서 사용자에게 범위 선택 도구/유틸리티 제공

criticalcode 2023. 9. 3. 16:20
반응형

Excel VBA에서 사용자에게 범위 선택 도구/유틸리티 제공

Excel 2007 VBA에서 사용자 양식을 개발하려고 하며 사용자에게 다음과 같은 범위 선택 아이콘을 제공하려고 합니다.Range Selection Icon

하지만, 저는 이것을 제공하거나 적어도 아이디어를 제공하는 내장 폼 디자인 도구나 온라인 도구를 찾을 수 없었습니다.이에 대해 아시는 분이 계시다면 도움을 주시면 감사하겠습니다.

이 컨트롤을 RefEdit 컨트롤이라고 합니다.

이를 사용하려면 먼저 도구 상자 창에서 마우스 오른쪽 단추를 클릭하고 추가 컨트롤...을 선택하여 도구 상자 창에 추가해야 합니다.그런 다음 RefEdit을 선택합니다.Ctrl 키를 누른 후 대화 상자를 닫습니다.

이제 도구 상자에서 선택하여 양식에 배치할 수 있습니다.

RefEdit 사용에 대한 또 다른 대안.CtrlTextBox 컨트롤의 일부 문서화되지 않은 기능에 연결하여 응용 프로그램을 사용하는 것입니다.InputBox 기능.

TextBox 컨트롤에는 오른쪽에 단추를 추가할 수 있는 속성 대화 상자에 나타나지 않는 두 가지 속성이 있습니다.DropButtonStyleShowDropButtonWhen입니다.버튼을 클릭하면 입력 상자를 표시할 수 있는 컨트롤에 대한 DropButtonClick 이벤트가 실행됩니다.

양식에 TextBox 컨트롤을 배치하는 것으로 시작합니다.그런 다음 사용자 양식에 다음을 추가합니다.초기화 절차:

Private Sub UserForm_Initialize()
    txtRefersTo.DropButtonStyle = frmDropButtonStyleReduce
    txtRefersTo.ShowDropButtonWhen = frmShowDropButtonWhenAlways
End Sub

그런 다음 DropButtonClick 이벤트에 다음과 같이 이벤트 핸들러를 추가하여 응용 프로그램을 사용하여 범위를 캡처합니다.입력 상자 대화 상자:

Private Sub txtRefersTo_DropButtonClick()
    Me.Hide
    txtRefersTo.Text = Application.InputBox("Select the range", "Range Picker", txtRefersTo.Text, Type:=8)
    Me.Show vbModal
End Sub

접근 방식의 주요 이점은 RefEdit와 관련된 문제를 겪지 않고 프레임 내 또는 별도의 탭에 컨트롤을 배치할 수 있다는 것입니다.Ctrl. Excel과 상호작용하기 위해서는 별도의 대화창이 필요하다는 단점이 있습니다.

이 질문은 이미 10년이 다 되어가지만, 여전히 저의 첫 구글 검색 결과로 나왔기 때문에 저는 고려해야 할 또 다른 접근법으로 답변을 올리려고 합니다. 참조로 설정된 유형의 입력 상자는 많은 사용자의 요구에 충분할 수 있습니다.입력 상자 유형은 사용자의 응답을 확인하는 드러지 작업을 수행합니다.InputBox 유형의 사용 방법은 다음 문서를 참조하십시오. https://www.thespreadsheetguru.com/blog/vba-to-select-range-with-inputbox

는 @krey answer를 좋아했습니다. @krey answer --> https://www.thespreadsheetguru.com/blog/vba-to-select-range-with-inputbox 에서 공유되는 링크의 기본적으로 매우 단순한 버전이었습니다.

하지만 둘 다 버튼에 "홀수" 이름을 사용했고 가이드는 최종 사용자가 쉽게 이해하고 조작할 수 있도록 기본 이름/값을 사용해야 한다고 생각합니다.추가로, 나는 a를 추가했습니다.CommandButton초기 테스트를 위해 사용자 양식과 "선택" 문을 "실행"합니다.또한 사용자 양식을 미리 작성할 때 초기 값을 제공하지만 필요한 경우 최종 사용자가 재정의할 수 있도록 허용하고 싶었습니다.

다음은 사용자 양식을 사용하는 최종 코드 조각입니다.TextBox이름 지어진TextBox1(기본값) 및 1CommandButton이름 지어진CommandButton1(기본값도 있음).

Option Explicit

Public rng As Range

Public Sub UserForm_Initialize()
  Me.TextBox1.DropButtonStyle = fmDropButtonStyleReduce
  Me.TextBox1.ShowDropButtonWhen = fmShowDropButtonWhenAlways
  Set rng = Range("A1:B4")
  TextBox1.Value = rng.Address(False, False)
End Sub

Public Sub CommandButton1_Click()
 rng.Select
 Unload Me
End Sub

Public Sub TextBox1_DropButtonClick()
    Me.Hide
    Set rng = Application.InputBox("Select the range", "Range Picker", TextBox1.Text, Type:=8)
    TextBox1.Value = rng.Address(False, False)
    Me.Show
End Sub

언급URL : https://stackoverflow.com/questions/4507350/provide-a-range-selection-tool-utility-to-the-user-in-excel-vba

반응형