Application.Caller詳細解釋

lyfegf發表於2024-03-04

官網給的解釋基本看不懂

反覆測試下能搞懂的部分,我知道就三點

1)單元格呼叫自定義函式的時候,表示單元格自己

單元格呼叫老版本又分2種

同樣下面的程式碼

Function test()
  Dim rng As Range
  Set rng = Application.Caller
  test = rng.Address
End Function
  • 如果我在C14單元格里使用,就返回的結果是:$C$14

  • 如果我在C12:E12範圍用CTRL+SHIFT+ENTER的陣列方式使用,返回的就是這個區域$C$12:$E$12

2)在一些很古老的事件使用的時候表示文字的文件名稱

舉個例子

Sub auto_open()
  Debug.Print Application.Caller
End Sub

這個其實就是一個啟動事件,上面程式碼啟動就會顯示文件名稱:

[工作簿1.xlsm]Sheet1

按官方文件說明能用幾個事件:

  • Auto_Open
  • Auto_Close
  • Auto_Activate
  • Auto_Deacitvate

上面的程式碼直接寫模組裡就可以,不需要去Thisworkbook裡寫

3)可以返回撥用程式碼的圖形名稱

Sub 呼叫自己()
  ' 定義變數 sp 為 Shape 型別
  Dim sp As Shape
  ' Application.Caller得到圖形的名字,ActiveSheet.Shapes()就是拿名字得到圖形
  Set sp = ActiveSheet.Shapes(Application.Caller)
  ' 將按鈕 sp 中的文字內容賦值給單元格 A1
  [a1].Value = sp.TextFrame2.TextRange.Characters.Text
End Sub

結果如下圖

相關文章