vba - VBA-如何检查字符串是否为有效的十六进制颜色代码?

标签 vba excel exception error-handling

为防止错误,我需要检查从自定义输入框中检索的字符串是否不是有效的十六进制颜色代码。到目前为止,我发现了其他语言的各种解决方案,但VBA却没有。

处理以下代码,输入不为十六进制的值将导致运行时错误。这对我的项目至关重要,因为我正在保护纸上工作。

Public Function HexWindow(MyCell As String, Description As String, Caption As String)
    Dim myValue As Variant
    Dim priorValue As Variant
    priorValue = Range(MyCell).Value
    myValue = InputBox(Description, Caption, Range(MyCell).Value)
    Range(MyCell).Value = myValue
    If myValue = Empty Then
        Range(MyCell).Value = priorValue
    End If
    tHex = Mid(Range(MyCell).Text, 6, 2) & Mid(Range(MyCell).Text, 4, 2) & Mid(Range(MyCell).Text, 2, 2)
    Range(MyCell).Interior.Color = WorksheetFunction.Hex2Dec(tHex)
End Function

在任何情况下,我该如何设置一个条件来识别非0到9和A-F的“#”和6个字符格式的值?

最佳答案

几种方法可以做到这一点。最简单的方法是使用正则表达式:

'Requires reference to Microsoft VBScript Regular Expressions x.x
Private Function IsHex(inValue As String) As Boolean
    With New RegExp
        .Pattern = "^#[0-9A-F]{1,6}$"
        .IgnoreCase = True                'Optional depending on your requirement
        IsHex = .Test(inValue)
    End With
End Function

如果由于某种原因对您不利,您还可以利用VBA允许的十六进制字符串强制转换为数字:
Private Function IsHex(ByVal inValue As String) As Boolean
    If Left$(inValue, 1) <> "#" Then Exit Function
    inValue = Replace$(inValue, "#", "&H")
    On Error Resume Next
    Dim hexValue As Long
    hexValue = CLng(inValue)  'Type mismatch if not a number.
    If Err.Number = 0 And hexValue < 16 ^ 6 Then
        IsHex = True
    End If
End Function

关于vba - VBA-如何检查字符串是否为有效的十六进制颜色代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40680891/

相关文章:

mysql - 使用linq to sql获取数据时超时过期异常

java - Java支持异常后恢复程序执行吗?

iphone - 加载包含 sqlite3 数据的表时出现异常

Excel VBA - 使用 3 个行元素和 1 个列元素从数据透视表中获取数据

vba - InsertCrossReference 在最后一项上失败

arrays - 如何在 VBA excel 中查找值并创建它们的数组?

excel - 在 Office 2007 应用程序中使用 VBA?

excel - 使用POI写入日期(不含时间)

excel - 如何使用 Angular2 正确下载 excel 文件

Excel - 在两列中列出 Excel 中两个源列中的每个唯一对