检查字符串值是否为公式、范围或常量

问题描述 投票:0回答:1

我有一个非常具体的用例,我需要读取每个单元格的数据验证字段中输入的值。 如果该值是一个列表,则该值应按原样存储在字符串中。但是,如果它是范围或命名范围,则应破译范围,然后将值转换为列表并存储。

例如,如果验证为“活动、非活动”,则 permissible_values =“活动、非活动” 如果验证为“=Sheet1!A1:A4”,则如果 A1 =“是”、A2 =“否”、A3 =“可能”且 A4 =“NA”,则 permissible_values =“是、否、也许、NA”

我已经能够从验证字段中读取值,但是如何破译字符串中的值是列表还是范围?

        Temp = Range(Cells(5, Counter).Address).Validation.Formula1
        Temp = Right(Temp, Len(Temp) - 1)
        Sheet1.Select
        Set Temp2 = Range(Temp)
        New_Sheet.Cells(Counter + 1, 3).Value = TJoin(";", Temp2)

我使用上面的代码来读取范围值并从中创建一个字符串。但这不适用于静态。无法为此形成 if 条件。另外,在上面的代码中,如果它是一个范围,那么当前sheet不是一个变量。我在代码中手动选择 Sheet1,然后选择范围。我可以使工作表选择也可变,这可以根据验证中的值来完成吗?

excel vba validation range named-ranges
1个回答
0
投票

不是完整的答案,但您可以尝试按照这些思路进行操作。

Public Function get_validation_summary(rngCell As Range) As String

Dim v As Validation
Dim r As Range
Dim a() As Variant

Set v = rngCell.Validation

Set r = is_range((Right(v.Formula1, Len(v.Formula1) - 1)))

If Not r Is Nothing Then
    a = Application.Transpose(r)
    get_validation_summary = Join(a, ",")
Else
    get_validation_summary = v.Formula1
End If

End Function

Public Function is_range(strFormula As String) As Range

On Error GoTo eHandle:

Set is_range = Range(strFormula)

exit_function:

Exit Function

eHandle:

    Set is_range = Nothing
    GoTo exit_function
    
End Function
© www.soinside.com 2019 - 2024. All rights reserved.