Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1688to1692
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
VBA erweitern: neue leere Zeilen einfügen
23.04.2019 22:25:59
Kisska
Hallo zusammen,
könnt ihr mir helfen, dieses Makro zu erweitern:
  • 
    Sub Anpassen_II()
    Dim Wo   As Integer
    Dim Oft  As Integer
    Wo = 5
    Oft = 2
    With Sheets("Tabelle1")
    Range(Rows(Wo), Rows(Wo + Oft - 1)).Insert shift:=xlDown
    End With
    End Sub
    

  • Quelle: http://www.office-loesung.de/ftopic417740_0_0_asc.php
    Ich hätte gerne für "Oft" eine Abfrage, damit ich die 2 oder eine beliebig andere Zahl eintragen kann.
    VG
    Kisska

    22
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: VBA erweitern: neue leere Zeilen einfügen
    23.04.2019 22:52:51
    Kisska
    Hab's doch hinbekommen:
    Oft = InputBox("Bitte eine Ganzzahl eingeben.", "Eingabe der leeren Zeilen")
    
    Aber wie schränke ich die Eingabe ein, damit nur positive Ganzzahlen eingegeben werden können?
    Und wie verhindere ich Laufzeitfehler 13, wenn ich auf Abbrechen bei der Abfrage drücke?
    VG, Kisska
    AW: VBA erweitern: neue leere Zeilen einfügen
    24.04.2019 05:41:20
    Hajo_Zi
    Oft = InputBox("Bitte eine Ganzzahl eingeben.", "Eingabe der leeren Zeilen",0)
    nur durch ein Prüfung nach Eingabe. Mache Do Loop

    Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
    Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
    Anzeige
    AW: VBA erweitern: neue leere Zeilen einfügen
    24.04.2019 12:49:02
    Dieter
    Hallo Kisska,
    ich habe die Do-Schleife, von der Hajo spricht, mal ausgeführt.
    Wenn du die Benutzereingabe auf wirkliche Korrektheit prüfen willst, dann gibt es da eine Menge an Möglichkeiten. Z.B.
    - Eingabe eines nicht-numerischen Wertes ("xy"),
    - Eingabe eines Wertes - Eingabe eines Wertes, der das Fassungsvermögen einer Long-Variablen übersteigt (4E25).
    Im folgenden Programm habe ich die genannten 3 Bedingungen geprüft:
    Sub Anpassen_II()
    Dim dblOft As Double
    Dim lngOft As Long
    Dim strOft As String
    Const titel As String = "Eingabe der leeren Zeilen"
    Dim Wo As Long
    Wo = 5
    strOft = "2"
    Do
    strOft = InputBox(Prompt:="Bitte eine Ganzzahl eingeben.", _
    Title:=titel, _
    Default:=strOft)
    If strOft = "" Then
    MsgBox Prompt:="Benutzerabbruch", _
    Title:=titel
    Exit Sub
    End If
    If Not IsNumeric(strOft) Then
    ' Wert ist nicht numerisch
    MsgBox Prompt:="Der eingegebene Wert: '" & _
    strOft & "' ist nicht numerisch", _
    Title:=titel
    Else
    ' Wert ist numerisch
    ' Konvertierung in eine Double-Variable
    dblOft = CDbl(strOft)
    ' Prüfung, ob der eingegebene Wert im Größen-
    ' bereich einer Long-Variable liegt
    If dblOft  2147483647 Then
    ' Wert ist nicht in Long konvertierbar
    MsgBox Prompt:="Der eingegebene Wert: '" & _
    strOft & "'" & vbNewLine & _
    "übersteigt das Fassungs" _
    & "vermögen einer Long-Variablen", _
    Title:=titel
    Else
    ' Wert ist in Long konvertierbar
    lngOft = CLng(dblOft)
    If lngOft 
    Noch offen ist die Prüfung, ob durch den eingegebenen Wert in Kombination mit "Wo" und dem vorhandenen Inhalt des Blattes die Anzahl der möglichen Zeilen überschritten wird.
    Viele Grüße
    Dieter
    Anzeige
    Laufzeitfehler 1004 & meine Variante
    24.04.2019 14:00:24
    Kisska
    Hallo Dieter,
    danke für das Makro! (Auch danke an Hajo für die Hilfestellung)
    Ich hab's getestet, aber dann kommt der Laufzeitfehler 1004.
    Mit meinen wenigen VBA-Kenntnissen blicke ich leider nicht durch, woran es liegen könnte.
    Ich habe in der Zwischenzeit meinen Code wie folgt angepasst:
    
    Sub LeerZeilen()
    Dim Wo   As Integer
    Dim Oft  As Integer
    Wo = 5
    Oft = Application.InputBox("Bitte eine positive Ganzzahl eingeben:", "Eingabe der leeren  _
    Zeilen", Type:=1)
    If Oft = False Then Exit Sub               'Verhindert den Laufzeitfehler 13 beim  _
    Abbrechen
    If Oft 
    Mein Code funktioniert fast wie gewollt:
    - Eingabe von Text => Fehler von Excel "Zahl ist ungültig", InputBox bleibt für neue Eingabe
    - Abbrechen der Eingabe => Laufzeitfehler 1004 wird nicht mehr angezeigt, InputBox verschwindet
    - Eingabe von 0: keine neue Leerzeile wird hinzugefügt, InputBox verschwindet
    - Eingabe Hier hätte ich lieber dass die InputBox bleibt für neue Eingabe
    - Eingabe von Dezimalzahllen wie 0,7 oder 2,6: leider erfolglos mit dem Befehl
    
    If Oft = Not IsNumeric(Oft) Then Exit Sub
    
    => Ich bekomme trotzdem Leerzeilen nach der Eingabe. Hier hätte ich auch gerne, dass die InputBox bleibt für neue Eingabe
    Könnt ihr mir bei den letzten beiden Bedingungen helfen?
    VG, Kisska
    Anzeige
    AW: Laufzeitfehler 1004 & meine Variante
    24.04.2019 14:35:03
    Dieter
    Hallo Kisska,
    an welcher Stelle tritt denn der Laufzeitfehler auf und wie ist deine Eingabe dazu gewesen?
    Am besten ist es, wenn du deine Arbeitsmappe hochlädst. (Daten können praktisch komplett gelöscht sein.)
    Bei der Übernahme eines Programms spielen auch kleine Abweichungen eine Rolle.
    Viele Grüße
    Dieter
    AW: Laufzeitfehler 1004 & meine Variante
    24.04.2019 14:47:38
    Kisska
    Hallo Dieter,
    der Fehler kommt durch die Eingabe > 0 oder bei Dezimalzahlen wie 0,7.
    Nach dem Debuggen wird diese Zeile markiert:
         .Range(Rows(Wo), Rows(Wo + lngOft - 1)).Insert
    
    Meine Daten sind sehr einfach, daher ich der Upload nicht unbedingt notwendig.
    Datenbereich: A1: B5
    ..Zeile 1: Überschriften
    ..A2 bis A4: Test1, Test2, Test3
    ..B2 bis B4: Prozente
    ..A5: Summe
    ..B5: leer
    VG, Kisska
    Anzeige
    Fehler behoben
    24.04.2019 14:52:29
    Kisska
    Hallo Dieter,
    ich habe in der o.g. Zeile lngOft durch strOft ersetzt und nun ist der Fehler weg :-)
    Aber die Dezimalzahlen werden leider trotzdem nicht verhindert. Diese werden gerundet und dann werden Leerzeilen hinzugefügt. Warum?
    VG, Kisska
    AW: Fehler behoben
    24.04.2019 16:10:16
    Dieter
    Hallo Kisska,
    das kann keine wirkliche Fehlerbehebung sein. Aber ohne das Programm zu kennen, mit dem du arbeitest, kann ich dazu nichts sagen.
    Ich habe jetzt mein Programm um die Prüfung ergänzt, ob das Tabellenblatt von der Zeilenzahl her die Einfügung überhaupt verkraftet. Außerdem wird verhindert, dass Nachkommastellen eingegeben werden. Das Programm sieht dann so aus:
    Sub Anpassen_II()
    Dim dblOft As Double
    Dim letzteZeile As Long
    Dim lngOft As Long
    Dim strOft As String
    Const titel As String = "Eingabe der leeren Zeilen"
    Dim Wo As Long
    Dim ws As Worksheet
    Wo = 5
    strOft = "2"
    Set ws = ThisWorkbook.Worksheets("Tabelle1")
    letzteZeile = ws.Cells.SpecialCells(xlLastCell).Row
    Do
    strOft = InputBox(Prompt:="Bitte eine Ganzzahl eingeben.", _
    Title:=titel, _
    Default:=strOft)
    If strOft = "" Then
    MsgBox Prompt:="Benutzerabbruch", _
    Title:=titel
    Exit Sub
    End If
    If Not IsNumeric(strOft) Then
    ' Wert ist nicht numerisch
    MsgBox Prompt:="Der eingegebene Wert: '" & _
    strOft & "' ist nicht numerisch", _
    Title:=titel
    Else
    ' Wert ist numerisch
    ' Konvertierung in eine Double-Variable
    dblOft = CDbl(strOft)
    If dblOft  dblOft Then
    MsgBox Prompt:="Der eingegebene Wert: '" & _
    strOft & "'" & vbNewLine & _
    "umfasst Nachkommastellen", _
    Title:=titel
    Else
    If letzteZeile + dblOft > ws.Rows.Count Then
    MsgBox Prompt:="Der eingegebene Wert: '" & _
    strOft & "'" & vbNewLine & _
    "sprengt das Zeilengefüge!", _
    Title:=titel
    Else
    ' Der eingegebene Wert ist OK und
    ' wird in Long konvertiert
    lngOft = CLng(dblOft)
    Exit Do
    End If
    End If
    End If
    End If
    Loop
    ' Zeileneinfügung
    ws.Range(ws.Rows(Wo), ws.Rows(Wo + lngOft - 1)).Insert
    End Sub
    
    Zusätzlich lade ich meine Arbeitsmappe mit dem Programm hoch. Mach deine Tests bitte erstmal mit dieser Arbeitsmappe.
    https://www.herber.de/bbs/user/129367.xlsm
    Viele Grüße
    Dieter
    Anzeige
    kleine Ergänzung
    24.04.2019 19:55:59
    Kisska
    Hallo Dieter,
    danke für die Erweiterung! In deiner Beispieldatei klappt alles.
    Wenn ich deinen Code aber in PERSONAL.XLSB speichere, dann werden komischerweise keine leeren Zeilen hinzugefügt, wenn ich einen numerischen Wert eingebe. Weiß du, woran es liegen könnte?
    Könntest du mir noch bei folgenden Punkten helfen:
    - keine zulässige Eingabe von Dezimalwerten mit Punkt (nicht nur Komma) = Bsp: 0,7 oder 0.7
    - keine zulässige Eingabe, wenn bspw.: 2, oder 2. bzw. keine Eingabe von Sonderzeichen egal an welcher Stelle
    Kurze Frage zu:
    Else
    If letzteZeile + dblOft > ws.Rows.Count Then
    MsgBox Prompt:="Der eingegebene Wert: '" & _
    strOft & "'" & vbNewLine & _
    "sprengt das Zeilengefüge!", _
    Title:=titel
    

    Wenn ich nicht vorhabe, mehr als 100 Leerzeilen hinzuzufügen, kann ich auf diesen Part verzichten?
    Wenn ja, könntest du mir helfen, den Code zu kürzen. Ich bin mir unsicher, welcher der oben definierter Variablen ich entfernen darf (ich vermute, dass ich u.a. Dim dblOft As Double nicht mehr benötige)
    VG, Kisska
    Anzeige
    AW: kleine Ergänzung
    24.04.2019 20:07:13
    Kisska
    Dieter, ich habe diese Seite hier gefunden (Code weiter unten auf der Seite):
    http://www.excel-ist-sexy.de/nur-zahlen-zulassen/
    Da werden die Sonderzeichen abgefangen und der Code sieht kurz aus.
    Kann man dies in deinem Code einbauen?
    AW: kleine Ergänzung
    24.04.2019 23:02:43
    Dieter
    Hallo Kisska,
    wenn du das Programm aus der PERSONAL.XLSB startest, dann musst du das Wort "ThisWorkbook" durch "ActiveWorkbook" ersetzen. ThisWorkbook ist immer diejenige Arbeitsmappe, in der das Programm steht und das wäre in deinem Fall PERSONAL.XLSB.
    Du kannst die Eingabe komplett auf Ziffern beschränken, das geht aber mit der InputBox nicht so elegant, wie mit der UserForm aus deinem Internetbeispiel.
    Bei Beschränkung auf Ziffern können 2 Prüfungen entfallen (da die InputBox nur 254 Eingabestellen erlaubt, kann man mit Ziffern nicht das Maximum einer Double-Variablen 1,797E308 überschreiten).
    Wenn du davon ausgehen kannst, dass kein Scherzbold z.B. die Zahl 3.000.000 eingibt, dann kannst du auf die Prüfung mit der Gesamtzeilenzahl verzichten, falls deine Arbeitsmappe nicht weit bis unten gefüllt ist. Aber die Prüfung tut doch nicht weh. Bei der InputBox ist der langsame Teil der eingebende Mensch.
    Das geänderte Programm sieht jetzt so aus:
    Sub Anpassen_II()
    Dim dblOft As Double
    Dim letzteZeile As Long
    Dim lngOft As Long
    Dim strOft As String
    Const titel As String = "Eingabe der leeren Zeilen"
    Dim Wo As Long
    Dim ws As Worksheet
    Wo = 5
    strOft = "2"
    Set ws = ActiveWorkbook.Worksheets("Tabelle1")
    letzteZeile = ws.Cells.SpecialCells(xlLastCell).Row
    Do
    strOft = InputBox(Prompt:="Bitte eine Ganzzahl eingeben.", _
    Title:=titel, _
    Default:=strOft)
    If strOft = "" Then
    MsgBox Prompt:="Benutzerabbruch", _
    Title:=titel
    Exit Sub
    End If
    If Not EnthältNurZiffern(strOft) Then
    MsgBox Prompt:="Der eingegebene Wert: '" & _
    strOft & "' enthält nicht nur Ziffern", _
    Title:=titel
    Else
    ' Wert enthält nur Ziffern und kann max. 254 Stellen haben,
    ' daher kann in eine Double-Variable konvertiert werden.
    dblOft = CDbl(strOft)
    If dblOft = 0 Then
    MsgBox Prompt:="Der eingegebene Wert: '" & _
    strOft & "'" & vbNewLine & _
    "ist = 0", _
    Title:=titel
    Else
    If letzteZeile + dblOft > ws.Rows.Count Then
    MsgBox Prompt:="Der eingegebene Wert: '" & _
    strOft & "'" & vbNewLine & _
    "sprengt das Zeilengefüge!", _
    Title:=titel
    Else
    ' Der eingegebene Wert ist OK und
    ' wird in Long konvertiert
    lngOft = CLng(dblOft)
    Exit Do
    End If
    End If
    End If
    Loop
    ' Zeileneinfügung
    ws.Range(ws.Rows(Wo), ws.Rows(Wo + lngOft - 1)).Insert
    End Sub
    Function EnthältNurZiffern(Text) As Boolean
    Dim i As Long
    Dim j As Long
    Dim zifferOK As Boolean
    EnthältNurZiffern = True
    For i = 1 To Len(Text)
    zifferOK = False
    For j = 0 To 9
    If Mid$(Text, i, 1) = CStr(j) Then
    zifferOK = True
    Exit For
    End If
    Next j
    If Not zifferOK Then
    EnthältNurZiffern = False
    Exit Function
    End If
    Next i
    End Function
    
    Viele Grüße
    Dieter
    Anzeige
    perfekt!
    24.04.2019 23:21:47
    Kisska
    Juhu, genau so wollte ich es haben!
    Besten Dank Dieter für deine Arbeit / Zeit und Erklärung!
    VG, Kisska
    Rückfrage
    25.04.2019 01:33:08
    Kisska
    Dieter, ich habe eine kurze Rückfrage.
    Ich habe deinen Code ein wenig reduziert, erhalte aber dadurch den Laufzeitfehler 13 "Typen unverträglich", wenn die Bedingung "If Oft = 0" aktiviert ist und ich Sonderzeichen ohne Zahl eingebe (bspw: "," oder "-"). Bei der Kombi Zahl + Sonderzeichen gibt es keinen Laufzeitfehler.
    Auch habe ich keinen Laufzeitfehler bei Eingabe von Sonderzeichen ohne Zahl, wenn ich die Bedingung "If Oft = 0" deaktiviere.
    Könntest du mir auf die Sprünge helfen, was ich falsch mache bzw. warum die Bedingung "If Oft = 0" Einfluss auf die Bedingung "EnthältNurZiffern" hat?
    Hier der Code:
    
    Sub Neue_Zeilen()
    Dim Wo   As Integer
    Dim Oft  As String
    Wo = 5
    Wiederholung:
    Oft = InputBox(Prompt:="Bitte eine Ganzzahl > 0 eingeben.", Title:="Eingabe", Default:=Oft)
    If Oft = "" Then End 'wenn Eingabe-Abbruch, dann Abfrage-Fenster schließen
    If Oft = 0 Then End 'wenn Eingabe = 0, dann Abfrage-Fenster schließen
    If Not EnthältNurZiffern(Oft) Then
    MsgBox Prompt:="Der eingegebene Wert: '" & Oft & "' enthält nicht nur Ziffern",  _
    Title:="Ungültige Eingabe"
    GoTo Wiederholung
    End If
    ' Zeileneinfügung
    With ActiveWorkbook.ActiveSheet
    Range(Rows(Wo), Rows(Wo + Oft - 1)).Insert shift:=xlDown
    End With
    End Sub
    Function EnthältNurZiffern(Text) As Boolean
    Dim i As Long
    Dim j As Long
    Dim zifferOK As Boolean
    EnthältNurZiffern = True
    For i = 1 To Len(Text)
    zifferOK = False
    For j = 0 To 9
    If Mid$(Text, i, 1) = CStr(j) Then
    zifferOK = True
    Exit For
    End If
    Next j
    If Not zifferOK Then
    EnthältNurZiffern = False
    Exit Function
    End If
    Next i
    End Function
    
    VG, Kisska
    Anzeige
    AW: Rückfrage
    25.04.2019 19:02:13
    Dieter
    Hallo Kisska,
    der Laufzeitfehler 13 tritt auch auf, wenn du "xy" oder "123§" eingibst.
    Du vergleichst in dem Statement "If Oft = 0 …" einen String-Wert (Oft) mit einem Long-Wert (0). Dieser Vergleich funktioniert, wenn der String-Wert in einen Long-Wert konvertierbar ist. Dann macht VBA nämlich stillschweigend diese Konversion und führt anschließend den Vergleich durch. Der Laufzeitfehler tritt auf, wenn die Konversion nicht möglich ist, z.B. bei den o.g. Eingabewerten.
    Der Fehler würde an der Stelle nicht auftreten, wenn du das Statement so schreibst: "If Oft = "0" Then…", dann stehen auf beiden Seiten String-Werte und es wird vor dem Vergleich keine Konversion gemacht.
    Allerdings tritt jetzt ein Problem auf, wenn der Benutzer z.B. "00" oder "000" oder usw. eingibt, dann werden hinter Zeile 3 zwei neue Zeilen eingefügt.
    Noch drei Bemerkungen zum Programm.
    1. GoTo verwendet man eigentlich nur noch bei der Laufzeitfehlerbehandlung, ansonsten ist es so gut wie verboten. Du kannst es sehr einfach durch Do-Loop ersetzen, vgl. den Programmcode unten.
    2. Bei der With-Anweisung werden Adressen bestimmt, die dann an eventuell mehreren Stellen verwendet werden. Diese Stellen sind alle dadurch kenntlich, dass sie einen Punkt haben, vor dem kein Ausdruck steht. Bei dir heißt das, dass du anstelle von
    Range(Rows(Wo), Rows(Wo + Oft - 1)).Insert
    schreibst
    .Range(.Rows(Wo), .Rows(Wo + Oft - 1)).Insert
    Da du dich aber auf das aktive Blatt beziehst, kannst du die With-Anweisung auch weglassen und nur
    Range(Rows(Wo), Rows(Wo + Oft - 1)).Insert
    schreiben (den Parameter Shift kannst du weglassen, wenn du komplette Zeilen einfügst).
    3. Es ist für dem Anwender verwirrend, wenn er bei Eingabe einer 0 keine Rückmeldung und keine zweite Eingabechance erhält. Über die Rückmeldung im Abbruchfall kann man diskutieren, ich würde sie jedenfalls geben.
    Sub Neue_Zeilen()
    Dim Wo   As Integer
    Dim Oft  As String
    Wo = 5
    Oft = "2"
    Do
    Oft = InputBox(Prompt:="Bitte eine Ganzzahl > 0 eingeben.", Title:="Eingabe", Default:=Oft)
    If Oft = "" Then Exit Sub 'Eingabe-Abbruch
    If EnthältNurZiffern(Oft) Then
    If CDbl(Oft) = 0 Then Exit Sub ' Eingabe 0
    Exit Do
    Else
    MsgBox Prompt:="Der eingegebene Wert: '" & Oft & "' enthält nicht nur Ziffern", _
    Title:="Ungültige Eingabe"
    End If
    Loop
    ' Zeileneinfügung
    With ActiveSheet
    .Range(.Rows(Wo), .Rows(Wo + Oft - 1)).Insert
    End With
    End Sub
    
    Viele Grüße
    Dieter
    Anzeige
    AW: Rückfrage
    26.04.2019 22:53:47
    Kisska
    Hallo Dieter,
    herzlichen Dank für deine ausführliche und sehr verständliche Erklärung.
    Mit deinen Hinweisen ist der Code nun perfekt - danke :-)
    Es werden zwar Leerzeilen durch solche Eingaben wir 02 oder 002 eingefügt, aber das würden wahrscheinlich die wenigsten machen, daher kann man damit leben.
    Du hast mich überzeugt, ich werde bei der Eingabe = 0 eine erneute Eingabe ermöglichen.
    Ich kenne mich leider mit VBA und insbesondere Do-Loop nicht aus und weiß nicht recht, was in meinen Zeilen fehlt:
    
    Do
    Oft = InputBox(Prompt:="Bitte eine Ganzzahl > 0 eingeben.", Title:="Eingabe", Default:=Oft)
    If Oft = "" Then Exit Sub 'Eingabe-Abbruch
    If EnthältNurZiffern(Oft) Then
    If CDbl(Oft) = 0 Then
    MsgBox Prompt:="Der eingegebene Wert: '" & Oft & "'" & vbNewLine & "ist = 0", Title:=" _
    Hinweis"
    Else
    MsgBox Prompt:="Der eingegebene Wert: '" & Oft & "' enthält nicht nur Ziffern", Title:=" _
    Ungültige Eingabe"
    End If
    Loop
    
    Als Fehler erscheint: "Loop ohne Do". Aber Do steht doch bereits oben?
    VG, Kisska
    AW: Rückfrage
    26.04.2019 23:48:43
    Werner
    Hallo Kiska,
    da fehlt ein End If:
    Do
    Oft = InputBox(Prompt:="Bitte eine Ganzzahl > 0 eingeben.", Title:="Eingabe", Default:=Oft)
    If Oft = "" Then Exit Sub 'Eingabe-Abbruch
    If EnthältNurZiffern(Oft) Then
    If CDbl(Oft) = 0 Then
    MsgBox Prompt:="Der eingegebene Wert: '" & Oft & "'" & vbNewLine & "ist = 0", _
    Title:="Hinweis"
    Else
    MsgBox Prompt:="Der eingegebene Wert: '" & Oft & "' enthält nicht nur Ziffern", _
    Title:="Ungültige Eingabe"
    End If
    End If
    Loop
    
    Gruß Werner
    AW: Rückfrage
    27.04.2019 00:29:57
    Kisska
    Danke für den Hinweis, Werner!
    Aber irgendwie funktioniert mein Gesamt-Code trotzdem nicht richtig.
    Bei der gültigen Eingabe (z.B. 2) kommt die Meldung "Wert enthält nicht nur Zahlen" und umgekehrt bei Eingabe von Text kommt die Meldung "Ganzzahl >0 eingeben".
    Verstehe nicht, warum die Meldungen jetzt umgekehrt erscheinen, nur weil ich das Makro bei
     _
    If CDbl(Oft) = 0
    
    nicht mehr beende, sondern eine weitere Eingabe zulasse.
    Es ist fast schon beschämend, dass ich so viel nachfrage und wahrscheinlich auf einfache Dinge nicht selbst drauf komme, aber ich verstehe einfach nichts von VBA. Bitte verzeiht meine Unfähigkeit ..
    VG, Kisska
    AW: Rückfrage
    27.04.2019 11:40:54
    Werner
    Hallo Kiska,
    ohne deine Function "EnthältNurZiffern"
    Public Sub Test()
    Dim Oft As Variant
    Do
    Oft = InputBox("Bitte Ganzzahl größer 0 eingeben:", "Anzahl")
    If Not Oft = vbNullString Then
    If IsNumeric(Oft) Then
    If Oft  0 Then
    MsgBox "Wert ist keine Ganzzahl"
    ElseIf InStr(Oft, ".") > 0 Then
    MsgBox "Wert ist keine Ganzzahl"
    Else
    MsgBox "Hier weiterer Code weil Eingabe richtit."
    Exit Do
    End If
    Else
    MsgBox "Eingabe ist keine gültige Zahl."
    End If
    Else
    Exit Do
    End If
    Loop
    End Sub
    
    Gruß Werner
    perfekt! :)
    27.04.2019 12:27:35
    Kisska
    Wow, Werner, der Code ist so kurz und macht all die Bedingungen, die ich mir gewünscht habe. Ein Traum! Besten Dank!
    VG, Kisska
    Gerne u. Danke für die Rückmeldung. o.w.T.
    27.04.2019 12:45:57
    Werner
    AW: Gerne u. Danke für die Rückmeldung. o.w.T.
    28.04.2019 18:18:30
    Dieter
    Hallo Werner,
    das ist tatsächlich eine elegante Lösung.
    Ich bin bisher immer davon ausgegangen, den Datentyp Variant möglichst zu vermeiden.
    In deinem Beispiel sieht man, dass er an passender Stelle doch sehr gut einzusetzen ist.
    Viele Grüße
    Dieter
    Danke für die Blumen...
    28.04.2019 22:58:34
    Werner
    Hallo Dieter,
    ....gerade in den Fällen, in denen du vorher schon weißt, dass verschiedene Variablentypen zu verarbeiten sind ist das durchaus sinnvoll.
    Gruß Werner

    355 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige