我正在尝试设置一个动态Excel恢复默认工作表公式,该公式包含2个变量:字段名称地址和字段值地址。实际上这部分已经完成,但是让我分享一个我想要实现的示例:我有一张床单:
=HYPERLINK("#restoreDefaultForRange(" & CELL("address",A1) & ",B1)","⭯")
我将在帖子末尾分享VBA代码。该公式有效,代替B1,我什至可以使用B1:B3恢复该区域中的所有单元格,并且我可以使用3个区域除以“,”,例如:B1,B2:B4,B5,它将恢复所有区域中的单元格。指定的区域。
问题是,尽管A1部分是动态的(并且如果我添加/删除行/列,则引用将随它们一起移动)B2只是文本,因此不会更新。
是否有与CELL(“ address”,A1)类似的公式,该公式适用于Region,而不适用于单个单元格,因此我也可以使公式的第二部分也变得动态?
VBA:
Function restoreDefaultForRange(targetName, targetRange As Range, Optional targetRange1 As Range, Optional targetRange2 As Range)
Set restoreDefaultForRange = Selection
restoreDefaultInputsForRange targetName, targetRange, targetRange1, targetRange2
End function
Private Sub restoreDefaultInputsForRange(targetName, targetRange As Range, Optional targetRange1 As Range, Optional targetRange2 As Range)
Dim cellTitle, cellI As Range, rngI, cellCounter As Long
Dim I As Long, MSG As String
If budgetStatus = StatusInProgress Or budgetStatus = StatusReview Then
cellTitle = targetName
cellCounter = 0
'GET MESSAGE BY LOOPING THROUGH OPTIONAL RANGES
For Each rngI In Array(targetRange, targetRange1, targetRange2) ' FOR EACH OF THE RANGES, INCLUDING OPTIONAL
If Not rngI Is Nothing Then ' IF OPTIONAL IS DEFINED
cellCounter = cellCounter + rngI.Cells.Count
MSG = WorksheetFunction.TextJoin(", ", True, MSG, targetRange.Address(0, 0))
End If
Next
MSG = "[ " & cellCounter & IIf(cellCounter > 1, " cells - ", " cell - ") & MSG & " ]"
If vbYes = MsgBox("Restore the default formulas for: " & vbNewLine _
& "'" & cellTitle & "'" & vbNewLine _
& MSG & vbNewLine _
& "", _
vbYesNo, "Restore defaults ?") Then
'UNIVERSAL RESTORE DEFAULT FOR TARGET CELL
For Each rngI In Array(targetRange, targetRange1, targetRange2) ' FOR EACH OF THE RANGES, INCLUDING OPTIONAL
If Not rngI Is Nothing Then ' IF OPTIONAL IS DEFINED
For Each cellI In rngI.Cells ' FOR EACH CELL IN RANGE
restoreDefaultsForCell cellI ' RESTORE REFAULTS
Next
End If
Next
setProgramAlertsOn
restoreDefaultsMode = False
MsgBox "Finished restoring defaults", vbOKOnly, "Done"
End If
Else
messageRestoreDefaults
End If
End Sub
您实际上已经在使用该解决方案(如果我了解您的问题)。也将CELL
功能用于B1。怎么样:
=HYPERLINK("#restoreDefaultForRange(" & CELL("address";A1) & ";" & CELL("address";B1) &")";"⭯")