簡體   English   中英

Excel-vba:使用用戶定義的函數(UDF)獲取單元格公式中的選定單元格

[英]Excel-vba: Get the selected cell in a cell formula using a user defined function (UDF)

我嘗試了一個顯而易見的代碼,但是它不起作用。

Function SelectedRange(Optional ShiftRow As Long = 0, Optional ShiftColumn As Long = 0) As Range
    Set SelectedRange = Selection.Offset(ShiftRow, ShiftColumn)
End Function

輸出始終是帶有公式的單元格的值(或多或少的ShiftRow和ShiftColumn),即使在我選擇其他單元格並手動重新計算整個工作表之后也是如此。
我做錯了什么?

您的代碼將在Sub而不是工作表單元格中工作:

Function SelectedRange(Optional ShiftRow As Long = 0, Optional ShiftColumn As Long = 0) As Range
    Set SelectedRange = Selection.Offset(ShiftRow, ShiftColumn)
End Function

Sub MAIN()
    Dim r As Range
    Range("B9").Select
    Set r = SelectedRange(1, 1)
    MsgBox r.Address
End Sub

在此處輸入圖片說明

要在工作表單元格中使用,請傳回所選單元格的地址

Function SelectedRange2(Optional ShiftRow As Long = 0, Optional ShiftColumn As Long = 0) As String
    Application.Volatile
    SelectedRange2 = Selection.Offset(ShiftRow, ShiftColumn).Address(0, 0)
End Function

首先單擊單元格,然后觸摸F9以強制計算:

在此處輸入圖片說明

@Gary學生答案的附錄,基於對問題的評論:當您單擊工作簿中的其他單元格時,此代碼將在公式中找到任何帶有SelectedRange單元格,並計算這些單元格:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim rTMP As Range, sTMP As String
    Set rTMP = Me.Cells.Find("SelectedRange", Me.Cells(1, 1), xlFormulas, xlPart)
    If Not rTMP Is Nothing Then
        sTMP = rTMP.Address
        While Not rTMP Is Nothing
            rTMP.Calculate
            Set rTMP = Me.Cells.FindNext
            If rTMP.Address = sTMP Then Set rTMP = Nothing
        Wend
    End If
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM