Input Box

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
InputBox MsgBox
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

Beiträge aus den Excel-Beispielen zum Thema " Autofilter bei geschütztem Blatt"