Anzeige
Archiv - Navigation
1704to1708
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

Kontrolle der EIngabe in eine InputBox

Kontrolle der EIngabe in eine InputBox
29.07.2019 14:32:55
Donna
Hallo allerseits!
Ich habe mal wieder ein Problem mit meiner Prozedur, weil mir immer neue Dinge einfallen, die man noch hinzufügen könnte.
Meine Prozedur erschafft aus einer Zeile einer Tabelle per Klick auf einen Button ein neues Tabellenblatt in einer anderen Datei. Es gibt dem neuen Tabellenblatt (dieses entsteht durch Kopieren einer Vorlage) einen neuen Namen. Bevor das neue Tabellenblatt eingefügt wird, überprüft die Prozedur ob es den zukünftigen Blattnamen schon gibt. Falls der Name schon vorhanden ist, öffnet sich eine InputBox und die Prozedur sagt: Hey diesen Namen gibt es schon, bitte trage einen neuen ein. Im Eingabefeld steht bereits der Name, der in der Datei schon vorgekommen ist. Dies soll die Eingabe erleichtern, in dem man z. B. nur noch eine Zahl oder ein anderes Unterscheidungsmerkmal dahinter schreiben muss. Also z. B. gibt es den Namen Mustermann GmbH schon. Die InputBox erscheint und im Eingabefeld steht schon Mustermann GmbH, so dass der Benutzer nur noch ein Unterscheidungsmerkmal dahinter eintragen und mit OK bestätigen muss.
Mein Problem besteht jetzt darin, dass wieder ein bereits vorhandener Name eintragen werden könnte in die InputBox. Bis jetzt bricht dann immer die Prozedur ab und man muss alles händisch reparieren.
Damit so etwas aber nicht mehr passiert und die Prozedur ebenfalls die Eingabe in die Inputbox überprüft, brauche ich eure Hilfe.
Also kurz gesagt möchte ich, dass die Prozedur die Eingabe in die InputBox kontrolliert, sich eine MessageBox öffnet, die einem sagt, dass man sich einen anderen Namen ausdenken soll, und dass man dann wieder in die InputBox einen anderen Namen eintragen kann. Dies soll solange funktionieren, bis ein korrekter Name eintragen wurde.
Hier der problematische Teil meiner Prozedur:
Dim wbNeuanlaufEinkaufsteil As Workbook
Dim wbFormulare As Workbook
Dim wsBasis As Worksheet
Dim wsVorlage As Worksheet
Dim i As Integer
Dim Blatt As Object
Dim Blattname As String
Dim Vorhanden As Boolean
Dim Blattna As String
'Dimensionierung der letzten Zelle der Spalte A
Dim LZa As Long
'Dimensionierung der Spalte A
Dim SpalteA As String
'letzte beschriebene Zelle in der jeweiligen Spalte finden
SpalteA = "A"
LZa = ActiveSheet.Cells(Rows.Count, SpalteA).End(xlUp).Row
Set wbFormulare = Workbooks.Open("Pfadname")
'vor dem Kopieren muss ein Name definiert werden, damit die Prozedur überprüfen kann, ob der Name schon vorhanden ist
'in Blattna wird der Name festgelegt, den das neu kopierte Tabellenblatt haben soll
Blattna = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Basis").Range("A" & LZa)
'jetzt wird überprüft ob der Name schon vorhanden ist
For Each Blatt In Sheets
If Blatt.Name = Blattna Then
Vorhanden = True 'ist Vorhanden true, dann öffnet sich eine InputBox, die nach einem neuen Namen fragt
i = Sheets.Count
Sheets("Vorlage").Copy After:=Sheets(i)
ActiveSheet.Name = InputBox("Der Tabellenname ist bereits vergeben. Bitte tragen Sie hier einen neuen Namen ein:" & vbLf & "Zum Beispiel:" & vbLf & " Lieferant(1)", "Achtung", Workbooks("NeuanlaufEinkaufsteil").Worksheets("Basis").Range("A" & LZa))
'hier hab ich versucht die Kontrolle einzubauen
MsgBox "Bitte geben Sie einen anderen Namen ein.", vbOKOnly, "Name existiert bereits"
End If
Next
If Vorhanden = False Then 'ist vorhanden false, dann setzt die Prozedur den Namen ein ohne weiter nachzufragen
i = Sheets.Count
Sheets("Vorlage").Copy After:=Sheets(i) 'hier wird das Tabellenblatt "Vorlage" kopiert und hinten angehangen
ActiveSheet.Name = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Basis").Range("A" & LZa) 'das ist der Name, wenn der Tabellenname noch nicht vorhanden ist
End If
'hier wird eine Variable definiert, die den Namen des aktiven Blattes trägt
'die Variable ist da, weil der Blattname immer anders ist
Blattname = ActiveSheet.Name

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kontrolle der EIngabe in eine InputBox
29.07.2019 14:49:50
Daniel
Hi
das kannst du mit einer DO-Schleife regeln.
den neuen Blattnamen liest du dabei natürlich zuerst in eine Variable ein.
das ganze lässt du ablaufen, bevor du das Blatt kopierst, damit der Anwender auch die Option "Abbrechen" nutzen kann:
If Blatt.Name = Blattna Then
Vorhanden = True
Do
NeuerName = Inputbox(...)
if NeuerName = "" Then Exit Sub 'Abbruch
For Each Blatt in Sheets
if Blatt.Name = NeuerName then Exit For
Next
if Blatt is Nothing then Exit Do
Msgbox "Name bereits vorhanden, bitte anderen Namen eingeben"
Loop
Sheets("Vorlage").Copy After:=Sheets(i)
ActiveSheet.Name = NeuerName
End If
Gruß Daniel
Anzeige
AW: Kontrolle der EIngabe in eine InputBox
29.07.2019 15:06:23
Donna
Wenn ich das so eingebe, dann kommt die Fehlermeldung "Objektvariable oder with-Blockvariable nicht festgelegt" und die Zeile "If Blatt.Name = Blattna Then" wird markiert
'die Datei "Formulare" und das Tabellenblatt "Vorlage" öffnen
Set wbFormulare = Workbooks.Open("Dateipfad")
'vor dem Kopieren muss ein Name definiert werden, damit die Prozedur überprüfen kann, ob der Name schon vorhanden ist
'in Blattna wird der Name festgelegt, den das neu kopierte Tabellenblatt haben soll
Blattna = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Basis").Range("A" & LZa)
'jetzt wird überprüft ob der Name schon vorhanden ist
If Blatt.Name = Blattna Then
Vorhanden = True 'ist Vorhanden true, dann öffnet sich eine InputBox, die nach einem neuen Namen fragt
Do
NeuerName = InputBox("Der Tabellenname ist bereits vergeben. Bitte tragen Sie hier einen neuen Namen ein:" & vbLf & "Zum Beispiel:" & vbLf & " Lieferant(1)", "Achtung", Workbooks("NeuanlaufEinkaufsteil").Worksheets("Basis").Range("A" & LZa))
If NeuerName = "" Then Exit Sub
For Each Blatt In Sheets
If Blatt.Name = NeuerName Then Exit For
Next
If Blatt Is Nothing Then Exit Do
MsgBox "Bitte geben Sie einen anderen Namen ein.", vbOKOnly, "Name existiert bereits"
Loop
i = Sheets.Count
Sheets("Vorlage").Copy After:=Sheets(i)
ActiveSheet.Name = NeuerName
End If
Next
If Vorhanden = False Then 'ist vorhanden false, dann setzt die Prozedur den Namen ein ohne weiter nachzufragen
i = Sheets.Count
Sheets("Vorlage").Copy After:=Sheets(i) 'hier wird das Tabellenblatt "Vorlage" kopiert und hinten angehangen
ActiveSheet.Name = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Basis").Range("A" & LZa) 'das ist der Name, wenn der Tabellenname noch nicht vorhanden ist
End If
Anzeige
AW: Kontrolle der EIngabe in eine InputBox
29.07.2019 15:40:45
{Boris}
Hi,
das ist doch alles Stückwerk, solange Du nicht mal den gesamten Code (wie von mir im letzten Thread bereits gefordert) preisgibst - und das am Besten mit Deiner (Beispiel-)Datei.
Deine Fragen passen auch nicht ganz zu Deinem angegebenen VBA-Level (gut) - umso sinnvoller wäre es mit der Datei.
VG Boris
AW: Kontrolle der EIngabe in eine InputBox
29.07.2019 16:11:23
Donna
Also erstens habe ich schon beim letzten Mal erwähnt, dass ich keine Dateien hochladen kann (und das liegt nicht an meinem Unvermögen!)
Zweitens würde ich darum bitten nicht mein VBA-Level anzuzweifeln, denn mein letztes Problem habe ich dann alleine gelöst und es hat sehr gut funktioniert, weshalb ich dann auch nicht noch einmal meine Prozedur reingestellt habe.
Drittens verstehe ich immer nicht warum du die ganze Prozedur sehen willst?
Sie funktioniert einwandfrei. Vor dem Umbenennen werden nur ein Haufen Zellen und Spalten dimensioniert, die mit dieser Problemstelle nichts zu tun haben, und nach dem Umbenennen werden nur ein Haufen Daten kopiert, die Datei gespeichert und geschlossen, diese Schritte haben auch nichts mehr mit der Problemstelle zu tun.
Ich finde es schade mich hier so rechtfertigen zu müssen, weil es meiner Problemlösung kein Stück förderlich ist.
Anzeige
Nun denn...
29.07.2019 16:19:09
{Boris}
Hi,
Also erstens habe ich schon beim letzten Mal erwähnt, dass ich keine Dateien hochladen kann (und das liegt nicht an meinem Unvermögen!)
Das habe ich dann vergessen - sorry.
Zweitens würde ich darum bitten nicht mein VBA-Level anzuzweifeln, denn mein letztes Problem habe ich dann alleine gelöst und es hat sehr gut funktioniert, weshalb ich dann auch nicht noch einmal meine Prozedur reingestellt habe.
Na prima!
Drittens verstehe ich immer nicht warum du die ganze Prozedur sehen willst?
Na weil ich aus Deinen Codezeilen lese, dass da noch viel VBA-Stückwerk dabei ist.
Und mit Deiner letzten Nachfrage an Daniel bestätigst Du das.
Das ist keine Kritik - nur meine Einschätzung - und daher meine Nachfrage.
Aber ich werde das nun nicht mehr weiter verfolgen.
Ich lass offen...
VG, Boris
Anzeige
AW: Kontrolle der EIngabe in eine InputBox
29.07.2019 16:12:46
Donna
Ich hab vergessen dazu zu schreiben, dass ich NeuerName als String dimensioniert habe.
AW: Kontrolle der EIngabe in eine InputBox
29.07.2019 16:46:36
peterk
Hallo
Schreib ein kleine Prüffunktion:
Function pruefeName(Name As String) As Boolean
    Dim ws As Worksheet

    pruefeName = False
    For Each ws In Sheets
        If ws.Name = Name Then
            pruefeName = True
            Exit For
        End If
    Next
End Function
Dein Programmzeil könnte dann so aussehen:
    'vor dem Kopieren muss ein Name definiert werden, damit die Prozedur überprüfen kann, ob der Name schon vorhanden ist 
    'in Blattna wird der Name festgelegt, den das neu kopierte Tabellenblatt haben soll 
    Blattna = Workbooks("NeuanlaufEinkaufsteil").Worksheets("Basis").Range("A" & LZa)

    'jetzt wird überprüft ob der Name schon vorhanden ist 
    vorhanden = pruefeName(Blattna)    'ist Vorhanden true, dann öffnet sich eine InputBox, die nach einem neuen Namen fragt 
    If vorhanden Then
        Do
            neuerName = InputBox("Der Tabellenname ist bereits vergeben. Bitte tragen Sie hier einen neuen Namen ein:" & _
                                 vbLf & "Zum Beispiel:" & vbLf & " Lieferant(1)", "Achtung", Workbooks("NeuanlaufEinkaufsteil").Worksheets("Basis").Range("A" & LZa))
            If neuerName = "" Then Exit Sub
            vorhanden = pruefeName(neuerName)
            If vorhanden Then
                MsgBox "Bitte geben Sie einen anderen Namen ein.", vbOKOnly, "Name existiert bereits"
            End If
        Loop Until Not vorhanden
        Blattna = neuerName
    End If
    i = Sheets.Count
    Sheets("Auswertung").Copy After:=Sheets(i)    'hier wird das Tabellenblatt "Vorlage" kopiert und hinten angehangen 
    ActiveSheet.Name = Blattna    'das ist der Name, wenn der Tabellenname noch nicht vorhanden ist 

Anzeige
Perfect
29.07.2019 17:08:16
Donna
Vielen Dank, deine Funktion hat perfekt gepasst!
Ich hab es jetzt nur an einem Beispiel getestet, weil ich jetzt langsam Feierabend machen muss, aber ich bin sehr guter Dinge, dass es weiterhin sehr gut funktionieren wird.
AW: Kontrolle der EIngabe in eine InputBox
29.07.2019 16:17:44
Daniel
Hi
wo ist ja jetzt die Schleife For Each Blatt in Sheets ?
Die brauchst du natürlich weiterhin.
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige