Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1844to1848
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Typen unverträglich: Inputbox

Typen unverträglich: Inputbox
07.09.2021 07:45:35
Martin
Guten Morgen,
ich bin etwas erstaunt, da ich es an meinem Rechner getestet habe und nun auf einem anderen Rechner die Meldung kommt dass die Typen unverträglich sind.....
Konkret macht es bei einer leeren Eingabe und Abbrechen Probleme.
Weiß jemand Rat? Und vor allem was habe ich falsch gemacht und unsauber programmiert?
Herzlichen Dank fürs Anschauen =)
Grüße Martin
Dim KW As String
KW = Application.InputBox(prompt:="Bitte die Kalenderwoche eingeben:", Title:="Kalenderwoche")
If KW = "" Or KW > 53 Then
'aktuelle Woche als Zielwoche nehmen
KW = Worksheets("Tagesprogramm").Cells(1, 10).Value
ElseIf KW = False Then
'Bricht Vorgang ab
Exit Sub
ElseIf KW 'MsgBox "Abziehen"
KW = Worksheets("Tagesprogramm").Cells(1, 10).Value + KW
Else
KW = KW
End If
Worksheets("Statistik").Cells(10, 2).Value = KW
Sheets("Statistik").Select 'zum Statistikblatt springen

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Typen unverträglich: Inputbox
07.09.2021 08:17:08
GerdL
Moin Martin,
nutze das Type-Argument. Und mache den Ausstieg zuerst.

Sub Unit()
Dim KW As Variant
KW = Application.InputBox(prompt:="Bitte die Kalenderwoche eingeben:", Title:="Kalenderwoche", Type:=1)
If KW = False Then Exit Sub    'Bricht Vorgang ab
KW = Int(KW)
If IsNumeric(Worksheets("Tagesprogramm").Cells(1, 10).Value) Then
If KW = KW > 53 Then
'aktuelle Woche als Zielwoche nehmen
KW = Worksheets("Tagesprogramm").Cells(1, 10).Value
ElseIf KW 
Gruß Gerd
AW: Typen unverträglich: Inputbox
07.09.2021 08:54:09
volti
Hallo Martin,
hier eine Zusatzinfo:
Der Variablentyp STRING, den Du verwendest hast, kann nur Text, kein Boolean (False) oder Zahlenvergleiche.
Als Alternative zur Verwendung der KW-Variablen als VARIANT (GerdL's Vorschlag) kannst Du bei Verwendung von STRING auch folgenden Ausstieg verwenden:
Zahlenvergleiche dann mit IF Val(KW) > 53 Then.....
Code:

[Cc]

Sub Test() Dim KW As String KW = InputBox(prompt:="Bitte die Kalenderwoche eingeben:", Title:="Kalenderwoche") If StrPtr(KW) = 0 Then Exit Sub '..... End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Typen unverträglich: Inputbox
07.09.2021 10:10:19
Martin
Danke schön euch allen!!!
p.s. was hat es bei der anderen Lösung mit "Type:=1" auf sich?
Hallo Karl-Heinz,
danke =) habe zuerst die Variant Lösung probiert und deine danach.
Deine hat dabei deutlich besser funktioniert (Leereingabe gab beim anderen einen Fehler), interessant dass ein Vergleich mit Val() doch möglich ist.
Und auch dass auf meinem deutschen Rechner mit Office 2010 mein alter Code ging?!
Einzig wenn ich Abbruch drücke trägt es FALSCH in das Feld ein, statt das Exit Sub auszuführen;
was ich in google herausfinden konnte, dass es so eigentlich mit StrPtr gehen hätte müssen?
Danke nochmal an alle =)
Dim KW As String
KW = Application.InputBox(prompt:="Bitte die Kalenderwoche eingeben:", Title:="Kalenderwoche")
If StrPtr(KW) = 0 Then
Exit Sub
End If
If KW = "" Or Val(KW) > 53 Then
'MsgBox "aktuelle Woche als Zielwoche"
KW = Worksheets("Tagesprogramm").Cells(1, 10).Value
ElseIf Val(KW) 'MsgBox "Abziehen"
KW = Worksheets("Tagesprogramm").Cells(1, 10).Value + KW
Else
'KW = KW
End If
Worksheets("Statistik").Cells(10, 2).Value = KW
Sheets("Statistik").Select 'zum Statistikblatt springen
Anzeige
AW: Typen unverträglich: Inputbox
07.09.2021 10:17:07
Werner
Hallo,
p.s. was hat es bei der anderen Lösung mit "Type:=1" auf sich?
Hast du es damit denn mal ausprobiert? Wohl eher nicht. Mit Type:=1 kannst du nur Zahlen in die Inputbox eingeben.
Gruß Werner
AW: Typen unverträglich: Inputbox
07.09.2021 10:35:58
Martin
Hallo Werner,
danke schön für die Erklärung.
Doch habe ich ausprobiert, aber an Type nicht rumgespielt *lach*
Erklärt nun auch, wo die Fehlermeldung mit der Formel herkommt und definiert wurde.
Ich habe nun noch die Funktion Val() angeschaut und gehofft dass eine Zeichenkette ohne Zahl dann "" ausgibt, um eben die Eingabe von Text oder auch das Abbrechen "falsch" abzufangen und die aktuelle Kalenderwoche zu nehmen.
Leider klappt das so nicht....
Gibt es nicht eine Funktion, um zu schauen ob der String KW ein String aus Text ist?
Danke =)
Anzeige
AW: Typen unverträglich: Inputbox
07.09.2021 10:46:55
Daniel
Hi
wenn du ELSE-If mit mehreren Abfragen hast und die Bedingungen nicht eindeutig sind, spielt die Reihenfolge der Abfragen eine Rolle, da immer nur der erste zutreffende Abschitt ausgeführt wird, alles was danach folgt wird nicht mehr angeschaut (auch wenn es vielleicht zutreffen könnte)
so gilt, dass VAL("irgendein Text") immer 0 ergibt
ebenso ist jeder Text immer größer als jede Zahl.
ich würde hier, wenn du mit String arbeitest, die Abfrage, ob ein Abbruch vorliegt, an den Anfang stellen:

IF KW = "Falsch" Or KW = "False" Then 'um deutsch oder englisch abzudecken, wenn andere Sprachen möglich sind, müssten diese berücksichtigt werden
wobei ich den Typ Variant für KW bevorzugen würde.
Dann kannst du über den Datentyp eindeutig feststellen, ob abgebrochen wurde oder ob OK gedrückt wurde.
Gruß Daniel
Anzeige
AW: Typen unverträglich: Inputbox
07.09.2021 11:44:34
Oberschlumpf
Hi,
schau dir mal die Funktion IsNumeric() an.
Ciao
Thorsten
AW: Typen unverträglich: Inputbox
07.09.2021 09:38:24
Daniel
HI
wenn du KW als String deklarierst, musst du das auch konsequent durchziehen.
dh alle Vergleiche und Operationen, musst du auch mit Strings machen.
allerdings wirds damit schwierig.
ich würde das so machen und mir nur Zahlen eingeben lassen.
Als Datentyp trotzdem Variant wählen, dann kann man über den Datentyp (Boolean) feststellen, ob die Eingabe abgebrochen wurde.
Eingabe von Text wird automatisch verhindert, dh die Abfrage wird wiederholt, wenn jemand Text eingibt oder die Eingabe leer lässt.

Sub test()
Dim KW As Variant
KW = Application.InputBox(prompt:="Bitte die Kalenderwoche eingeben:" & vbLf & "(0 = aktuelle KW)", _
Title:="Kalenderwoche", Type:=1)
If VarType(KW) = vbBoolean Then
'Abbruch
Exit Sub
ElseIf KW = 0 Or KW > 53 Then
'aktuelle Woche als Zielwoche nehmen
KW = Worksheets("Tagesprogramm").Cells(1, 10).Value
ElseIf KW 
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige