I'm trying to make an easy to use module for editing the registry. I want to be able to save settings of any data type with one command. Here is what I've got so far, but I keep getting a type mismatch error on the CByte statement. If I comment out that line, the other two data types work fine. What am i doing wrong?

Code:
Public Enum ValueType
    RegString
    RegDWORD
    RegBinary
End Enum

Private Const REG_SZ = 1 'Unicode nul terminated string
Private Const REG_BINARY = 3 'Free form binary
Private Const REG_DWORD = 4 '32-bit number

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hkey As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hkey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hkey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long

Public Sub SaveRegSetting(ByVal hkey As Long, ByVal strPath As String, ByVal strValue As String, ByVal varData As Variant, ByVal valDataType As ValueType)
    Select Case valDataType
        Case RegString
            SaveSettingString hkey, strPath, strValue, CStr(varData)
        Case RegDWORD
            SaveSettingLong hkey, strPath, strValue, CLng(varData)
        Case RegBinary
            SaveSettingByte hkey, strPath, strValue, CByte(varData)
    End Select
End Sub

Private Sub SaveSettingString(hkey As Long, strPath As String, strValue As String, strData As String)
    Dim hCurKey As Long
    Dim lRegResult As Long

    lRegResult = RegCreateKey(hkey, strPath, hCurKey)
    lRegResult = RegSetValueEx(hCurKey, strValue, 0, REG_SZ, ByVal strData, Len(strData))
    lRegResult = RegCloseKey(hCurKey)
End Sub

Private Sub SaveSettingLong(ByVal hkey As Long, ByVal strPath As String, ByVal strValue As String, ByVal lData As Long)
    Dim hCurKey As Long
    Dim lRegResult As Long

    lRegResult = RegCreateKey(hkey, strPath, hCurKey)
    lRegResult = RegSetValueEx(hCurKey, strValue, 0&, REG_DWORD, lData, 4)
    lRegResult = RegCloseKey(hCurKey)
End Sub

Private Sub SaveSettingByte(ByVal hkey As Long, ByVal strPath As String, ByVal strValueName As String, ByData() As Byte)
    Dim lRegResult As Long
    Dim hCurKey As Long

    lRegResult = RegCreateKey(hkey, strPath, hCurKey)
    lRegResult = RegSetValueEx(hCurKey, strValueName, 0&, REG_BINARY, ByData(0), UBound(ByData()) + 1)
    lRegResult = RegCloseKey(hCurKey)
End Sub