【问题标题】:Custom function in Excel for cell hyperlink creationExcel 中用于创建单元格超链接的自定义函数
【发布时间】:2017-05-26 19:00:56
【问题描述】:

例如,如果我有一个像这样的复杂函数:=IFERROR(CELL("address",INDEX(D:D,MATCH(A2;D3:D$750;0)+ROW(A2);1;1));"") 我想将其转换为指向该公式返回的单元格的超链接。是的,我知道这可以通过用=HYPERLINK("[file_name.xlsm]" & %formula%) 包装来完成,但首先,在大稀疏数据中读取看起来非常丑陋和不舒服,其次 - 复制这样的数据块非常不方便Excel 实例之间(然后替换文件名)。

所以我想知道 - 是否可以将此类输出转换为当前文件和工作表的单元格链接,并使用“D156”等可读文本代替“[long_file_name.xlsm]$ 156 美元”?

附:显然我可以创建一个返回当前文件名的自定义函数并将相同的公式放入 HYPERLINK 函数的第二个参数中,但显然它会适得其反,尤其是当我有大量数据时。所以我想把所有这些包装成一个函数......

附言不确定这是否合适(这个问题有点离题),但如果可以使用宏而不是自定义函数来完成相同的功能,那就没问题了。因此,宏应该找到当前选定范围内的所有重复项,并创建超链接(在具有相同偏移量的单元格中,偏移量为 +1 的不同工作表上,当前活动后的下一个工作表)到每个重复项的下一次出现。其余的我可以自己处理。


UPD1: 获取文件名不是问题,正如我在 P.S. 中所说的,我可以编写这样的函数:

Function GetCurFilename()
    GetCurFilename= "[" & ActiveWorkbook.Name & "]"
End Function

但我仍然需要以某种方式将第一个 HYPERLINK 的部分参数作为第二个参数发送!


UPD2: 我想应该是这样的:

Function MakeLinkArgs(cAdrs) As SomeType_interpreted_as_2_arguments
    If (cAdrs = "") Then
        MakeLinkArgs(1) = ""
        MakeLinkArgs(2) = ""
    Else
        MakeLinkArgs(1) = "[" & ActiveWorkbook.Name & "]" & cAdrs
        MakeLinkArgs(2) = Replace(cAdrs, "$", "")
    End If
End Function

所以这个函数可以这样使用:=HYPERLINK( MakeLinkArgs( IFERROR(CELL("address",INDEX(D:D,MATCH(A2;D3:D$750;0)+ROW(A2);1;1));"") ) )

但仍然没有找到可以解释为 2 个参数的类型(不确定是否存在)...

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    不完全确定你在问什么,但我认为 =CELL("filename") 会帮助你。这将返回文件名和工作表。只需从返回的内容中提取工作表名称和文件名即可。也可用于剪切/粘贴到其他工作簿/工作表。

    【讨论】:

    • 把问题读到最后(至少到第一个 P.S. 的结尾),获取文件名不是问题,我需要以某种方式将第一个 arg 传播为 HYPERLINK 函数的第二个 ...
    【解决方案2】:

    好吧,我没有找到一种方法来发送来自其他函数的单个结果的多个参数,但我找到了一种方法来做我想做的事。对我来说这看起来像是一个肮脏的黑客,但我不确定,也许这是在 Excel VBA 中做事的方式......

    所以首先需要在模块顶部添加一个公共变量:

    Public sBuff As String
    

    接下来,这两个函数应该在 public var 声明之后添加:

    Function MakeCLink(cAdrs)
        If (cAdrs = "") Then
            MakeCLink = ""
            sBuff = ""
        Else
            MakeCLink = "[" & ActiveWorkbook.Name & "]" & cAdrs
            sBuff = Replace(cAdrs, "$", "")
        End If
    End Function
    
    Function sBuf() As String
        sBuf = "" & sBuff
    End Function
    

    编译后可以在公式中使用:=HYPERLINK( MakeCLink(IFERROR(CELL("address",INDEX(D:D,MATCH(A2,D3:D$750,0)+ROW(A2),1,1)),"")), sBuf() )

    是的,它很丑,但对我来说就像魔法一样 =)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      相关资源
      最近更新 更多