2016-11-18 35 views
0

エラーを防ぐために、カスタム入力ボックスから取得した文字列が有効な16進数のカラーコードでないかどうかを確認する必要があります。これまで私は他の言語のためのさまざまなソリューションを見つけましたが、VBAはありませんでした。VBA - 文字列が有効な16進数のカラーコードであるかどうかをチェックする方法

16進数ではない値を入力すると、実行時エラーが発生します。私は保護されたシートに取り組んでいるので、それは私のプロジェクトにとって非常に重要です。私はどのような場合で0-9とA-Fから「#」& 6文字の形式にない価値を認識して条件を設定するにはどうすればよい

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

今すぐコードを追加する時間がありませんが、正規表現を調査します。 – SJR

+0

「正規表現」とはどういう意味ですか?私はプログラミングに新しいことを追加する必要があります。 –

+0

http://stackoverflow.com/documentation/regex/topics – Nulled

答えて

1

これを行う方法はいくつかあります。最も簡単な方法は、正規表現を使用することです:

'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 
+0

作品は魅力的です。ありがとう! –

+0

@Locké - 編集を参照してください。式にはアンカーが必要です。 – Comintern

0

私はこのために正規表現を使用します。まず、VBAエディタ(ALT-F11)にTools-->Referencesに移動し、このライブラリは

Microsoft VBScript Regular Expressions 5.5 

をチェックされている、あなたは

Sub RegEx_Tester() 
Set objRegExp_1 = CreateObject("vbscript.regexp") 
objRegExp_1.Global = True 
objRegExp_1.IgnoreCase = True 
objRegExp_1.Pattern = "#[a-z0-9]{6}" 
strToSearch = "#AAFFDD" 
Set regExp_Matches = objRegExp_1.Execute(strToSearch) 
If regExp_Matches.Count = 1 Then 
    MsgBox ("This string is a valid hex code.") 
End If 
End Sub 

主な機能は、あなたのニーズを満たすために、このサンプルコードを変更する可能性を確認する必要がありますこのコードで、これは

objRegExp_1.Pattern = "#[a-z,A-Z,0-9]{6}" 

それはあなたが大文字またはLOの組み合わせである任意の6つの文字が続く#を持っている文字列を受け入れることを言っています大文字小文字の文字列または数字0-9。 strToSearchは、有効な色の16進文字列かどうかを調べる文字列です。これがあなたを助けるはずだと思います。

クレジットカード番号this siteです。正規表現にクラッシュコースが必要な場合は、チェックアウトしてください。一度使用方法を学ぶと素晴らしいものになります。

+0

ありがとうございます。私は自分の答えを編集しました。 –

関連する問題