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

链接数据类型在2018年6月的Excel for Office 365 中发布,因此其他功能可能无法识别它们。 当你希望使用其他功能来按条件标识单元格是否包含链接数据类型时,尤其如此。 本文介绍了一些可用于在单元格中标识链接数据类型的解决方法。

公式

你始终可以编写引用数据类型的公式。 但是,如果你想要使用 TEXT 函数提取具有链接数据类型的单元格的文本,你将收到 #VALUE! 错误。

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

= FIELDVALUE (A1,"Name")

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

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

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

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

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

如果出现错误,这将返回一个空白单元格。

条件格式

可以根据单元格是否具有链接数据类型来对其进行条件格式设置。 首先选择需要条件格式的单元格,然后转到 "开始" >条件格式>新规则>使用公式 ...对于公式,您将使用以下内容:

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

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

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

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 支持专员。

×