Sodala, habe nun folgenden Code:
Code:
Private Sub txtName_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not IsValidNumber(KeyAscii) Then
KeyAscii = 0
End If
End Sub
Private Function IsValidNumber(ByVal KeyAscii As MSForms.ReturnInteger) As Boolean
IsValidNumber = True
If InStr(1, "0123456789", Chr$(KeyAscii), vbTextCompare) = 0 Then
IsValidNumber = False
End If
End Function
Bei dieser Funktion bringt er beim Ausführen des Makros eben den folgenden Fehler:
Fehler beim Kompilieren:
Projekt oder Bibliothek nicht gefunden
den Asc-Befehl kennt er, auch mit Syntax, den Chr-Befehl kennt er nur als Funktion (also der Befehl "Chr" wird in der Liste angezeigt), die Syntax davon will er mir aber nicht anzeigen!
/edit:
So, habe es jetzt einfach umgangen, da ich mit dem Projekt heute fertig werden muss. Das schaut jetzt folgendermaßen aus:
Code:
Private Function IsValidNumber(ByVal KeyAscii As MSForms.ReturnInteger) As Boolean
IsValidNumber = False
Dim i As Integer
For i = 48 To 57
If KeyAscii = i Then
IsValidNumber = True
End If
Next i
End Function
Habe aber auch noch ein anderes Problem: Common Dialog Control!
Dieses Steuerelement bekommt man ja auch nur übers "comdlg32.ocx". Welche Alternative gibt es, mit der es auf allen Betriebssystemen gut läuft, ohne noch ocx's oder dlls einzubinden?
/edit (2):
So, jetzt habe ich auch da eine gute Alternative gefunden. Und zwar gibt es ja die comdlg32.dll auf jedem Rechner (nur das ocx dazu nicht). Deshalb kann man ja die Funktionen aus der DLL benutzen, bin dann auf folgenden Code gekommen:
Code:
Option Explicit
Type SAVEFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As SAVEFILENAME) As Long
Public Function SaveDlg() As String
Dim SaveDlg As SAVEFILENAME
Dim result As Long
Dim hWnd As Long
Dim Buffer As String
SaveDlg = ""
Buffer = String$(128, 0)
SaveDlg.lpstrTitle = "Speichern..."
SaveDlg.lStructSize = Len(SaveDlg)
SaveDlg.hwndOwner = hWnd
SaveDlg.nFilterIndex = 1
SaveDlg.nMaxFile = Len(Buffer)
SaveDlg.lpstrFile = Buffer
SaveDlg.lpstrFilter = "Excel-Sheet (*.xls)" & vbNullChar & "*.xls"
result = GetSaveFileName(SaveDlg)
If result <> 0 Then
SaveDlg = Left$(SaveDlg.lpstrFile, InStr(SaveDlg.lpstrFile, vbNullChar) - 1) & ".xls"
End If
End Function
Jetzt bin ich vollkommen zufrieden
mfG,
MAN