使用其他功能标识链接数据类型

链接数据类型 在 2018 年 6 月 Microsoft 365 专属 Excel 首次发布,因此,其他功能可能无法识别它们。 当您想要使用其他特征有条件地确定单元格是否包含链接的单元格时,数据类型尤其如此。 本文介绍可用于识别单元格中链接数据类型的一些解决方法。

注意: 链接数据类型仅适用于全球多租户客户端 (标准 Microsoft 365 帐户) 。

公式

您始终 可以编写类型引用数据公式。 但是,如果要使用 TEXT 函数提取包含链接数据类型单元格的文本,则#VALUE! 错误。

解决方法是使用FIELDVALUE函数并指定参数field_name字段。 在下面的示例中,如果单元格 A1 包含股票数据类型,则公式将返回股票名称。

=FIELDVALUE (A1,"Name")

但是,如果单元格 A1 不包含链接数据类型,则 FIELDVALUE 函数将返回 #FIELD! 错误. 如果要评估单元格是否包含链接的 数据类型,可以使用以下公式,该公式使用 ISERROR 函数测试 FIELDVALUE 函数是否将返回错误。

=IF (ISERROR (FIELDVALUE (A2,"Name") ) ,"此单元格没有链接的 数据类型","此单元格具有链接的 数据类型")

如果公式计算结果为错误,则它将返回文本"此单元格没有链接的 数据类型",否则将返回"此单元格具有链接数据类型"。

如果只想取消该#FIELD! 错误,可以使用:

=IFERROR (FIELDVALUE (A1,"Name") ,"")

如果存在错误,这将返回空白单元格。

条件格式

你可以 根据单元格是否具有 链接单元格来有条件数据类型。 首先选择需要条件格式的单元格,然后转到"开始">"条件格式>">使用公式...对于公式,请使用以下代码:

=NOT (ISERROR (FIELDVALUE (A1,"Name") ) )

其中,单元格 A1 是要计算区域的顶部单元格。 然后应用需要的格式。

此示例中,如果单元格 A1 包含"Name"的有效字段名称,则公式返回 TRUE,将应用格式设置。 如果单元格 A1 不包含链接数据类型,则公式返回 FALSE,不会应用任何格式。 如果要突出显示不包含有效链接数据类型的任何单元格,可以删除 NOT。

VBA

有几种 VBA (Visual Basic for Applications) 可用于识别单元格或区域是否包含链接的数据类型。 第一个过程使用 HasRichDataType 属性。 

这两个过程都会提示您选择要评估的单元格区域,然后返回包含结果的消息框。

Sub IsLinkedDataType()
    Dim c As Range
    Dim rng As Range
    Dim strResults As String
    
    Set rng = Application.InputBox("Select a range to check for linked data types", Type:=8)
    
    For Each c In rng
      '    Check if the HasRichDataType is TRUE or FALSE
        If c.HasRichDataType = True Then
        '   The cell holds a linked data type
            strResults = strResults & c.Text & " - Linked data type" & vbCrLf
        Else
            strResults = strResults & c.Text & " - Not a linked data type" & vbCrLf
        End If
    Next c

    MsgBox "Your range contains the following details" & vbCrLf & vbCrLf & strResults, vbInformation + vbOKOnly, "Results"
    
End Sub

下一过程使用 LinkedDataTypeState 属性

Sub IsLinkedDataTypeState()
    Dim c As Range
    Dim rng As Range
    Dim strResults As String
    
    Set rng = Application.InputBox("Select a range to check for linked data types", Type:=8)
    
    For Each c In rng
   '    Check if the LinkedDataTypeState is 1 (TRUE) or 0 (FALSE)
        If c.LinkedDataTypeState = 1 Then
        '   The cell holds a linked data type
            strResults = strResults & c.Text & " - Linked data type" & vbCrLf
        Else
            strResults = strResults & c.Text & " - Not a linked data type" & vbCrLf
        End If
    Next c
    
   MsgBox "Your range contains the following details" & vbCrLf & vbCrLf & strResults, vbInformation + vbOKOnly, "Results"

End Sub

此最终代码片段是 UDF (用户定义的) ,就像任何其他 Excel 公式一样引用它。 只需输入 =fn_IsLinkedDataType (A1) , 其中 A1 是要计算单元格。

Public Function fn_IsLinkedDataType(c As Range)
'   Function will return TRUE if a referenced cell contains a linked data type
    If c.HasRichDataType = True Then
      fn_IsLinkedDataType = "Linked data type"
    Else
        fn_IsLinkedDataType = "Not a linked data type"
    End If
End Function

若要使用这些示例之一,请按Alt+F11打开 Visual Basic 编辑器 (VBE) ,然后转到"插入>模块",并将代码粘贴到右侧打开的新窗口中。 完成后, 可以使用 Alt+Q 退出 Excel。 若要运行前两个示例之一,请转到"开发工具"选项卡>代码>>从列表中选择要运行的宏,然后选择"运行"。

需要更多帮助吗?

可随时在 Excel 技术社区中咨询专家,在解答社区获得支持,或在 Excel User Voice 上建议新功能或功能改进。

需要更多帮助?

扩展你的 Office 技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×