1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

speichern über command button

Discussion in 'Office-Programme' started by Tommizzo, Dec 4, 2007.

Thread Status:
Not open for further replies.
  1. Tommizzo

    Tommizzo Byte

    Hi Karin!

    Danke, das ist gut. Doch wo kann ich festlegen welche Spalte geprüft werden soll? Will verschiedene Abfragen machen. Z.B. Erst nach Datum sortieren und dann zusätzlich nach Namen und andere?

    Gruß, Tommi
     
  2. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    Cells(inZeile, 1) bedeutet Spalte A, da Cells als Cells(Zeile, Spalte) verwendet wird. Wenn du die 1 also durch eine Integer-Variable ersetzt, dann können unterschiedliche Spalten je nach Bedarf durchsucht werden.
     
  3. Tommizzo

    Tommizzo Byte

    Danke für die Erläuterung. Ich setze das gerade um. Ist es möglich bei Datumsangaben auch nach Monaten zu filtern oder Jahren? Ich habe das schon versucht mit deinem Code und den anzupassen, aber irgendwie gelingt mir das nicht.

    Bis später,
    Tommi
     
  4. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    nach einem Jahr filtern kannst du z.B. mit diesem Code

    Code:
    Sub filtersimulation()
        Dim inZeile As Integer
        For inZeile = 1 To 20
            If Year(Cells(inZeile, 1)) <> 2007 Then Rows(inZeile).Hidden = True
        Next inZeile
    End Sub
    
    und nach einem Monat respektive

    Code:
    Sub filtersimulation()
        Dim inZeile As Integer
        For inZeile = 1 To 20
            If Month(Cells(inZeile, 1)) <> 12 Then Rows(inZeile).Hidden = True
        Next inZeile
    End Sub
    
    und wenn sowohl Jahr als auch Monat dann dieser Code

    Code:
    Sub filtersimulation()
        Dim inZeile As Integer
        For inZeile = 1 To 20
            If Year(Cells(inZeile, 1)) <> 2007 Or Month(Cells(inZeile, 1)) <> 1 Then Rows(inZeile).Hidden = True
        Next inZeile
    End Sub
    
     
  5. Tommizzo

    Tommizzo Byte

    Hallo Karin!

    Ich habe versucht den Code umzusetzen. So wie du Ihn geschrieben hast passt das perfekt. Ich habe den Code so anpassen wollen, das ich festlegen kann in einer Zelle, nach welchem Datum MM.JJJJ gesucht werden soll. Und das klappt nicht. der Code sieht wie folgt aus:

    Sub filtersimulation()
    Dim inZeile As Integer
    For inZeile = 1 To 20
    If Year(Cells(inZeile, 1)) <> Range("A1") Or Month(Cells(inZeile, 1)) <> Range("A1") Then Rows(inZeile).Hidden = True
    Next inZeile
    End Sub

    Kannst du mir sagen, was ich da falsch gemacht habe?

    Bis später
    Tommi
     
  6. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    wenn du nicht die Jahres- und Monatszahl direkt in den Code eingibst, dann musst du beide aus dem Wert in der Zelle auslesen. Die Zeile muss dann so heißen

    Code:
    If Year(Cells(inZeile, 1)) <> Year(Range("A1")) Or Month(Cells(inZeile, 1)) <> Month(Range("A1")) Then Rows(inZeile).Hidden = True
    
    
     
  7. Tommizzo

    Tommizzo Byte

    Danke!
    Geht es auch, das man entweder nach einem konkreten Datum, Monat oder Jahr filtern kann in einem Makro. Oder muss ich dafür verschiedene anlegen?

    Gruß
    Tommi
     
  8. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    vom Prinzip her geht das schon, man kann das mit einer Select Case Anweisung machen und den Code entsprechend verzweigen. Aber irgendwie bzw. irgendwo musst du festlegen, wonach denn gefiltert werden soll. Dazu ließe sich z.B. der Eintrag in einer Zelle, eine InputBox oder ein UserForm mit 3 OptionsButton oder 3 OptionsButton in der Tabelle verwenden. Es gibt sicher auch noch andere Möglichkeiten.
     
  9. Tommizzo

    Tommizzo Byte

    Hallo Karin!

    Ich würde das gern so machen wollen, dass wenn ich auf den Button filtern klicke ein UserForm geöffnet wird mit 3 Command Buttons für die jeweilige Filtervariante. Das UserForm ahbe ich auch bereits erstellt. Doch wie kann ich über den CommandButton das UserForm öffnen und dann die anderen Butons ausführen?

    Gruß
    Tommi
     
  10. Tommizzo

    Tommizzo Byte

    Habe die Userform erstellt und es funktioniert. Allerdings klappt es mit dem Jahresfilter nicht so ganz.
    Der Code ist wie folgt:
    Private Sub CommandButton1_Click()
    Dim inZeile As Integer
    For inZeile = 8 To 20
    If Year(Cells(inZeile, 1)) <> Year(Range("A4")) Then Rows(inZeile).Hidden = True
    Next inZeile
    Unload Filterart
    End Sub

    Wenn ich dann das Datum eingebe nach dem gefiltert werden soll, dann werden alle Zeilen ausgeblendet.

    bis später
    Tommi
     
  11. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    lade deine Arbeitsmappe doch mal hoch, dann lässt sich das besser nachvollziehen. Hänge dazu einfach an den Dateinamen noch ein .TXT an oder packe sie in eine ZIP-Datei.
     
  12. Tommizzo

    Tommizzo Byte

    Hallo Karin!

    Habe die Exceltabellen in einen zip Ordner gepackt.
    Gruß
    Tommi
     

    Attached Files:

  13. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    verwende nicht die Zelle A4 für die Datumseingabe, sondern füge dem UserForm eine Textbox mit diesem Code hinzu.

    Code:
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If TextBox1 <> "" Then
            If Not IsDate(TextBox1) Or Len(TextBox1) < 10 Then
                Application.EnableEvents = False
                MsgBox "Bitte ein gültiges Datum eingeben"
                TextBox1 = ""
                Cancel = True
                Application.EnableEvents = True
            End If
            CommandButton1.Enabled = True
            CommandButton2.Enabled = True
            CommandButton3.Enabled = True
            CommandButton4.Enabled = True
        End If
    End Sub
    
    Das Datum muss das Format TT.MM.JJJJ haben, andernfalls wird die Eingabe nicht akzeptiert.

    Ersetze außerdem im Code jedes CommadButtons Range("A4") durch TextBox1.
     
  14. Tommizzo

    Tommizzo Byte

    Hi Karin!

    Danke für den Code, damit klappt das so wie ich es wollte.
    Gibt es eigentlich auch die möglichkeit, eine Summe so zu berechnen, das die ausgeblendeten Zeilen durch den Filtern nicht mit berechnet werden? Habe da was mit Teilsumme im Internet gefunden und das man statt der 9 in der Formel 109 schreibt, aber dann bekomme ich angezeigt #WERT!.

    Bis später
    Tommi
     
  15. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    TEILERGEBNIS() ist die richtige Formel. Die Funktion 109 (erst ab Excel2003) kann dann verwendet werden, wenn die Zeilen nicht mit Autofilter ausgeblendet wurden. Wenn du eine Version < 2003 benutzt, kannst du diese Funktion also nicht verwenden. In diesem Fall müsste man die Zeilen in einer Schleife durchlaufen und prüfen, ob sie eingeblendet sind und dafür dann die Summe bilden
     
  16. Tommizzo

    Tommizzo Byte

    Hi Karin!

    Das hatte ich mir schon gedacht, das es bei mir nicht geht. Habe Excel 2002. Wie kann ich denn so eine Schleife erstellen?

    Bis später
    Tommi
     
  17. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    nach diesem Prinzip

    Code:
    Sub summe_bilden()
        Dim doSumme As Double
        Dim inZeile As Integer
        For inZeile = 1 To 20
            If Rows(inZeile).RowHeight <> 0 Then doSumme = doSumme + Cells(inZeile, 2)
        Next inZeile
        MsgBox doSumme
    End Sub
    
     
  18. Tommizzo

    Tommizzo Byte

    Hi Karin!

    Kann das Ergebniss statt in einer MsgBox auch in einer Zelle auf dem Tabellenblatt wiedergegeben werden?

    bis später
    Tommi
     
  19. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    ja, natürlich. Schreibe anstelle

    MsgBox doSumme

    eben

    Worksheets("Tabelle1").Range("A1") = doSumme
     
Thread Status:
Not open for further replies.

Share This Page