Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen

fdd

Betrifft: fdd von: d
Geschrieben am: 11.08.2004 14:44:11

Hallo ihr Excel-Freaks! ;)

Ich hab da ein Problem und ich bin mir einfach nicht sicher, wie ich das lösen soll. Vielleicht könnt ihr mit ja auf die Sprünge helfen, wäre supi.

Folgendes Szenario:
In der Spalte A meiner Excel-Tabelle steht Text, also z.B.
A1: franz
A2: hans
A3: karl

So jetzt möchte ich aber den Inhalt meiner Zellen nicht immer von Hand eingeben, sondern hab mir einen Code geschrieben, der das für mich übernimmt. Das heißt also, ich lasse eine InputBox aufkommen, die mich nach dem Inhalt befragt, nach dem Klick auf OK soll das Makro dann in der Lage sein, den eingegebenen Begriff mit den bereits vorhandenen Zellinhalten zu vergleichen und mir dann an der richtigen alphabetischen Stelle eine Zeile einfügen und in dieser dann den Inhalt der InputBox reinschreiben.
Veranschaulicht sieht das dann so aus:

Tabelle:
A1: franz
A2: hans
A3: karl

nach der Eingabe von "gustav" in die InputBox, wird eine Zeile an der richtigen alphabetischen Stelle eingefügt und der Inhalt reingeschrieben, also:

Tabelle:
A1: franz
A2: hans
A3: gustav
A4: karl

Ich hoffe, ihr konntet mein Problem verstehen und wisst eventuell einen Lösungsansatz.
Vielen Dank schonmal an euch.

  


Betrifft: AW: fdd von: PeterW
Geschrieben am: 11.08.2004 14:50:39

Hallo ?? (Realnamen werden hier gerne gesehen),

warum gehst du nicht den umgekehrten Weg? Zeichne dir ein Sortiermakro auf, gib die Namen am Ende der Liste ein und lass dann per Knopfdruck sortieren.

Gruß
Peter


  


Betrifft: AW: fdd von: Michl
Geschrieben am: 11.08.2004 15:00:08

Hallo PeterW!

Danke erstmal für deine Antwort. Ähm ja ich weiß, das des Mist war, hab des auch in meinem anderen Beitrag "Stringvergleich - komplex" reingeschrieben, kannst ja mal reinschaun.

Das sich das alphabetische Sortieren mit der Makro-Aufzeichnen-Funktion realisieren lässt, weiß ich schon.
Das Problem ist aber leider etwas komplexer, als ich es beschrieben habe, ich wollte es nur möglichst einfach beschreiben.
Neben den Zellen A1, A2 etc. stehen weitere Zellen mit Inhalten, ich müsste dann also komplette Datensätze alphabetisch sortieren lassen.
Deshalb möchte ich ja einen Stringvergleich machen und anschließend an der richtigen Stelle einfügen lassen, das ist meines erachtens leichter zu realisieren.


  


Betrifft: Bereich sortieren von: PeterW
Geschrieben am: 11.08.2004 15:05:49

Hallo Michl,

dem kann ich nicht ganz folgen. Soll nicht immer nach einer Spalte als erstes Kriterium sortiert werden?

Gruß
Peter


  


Betrifft: AW: Bereich sortieren von: Claudi
Geschrieben am: 11.08.2004 15:13:08

Die einfachste Möglichkeit ist es doch in diesem Falle sich das ganze mal vom Excel aufzeichnen zu lassen und dann nach seinen Wünschen noch etwas abzuändern.

Ich hatte das Problem auch und habe es wie folgt gelöst.

Fügt immer an die letzte Zeile an, also die erste die wieder frei ist
s = InputBox(Beschreibung,Titel)
Range("A65536").End(xlUp).Offset(1, 0) = s

Sortiert dir dann das gesamte Tabellenblatt nach Spalte A
Tabelle.Activate
Range("A3:IS65535").Select
Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

Gruß Claudi


  


Betrifft: AW: Bereich sortieren von: Michl
Geschrieben am: 11.08.2004 15:35:37

Entschuldige, ich hab mich glaub nicht präzise genung ausgedrückt.

Also angenommen es sieht so aus:

A1: hans B1: hans.doc C1: 16.07.1999
B2: hans_s.ppt C2: fehlt noch
B3: hans_z.ppt C3: existiert

A4: gerhard B4: gerhard.doc C4: 04.06.2001
B5: gerhard_s.ppt C5: existiert
B6: gerhard_z.ppt C6: fehlt noch


So in etwa sieht die Excel-Matrix aus. Wenn ich jetzt eben die Spalten nach der Eingabe einfach sortieren lasse, dann stimmen ja die Daten nicht mehr überein. Deshalb wollte ich, dass die Eingabe der InputBox (z.B. peter) mit den Zellnamen der Spalte A verglichen wird und dann soll das Makro automatisch an der richtigen Stelle drei neue Zeilen einfügen und zwar so, dass die alphabetische Reihenfolge noch eingehalten wird und dort wird dann der Inhalt "peter" in die erste Spalte eingefügt und dann kann ich eben die nebenstehenden dazugehörigen Zellen ausfüllen.

Die Zellen A1, B1, B2, B3, C1, C2, C3 müssen immer so zusammenhängen, wie ich sie oben angegeben habe. Das gleiche gilt für die Zellen A4, B4, B5, B6, C4, C5, C6.

Ich hoffe, du kannst jetzt mein Problem nachvollziehen.


  


Betrifft: AW: Bereich sortieren von: PeterW
Geschrieben am: 11.08.2004 18:28:56

Hallo Michl,

jetzt verstehe, was du möchtest. Schau dir das mal an, ist nicht elegant aber funktioniert.
Sub Michl()
Dim strText As String
Dim lngRow As Long
    strText = InputBox("Name eingeben", "Name?")
    'die Namen beginnen in Zeile 1, ansonsten lngRow anpassen!!
    lngRow = 1
    Do Until Cells(lngRow, 1) > strText Or Cells(lngRow, 1) = ""
        lngRow = lngRow + 3
    Loop
    Rows(lngRow & ":" & lngRow + 2).Insert
    Cells(lngRow, 1) = strText
End Sub

Gruß
Peter


  


Betrifft: AW: Bereich sortieren von: Michl
Geschrieben am: 11.08.2004 20:35:47

Vielen Dank Peter!

Ich werde es gleich Morgen ausprobieren und dir dann selbstverständlich bescheid sagen.

Also bis dahin,
viele Grüße


  


Betrifft: AW: Bereich sortieren von: PeterW
Geschrieben am: 11.08.2004 21:04:03

Hallo Michl,

bevor du es versuchst solltest du noch eine Zeile einfügen: nach
strText = InputBox("Name eingeben", "Name?")
die Zeile
If strText = "" Then Exit Sub.

Falls du den Code abbrichst werden dir sonst oben in der Tabelle leere Zeilen eingefügt.

Gruß
Peter


  


Betrifft: AW: Bereich sortieren von: Michl
Geschrieben am: 12.08.2004 09:00:49

How, supi supi!

Peter du hast mir echt super geholfen, der Code lübbt einwandfrei, ohne Probleme. :)

Großes Danke an dich.


MfG,
Michl


  


Betrifft: AW: Bereich sortieren von: Michl
Geschrieben am: 12.08.2004 15:26:03

Hallo Peter!

Du jetzt gibts doch ein Problem mit dem Code.
Ich hab das Phenomen beobachtet, dass alle Begriffe ab dem Buchstaben R (also R, S, T, U, V, W, X, Y, Z) nicht mehr korrekt eingeordnet werden.
Wenn also ein Begriff ab dem Buchstaben R in die InputBox eingegeben wird, kann er diesen nicht mehr richtig einordnen, er schreibt ihn irgendwo in die Spalte A rein.
Der Vorgang an und für sich läuft ja korrekt ab, nur die alphabetische Einordnung funktioniert dann nicht mehr.

Kannst du mir eventuell weiterhelfen? Hoffe du weißt woran des liegt.

Gruß,
Michl


  


Betrifft: AW: Bereich sortieren von: PeterW
Geschrieben am: 12.08.2004 15:34:54

Hallo Michl,

kann ich nur bedingt nachvollziehen. Probleme gibt es, wenn du mal Groß- und mal Kleinbuchstaben benutzt. Das läßt sich hiermit umgehen:
Sub Michl()
Dim strText As String
Dim lngRow As Long
    strText = InputBox("Name eingeben", "Name?")
    If strText = "" Then Exit Sub
    'die Namen beginnen in Zeile 1, ansonsten lngRow anpassen!!
    lngRow = 1
    Do Until WorksheetFunction.Proper(Cells(lngRow, 1)) > WorksheetFunction.Proper(strText) Or Cells(lngRow, 1) = ""
        lngRow = lngRow + 3
    Loop
    Rows(lngRow & ":" & lngRow + 2).Insert
    Cells(lngRow, 1) = WorksheetFunction.Proper(strText)
End Sub

Wenn es das nicht war lade bitte eine Beispieltabelle auf den Server.

Gruß
Peter


  


Betrifft: AW: Bereich sortieren von: Michl
Geschrieben am: 12.08.2004 17:50:53

Ok, danke. An der Groß-und Kleinschreibung kann es auf jeden Fall nicht liegen,da ich alles einheitlich aufgebaut habe.

Höchstwahrscheinlich liegt es nicht an deinem Codeteil, sondern an dem Restlichen, den ich programmiert habe. Wahrscheinlich habe ich da irgendwo einen Fehler eingebaut, mal schaun.
Ich hoffe ich finde ihn, ansonsten meld ich mich nochmal und lade eine Beispieltabelle auf den Server hoch.

Trotzdem Danke für deine Bemühungen.


  


Betrifft: AW: Bereich sortieren von: Michl
Geschrieben am: 13.08.2004 08:33:34

So Peter, ich hab meinen Fehler gefunden!
War ein Fehler meinerseits, hab ich auch jetzt erst gesehen.

Also nochmal ein riesen Dankeschön an dich, dass du mir weitergeholfen hast. :)

Tschö,
Michl