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

    Hallo!

    Ich möchte einem Commandbutton ein Makro zuweisen, dass wenn ich darauf klicke Daten aus einem Tabellenblatt1 rauskopiert werden, in ein anderes(Tabellenblatt2) reingeschrieben und gespeichert werden. Die eingegebenen Daten (Tabellenblatt1) sollen dann auch beim speichern des gesamten Dokumentes gelöscht werden und nur noch in Tabellenblatt2 vorhanden sein. Ist sowas durch einen CommandButton möglich?

    Vielleicht geht es auch das mann die Dten durch einen Button speichert und mit einem anderen dann die eingegeben Daten zurücksetzt?

    Wäre toll, wenn jemand helfen könnte.

    Danke im Vorraus.

    Tommizzo
     
  2. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    zeichne deinen Kopier-/Speichervorgang mit dem Makrorecorder auf. Anschließend erstellst du eine Schaltfläche aus der Formuar-Symbolleiste und weist ihr das aufgezeichnete Makro zu.
     
  3. Tommizzo

    Tommizzo Byte

    Hi Karin!

    Ich bin mit Makros nicht so bewandert. Weiß leider nicht was ich da schreiben soll bzw. was aufgezeichnet werden soll.

    Tommi
     
  4. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    starte ganz einfach über Extras -> Markos -> Aufzeichnen den Makrorecorder. Dann führst du alle Arbeitsschritte aus, die du beim Kopieren in die andere Tabelle, Speichern und Löschen der Ausgangsdaten machst. Wenn du fertig bist, beendest du die Aufzeichnung. Testen kannst du den aufgezeichneten Code über Extras -> Makro -> Makros und Ausführen. Da kannst du feststellen, ober auch wirklich das passiert, was du möchtest.

    Mit Alt+F11 gelangst du in den VBA-Editor. Wähle dann links im Projektexplorer dein VBA-Projekt aus und mache einen Doppelklick auf Modul1. Im rechten Fenster siehst du dann den aufgezeichneten Code. Kopiere ihn hier im Forum in einen Beitrag und dann sehen wir, was wir vielleicht noch verbessern können.
     
  5. Tommizzo

    Tommizzo Byte

    Hallo Karin!

    Das hat mir schon sehr geholfen. Mein Code sieht nun wie folgt aus:

    Sub Makro1()
    '
    ' Makro1 Makro
    ' Makro kopieren
    '

    '
    Range("A2").Select
    Selection.Copy
    Sheets("Tabelle2").Select
    Range("A2").Select
    ActiveSheet.Paste
    Sheets("Tabelle1").Select
    Range("B2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Tabelle2").Select
    Range("B2").Select
    ActiveSheet.Paste
    Sheets("Tabelle1").Select
    Range("A2").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    End Sub

    Allerdings würde ich den gern auf einen Commandbutton übertragen. Nur wenn ich den Code dort eintrage, dann wird mir die Meldung Laufzeilfehler 1004 angezeigt. Das verstehe ich nun nicht.

    Tommi
     
  6. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    du hast eine Schaltfläche aus der Formular-Symbolleiste verwendet? Schau dir mal die angehängte Beispieldatei an (beim Abspeichern ".txt" weglassen).
     

    Attached Files:

  7. Tommizzo

    Tommizzo Byte

    Hallo Karin!

    Danke für die tolle Hilfe!
    Ich habe den Code nun so erstellt, wie er zu meinem Dokument passen soll über Makro aufzeichnen. Der Code sieht nun wie folgt aus:

    Sub MakroAW1()
    '
    ' MakroAW1 Makro
    ' kopieren AW
    '

    '
    Selection.Copy
    Sheets("Auswertung").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("Eingabemaske").Select
    Range("E12:G12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Auswertung").Select
    Range("B4").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("Eingabemaske").Select
    Range("E14:G14").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Auswertung").Select
    Range("C4").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("Eingabemaske").Select
    Range("E18").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Auswertung").Select
    Range("C4").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
    Sheets("Eingabemaske").Select
    Range("D24:I26").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Auswertung").Select
    Range("D4").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
    Rows("4:4").Select
    Application.CutCopyMode = False
    Selection.Insert Shift:=xlDown
    Rows("6:6").Select
    Selection.Copy
    Rows("4:4").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Sheets("Eingabemaske").Select
    Range("E6").Select
    Selection.ClearContents
    Range("E12:G12").Select
    Selection.ClearContents
    Range("E14:G14").Select
    Selection.ClearContents
    Range("E18").Select
    Selection.ClearContents
    Range("D24:I26").Select
    Selection.ClearContents
    End Sub

    Kann der Code auch hier wieder vereinfacht werden, so wie du es mir vorher gechickt hattest? Besteht die Möglichkeit, dass nachdem die daten kopiert, in ein anderes Tabellenblatt eingeschrieben und aus dem ersten gelöscht wurden, einen Hinweis anzuzeigen, das die Daten kopiert wurden und der sich dann nach ein paar Sekunden wieder ausblendet?

    Tommi
     
  8. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    leider konnte ich aus deinem Code nicht entnehmen, wo der erste Wert hin kopiert werden soll. Beachte bitte auch, dass 2 mal nach Zelle C4 kopiert wird

    Code:
    Sub MakroAW1()
        Dim wsShell
        Dim loI
        With Worksheets("Eingabemaske")
    '        .Range("E6").Copy
    '        Sheets("Auswertung").Range("?????").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
            .Range("E12:G12").Copy
            Sheets("Auswertung").Range("B4").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
            .Range("E14:G14").Copy
            Sheets("Auswertung").Range("C4").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
            .Range("E18").Copy
            Sheets("Auswertung").Range("C4").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
            .Range("D24:I26").Copy
            Sheets("Auswertung").Range("D4").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        End With
        With Worksheets("Auswertung")
            .Rows("4:4").Insert Shift:=xlDown
            .Rows("6:6").Copy
            .Rows("4:4").PasteSpecial Paste:=xlPasteFormats
            Application.CutCopyMode = False
        End With
        With Worksheets("Eingabemaske")
            Union(.Range("E6"), .Range("E12:G12"), .Range("E14:G14"), .Range("E18"), .Range("D24:I26")).ClearContents
        End With
        Set wsShell = CreateObject("WScript.Shell")
        loI = wsShell.Popup("Es wurden alle Daten übertragen", 2, "Hinweis")
        Set wsShell = Nothing
    End Sub
    
    Ich hoffe, dass ich den Code richtig umgesetzt habe.
     
  9. Tommizzo

    Tommizzo Byte

    Hi Karin!

    Vielen vielen Dank für deine Hilfe. Du hast mir echt weiter geholfen. Ohne dich würde ich wahrscheinlich imme rnoch am Anfang rumdümpeln.
    Habe da aber noch eine andere kleine Frage. Kann ich im Makro durch eine wenn dann Abfrage festlegen, wenn z.B. in Zelle A2 "Mustermann, Max" steht, dass dieser Name in eine vorher entsprechend festgelegte Zahl umgewandelt wird?

    Bis später
    Tommi
     
  10. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    natürlich kann man das. Vom Prinzip müsste der Code so ausehen

    If Range("A2")="Mustermann, Max" Then Range("A2")=100

    wenn der Wert in der Zelle selbst geändert werden soll.
     
  11. Tommizzo

    Tommizzo Byte

    Hi Karin!

    Danke, das hat geklappt.

    Tommi
     
  12. Tommizzo

    Tommizzo Byte

    Hi Karin!

    Habe da noch ne Frage, Kann ich, nachdem ich die Daten eingegeben habe und dann auf "Eintragen" klicke, ein Fenster öffnen, das fragt "Sind Sie sicher?" "Ja" dann eintragen "Nein" dann zurück zur Eingabe?

    Tommi
     
  13. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    vom Prinzip her ginge das so

    Code:
    Private Sub CommandButton1_Click()
        Dim strAnzeige As String
        strAnzeige = MsgBox("Sind Sie sicher?", vbYesNo)
        If strAnzeige = vbNo Then
            Exit Sub
        Else
            ' hier deinen Code zum Eintragen
        End If
    End Sub
    
     
  14. Hascheff

    Hascheff Moderator

    Hallo,

    MsgBox gibt aber Integer zurück, vbNo ist eine Konstante.
    Also muss die zweite Zeile

    Dim strAnzeige As Integer

    heißen.
     
  15. Beverly

    Beverly Halbes Megabyte

    Hi Hascheff,

    hast du den Code so, wie ich ihn gepostet habe getestet? Es spielt keine Rolle, wie du die Variable dimensionierst - er funktioniert sowohl als String als auch als Integer.
     
  16. brum

    brum Kbyte

    Ihr könnt die Zeile auch ganz weg lassen. ;-)

    Gruss
    Bruno
     
  17. Beverly

    Beverly Halbes Megabyte

    Hi Bruno,

    da ich generell mit Option Explicit arbeite, um Felher bei der Verwendung von Variablen zu vermeiden, kann ich diese Zeile der Variablendeklaration nicht weglassen.
     
  18. Hascheff

    Hascheff Moderator

    Hi Beverly,
    Na das ist ja wieder ein Ding! Wer rechnet denn mit so was! Das hab ich natürlich noch nicht ausprobiert.

    :dafür: Ordnung ist das halbe Leben.
     
  19. Tommizzo

    Tommizzo Byte

    Hallo!

    Danke für die gute Unterstützung. Habe das so gemacht, wie Karin das geschrieben hat und es klappt wunderbar. Gibt es eigentlich auch die Möglichkeit über ein Makro einen Filter zu erstellen. Ich habe das über den Autofilter probiert, aber ich will Filter an verschiedenen Stellen des Blattes haben und nicht nebeneinander.

    Gruß Tommi
     
  20. Beverly

    Beverly Halbes Megabyte

    Hi Tommi,

    vom Prinzip her kann man einen Filter simulieren, indem man die Werte in einer Schleife durchläuft und prüft, ob sie der Bedingung entsprechen - wenn nicht, dann wird die betreffende Zeile ausgeblendet.

    Beispiel: von Zeile 1 bis 20 sollen nur Zeilen angezeigt werden, die in Spalte A den Wert 2 beinhalten

    Code:
    Sub filtersimulation()
        Dim inZeile As Integer
        For inZeile = 1 To 20
            If Cells(inZeile, 1) <> 2 Then Rows(inZeile).Hidden = True
        Next inZeile
    End Sub
    
     
Thread Status:
Not open for further replies.

Share This Page