Application.런을 시작으로 셀 값과 사용자 테이블에서 매크로 [ExcelVBA] 호출

13701 단어 ExcelVBA
며칠 전에는 하이퍼링크를 매크로 실행 버튼으로 바꾸는 트윗에 신경을 썼지만, 착수가 어려워 다소 늦은 감이 있었고, 며칠 전 이 기사Application.Run와 셀의 값으로 매크로를 호출할 수 있어 다른 모드에 카드를 추가할 계획이다.
개요
하이퍼링크 이외에 셀 값을 프로세스 이름으로 설정하면 트리거에서 매크로를 실행할 수 있습니다

하이퍼링크를 터치하려면 이 칸을 참고하십시오.
또 사용자 형식의 다양한 프로그램 명칭도 보유할 수 있다.

표준 모듈: 모든 모드에서 통용되는 호칭
Option Explicit

Sub CallProc(ProcName)
  On Error GoTo Err
  Dim wbName: wbName = ThisWorkbook.Name
  Application.Run wbName & "!" & ProcName
  Exit Sub
Err:
  Select Case Err.Number
    Case Is = 1004 '何もしない。呼び出すものが無いときのエラーNoなので。
  End Select
End Sub

Sub test1()
  MsgBox 1
End Sub

Sub test2()
  MsgBox 2
End Sub

워크시트 모듈
부터Worksheet_FollowHyperlink
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
  Call CallProc(Target.Name)
End Sub
부터Worksheet_BeforeDoubleClick
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Call CallProc(Target.Value)
End Sub
부터Worksheet_SelectionChange
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Call CallProc(Target.Value)
End Sub
잘 보진 못했지만 셀 값을 매개 변수로 삼으면 뭐든지 돼
사용자 창

명령 버튼:객체 이름 선택 모드
버튼을 누르면 위에 그거래요.
Private Sub test1_Click()
  Call CallProc(Me.test1.Name)
End Sub
명령 버튼:설명 모드 선택
버튼을 누르면 밑에 그거래요.
Private Sub CommandButton1_Click()
  Call CallProc(Me.CommandButton1.Caption)
End Sub
목록 상자
Private Sub UserForm_Initialize()
  With Me
    .ListBox1.AddItem "test1"
    .ListBox1.AddItem "test2"
  End With
End Sub

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  With Me.ListBox1
    Dim myIndex: myIndex = .ListIndex
    Dim myItem: myItem = .List(myIndex)
    Call CallProc(myItem)
  End With
End Sub
목록 보기
Proc 이름의 열 너비를 최소로 설정하면, Proc 이름의 줄임말만 표시할 수 있습니다
(ListView의 구조가 아직 이해가 안 되는 점 양해)
    With .ColumnHeaders
      .Add 1, "key1", "略称", 50
      .Add 2, "key2", "Proc名", 50
    End With

Private Sub UserForm_Initialize()
  Call SetListView
End Sub

Private Sub ListView1_DblClick()
  Dim buf
  buf = Me.ListView1.SelectedItem.ListSubItems.Item(1).Text
  Call CallProc(buf)
End Sub

Private Function myProcs_()
  Dim myArr(1)
  myArr(0) = Array("てすと1", "test1")
  myArr(1) = Array("てすと2", "test2")
  myProcs_ = myArr
End Function

Private Sub SetListView()
  Dim myProcs
  myProcs = myProcs_

  With Me.ListView1
    .View = lvwReport
    .LabelEdit = lvwManual
    .HideSelection = False
    .AllowColumnReorder = True
    .FullRowSelect = True
    .Gridlines = False

    With .ColumnHeaders
      .Add 1, "key1", "略称", 50
      .Add 2, "key2", "Proc名", 50
    End With

    Dim cnt
    For cnt = 0 To UBound(myProcs)
      With .ListItems.Add
        .Text = myProcs(cnt)(0)
        .SubItems(1) = myProcs(cnt)(1)
      End With
    Next
  End With
End Sub
망상
프로세스 목록을 자동으로 가져올 수도 있습니다
이런 걸로 그런 일을 할 수도 있어요.
다른 책의 매크로를 호출할 수도 있어요.wbName 투입할 책 제목을 다른 책으로 바꾸면 다른 책의 매크로도 불러낼 수 있다(또는 다른 책의 매크로가 원래 용도라고?)
  Dim wbName: wbName = ThisWorkbook.Name
  Application.Run wbName & "!" & ProcName
여기에도 매개 변수를 교차하는 방법이 있다.

좋은 웹페이지 즐겨찾기