![](/img/trans.png)
[英]UDF (user-defined function) to identify the format pattern for an Excel cell
[英]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.