Herbers Excel-Forum - das Archiv

Input Box

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Input Box
von: Ernst
Geschrieben am: 20.09.2003 11:17:02
Hallo Forumsteilnehmer,

ich habe eine Tabelle die ich nach dem Spaltenkopfnamen
sortieren lassen möchte.
Die Spaltenköpfe enthalten die Werte von 78 bis 150.

Es sollte über InputBox der Wert eingegeben werden
nachdem die Tabelle sortiert wird.

Bsp. InputBox-Eingabe = 105
jetzt sollte die Tabelle nach der Spalte mit dem Spaltenkopf 105
aufsteigend sortiert werden.

Wie muß ich diese Makro schreiben.

Für Eure Hilfe
bedanke ich mich im Voraus

Ernst

Bild

Betrifft: AW: Input Box
von: andre
Geschrieben am: 20.09.2003 12:53:20
hallo ernst,
ist ein schönes beispiel zum lernen. nur eine frage vorab - ist der wert mit der spaltennummer gemeint? wenn ja, dann z.b. so:

mit dem recorder zeichnest du das sortieren auf. da bekommst du bei spalte a das:

Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

für die inputbox findest du in der hilfe das:

Beispiel zur InputBox-Methode

Im folgenden Beispiel wird der Benutzer zur Eingabe einer Zahl aufgefordert.

myNum = Application.InputBox("Enter a number")

dann noch nach spalte suchen:

Beispiel zur Columns-Eigenschaft

In diesem Beispiel wird die Schriftart der ersten Spalte (Spalte A) in Sheet1 fett formatiert.

Worksheets("Sheet1").Columns(1).Font.Bold = True

das ganze verbinden:

Sub Makro1()
' Makro am 20.09.2003 von wanderer aufgezeichnet
mynum = Application.InputBox("Enter a number")
'... und eventuell noch eine Sicherheit für die Nummer einbauen:
If mynum < 78 Or mynum > 150 then exit sub
Selection.Sort Key1:=Columns(mynum), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub


gruss andre
Bild

Betrifft: AW: Input Box
von: Ernst
Geschrieben am: 20.09.2003 14:20:07
Hallo Andre,
danke für Deine Antwort.

Wahrscheinlich habe ich mich nicht klar genug ausgedrückt.

Mit Spaltenköpfe meinte ich die Überschriften eines markierten Bereichs.


Ein markierter Bereich, dem ich den Namen "ALLE" zugewiesen habe soll sortiert werden.
Der markierte Bereich enthällt die Überschriften.
Die Werte der Überschriften sind 78 - 150.

Daten/sortieren, bei " Liste enthält " ist der Schalter "Überschrift" markiert.

Über die InputBox soll der Wert einer Überschrift, nach der sortiert werden soll, eingegeben werden.

Bsp.
Über InputBox wird die Zahl "78" eingegeben.
nun sollte der markierte Bereich nach der Spalte mit der Überschrift "78" sortiert werden.

Vieleicht ist jetzt mein Problem klarer beschrieben ?

Danke für die Antwort im Voraus

Ernst
Bild

Betrifft: AW: Input Box
von: WernerB.
Geschrieben am: 20.09.2003 15:59:21
Hallo Ernst,

wie gefällt Dir dieses Makro:

Option Explicit
Sub Ernst()
Dim c As Range
Dim SoNr As String, Bereich As String, lo As String, ru As String, Sz As String
Dim zo As Long
Dim sl As Integer, sr As Integer
Dim check As Boolean
SoNr = InputBox("Sortier-Nummer eingeben:", "Abfrage")
If SoNr = "" Then check = True
If check = False Then
If Not IsNumeric(SoNr) Then check = True
End If
If check = False Then
If SoNr < 78 Or SoNr > 150 Then check = True
End If
If check = True Then
MsgBox "Keine oder falsche Eingabe !" & vbCr & vbCr & _
"Makro-Abbruch !", vbOKOnly + vbInformation, _
"Dezenter Hinweis für " & Application.UserName & ":"
Exit Sub
End If
Application.ScreenUpdating = False
Bereich = Range("ALLE").Address(False, False)
lo = Left(Bereich, InStr(Bereich, ":") - 1)             'links oben
ru = Right(Bereich, Len(Bereich) - InStr(Bereich, ":")) 'rechts unten
zo = Range(lo).Row                                      'Zeile oben
sl = Range(lo).Column                                   'Spalte links
sr = Range(ru).Column                                   'Spalte rechts
For Each c In Range(Cells(zo, sl), Cells(zo, sr))
If c.Value = SoNr Then
Sz = c.Address(False, False)
Exit For
End If
Next c
If Sz <> "" Then
Range("ALLE").Sort Key1:=Range(Sz), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Else
MsgBox "Überschrift nicht gefunden !" & vbCr & vbCr & _
"Keine Sortierung !", vbOKOnly + vbInformation, _
"Dezenter Hinweis für " & Application.UserName & ":"
End If
Application.ScreenUpdating = True
End Sub

Viel Erfolg wünscht
WernerB.

P.S.: Das Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter (siehe Forums-FAQ).
Bild

Betrifft: AW: Input Box
von: Ernst
Geschrieben am: 21.09.2003 09:59:19
Hallo WernerB,

Super, genau das habe ich gebraucht.
Ich danke Dir.

Bedauerlicherweise ist mir die Makro-Synatax
nicht verständlich.

Könntest Du mir erklären was genau in dem Makro abläuft.

Liebe Grüße
Ernst
Bild

Betrifft: AW: Input Box
von: WernerB.
Geschrieben am: 21.09.2003 11:33:15
Hallo Ernst,

es freut mich, wenn ich Dir mit dem Makro helfen konnte.
Zum - hoffentlich - besseren Verständnis habe ich das Makro noch mit einigen Kommentarzeilen versehen:

Option Explicit
Sub Ernst()
Dim c As Range
Dim SoNr As String, Bereich As String, lo As String, ru As String, Sz As String
Dim zo As Long
Dim sl As Integer, sr As Integer
Dim check As Boolean
'InputBox aufrufen
SoNr = InputBox("Sortier-Nummer eingeben:", "Abfrage")
'Prüfung, ob etwas eingegeben wurde (InputBox)
If SoNr = "" Then check = True
'Prüfung ob die Eingabe numerisch ist
If check = False Then
If Not IsNumeric(SoNr) Then check = True
End If
'Prüfung ob der Eingabewert zwischen 78 und 150 liegt
If check = False Then
If SoNr < 78 Or SoNr > 150 Then check = True
End If
'Hinweis und Makroabbruch, falls Prüfungen nicht bestanden
If check = True Then
MsgBox "Keine oder falsche Eingabe !" & vbCr & vbCr & _
"Makro-Abbruch !", vbOKOnly + vbInformation, _
"Dezenter Hinweis für " & Application.UserName & ":"
Exit Sub
End If
Application.ScreenUpdating = False
'Ermitteln der Überschriftenzeile des Bereichs "ALLE"
Bereich = Range("ALLE").Address(False, False)
lo = Left(Bereich, InStr(Bereich, ":") - 1)             'links oben
ru = Right(Bereich, Len(Bereich) - InStr(Bereich, ":")) 'rechts unten
zo = Range(lo).Row                                      'Zeile oben
sl = Range(lo).Column                                   'Spalte links
sr = Range(ru).Column                                   'Spalte rechts
'Zelladresse des Eingabewerts in Überschriftenzeile ermitteln
For Each c In Range(Cells(zo, sl), Cells(zo, sr))
If c.Value = SoNr Then
Sz = c.Address(False, False)
Exit For
End If
Next c
'Sortierung, wenn Eingabewert in Überschriftenzeile gefunden
If Sz <> "" Then
Range("ALLE").Sort Key1:=Range(Sz), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'Hinweis, wenn Eingabewert in Überschriftenzeile nicht gefunden
Else
MsgBox "Überschrift nicht gefunden !" & vbCr & vbCr & _
"Keine Sortierung !", vbOKOnly + vbInformation, _
"Dezenter Hinweis für " & Application.UserName & ":"
End If
Application.ScreenUpdating = True
End Sub



Gruß WernerB.
Bild

Betrifft: AW: Input Box
von: Ernst
Geschrieben am: 21.09.2003 12:20:54
Lieber WernerB,

Du hast mir sehr geholfen,
jetzt ist mir der Ablauf einigermaßen klar geworden.

Vielen Dank für Deine Mühe

ich verbleibe
mit freundlichen Grüßen

Ernst
 Bild