Office: Makro

Helfe beim Thema Makro in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, in der Anlage findet ihr ein Datei, bei der aus zwei getrennten Bereichen (Eingabebereich 1 und Eingabebereich 2) ausschließlich die... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von joscha_h, 24. März 2012.

  1. joscha_h Erfahrener User

    Makro


    Hallo,

    in der Anlage findet ihr ein Datei, bei der aus zwei getrennten Bereichen (Eingabebereich 1 und Eingabebereich 2) ausschließlich die gefüllten Zeilenin eine andere Tabelle (Datenbank) übertragen werden sollen. Hierzu habe ich das Makro 1 erstellt.

    Die beiden Eingabebereiche müssen getrennt voneinander sein.

    Bei der Ermittlung der gefüllten Zeilen arbeite ich mit lng.letzte/specical cells.

    Es kann durchaus vorkommen, dass nur ein Bereich gefüllt ist. Bei einem älternen Makro habe ich die Bereiche separat überprüft. Daher ist das Makro falls ein Bereich nicht gefüllt war auf die Bretter gegangen (no Rows).

    Ich wollte daher die beiden Eingaben in einem zusätzlichen Bereich zusammenführen und anschließend diesen über Inhalte einfügen sortieren lassen (Hilfstabellen). Durch die Sortierung möchte ich nun für beide Bereiche überprüfen, wo die letzte befüllte Zelle ist.

    Leider erkennt das Makro1 nicht, wann die letzte Zelle gefüllt ist und fügt den kompletten Bereich ein. Mache ich die einzelnen Schritte händisch klappt das aber.

    Ich hoffe das war verständlich.

    Habt jemand eine Idee wie ich das Lösen kann? Wie gesagt es sind zwei getrennte Bereich und es kann durchaus vorkommen, dass ein Bereich nicht gefüllt ist und es soll alles durch ein Makro gelöst werden.

    Ich bitte um Hilfe!
     

    Anhänge:

    joscha_h, 24. März 2012
    #1
  2. cpt. Nemo Erfahrener User
    Hallo Joscha,

    ich habe mir mal erlaubt, den Modul-Bereich den Realitäten anzupassen Makro :eek:.

    So, ich denke, dass ich die Lösung erwischt habe. Es sind nur die Daten, nicht die Formeln übertragen worden. Das ist hoffentlich OK.
    Rufe die Sub Copy2Db() auf und passe anschließend den Code deinen Gegebenheiten an.
     
    cpt. Nemo, 25. März 2012
    #2
  3. joscha_h Erfahrener User
    Hallo Nemo,

    vielen Danke für deine Hilfe.

    Ich habe das Makro ein paar mal getestet und mir ist folgendes aufgefallen: Damit das Makro wie gewünscht arbeitet, muss ich es immer aus dem Ziel-Sheet (Neue Datenbank) ausführen. Es scheint so als würden die zu kopierenden Daten immer in das gerade aktive Sheet eingefügt.

    Ehrlich gesagt übefordert mich deine Lösung gerade noch etwas, da es auch sehr von meinem bisherigen Makro abweicht. Insbesondere, dass im Makro nicht die Befehle Copy/Paste auftauchen verwundert mich.

    Kannst du mit bitte noch etwas über die Funktionsweise des Makros schreiben?

    Vielen Dank!

    Joscha
     
    joscha_h, 26. März 2012
    #3
  4. joscha_h Erfahrener User

    Makro

    Ergänzung

    Anbei nach mal meine aktuelle Datei, falls ich aus versehen etwas geändert haben sollte.

    Eine Sache hatte ich gerade noch vergessen: im Zielsheet (Neue Datenbank) werden die Daten aus den beiden Eingabebereiche nicht angehängt, sondern überschrieben.

    Kannst du dir das bitte noch einmal anschauen?

    DANKE!

    Joscha
     
    joscha_h, 26. März 2012
    #4
  5. cpt. Nemo Erfahrener User
    Hallo Joscha,

    es waren (wirklich) nur einige Punkte (im Code), die ich nicht gesehen hatte. Nun soll das Teil von überall aus laufen.

    HTML:
       strZieltab = "NeueDatenbank"
       For i = 1 To Worksheets.Count
          If Sheets(i).Name = strZieltab Then
             ZTabVorhanden = True
             Exit For
          End If
       Next i
    Hier wird geprüft, ob das Tabellenblatt mit dem Namen NeueDatenbank schon existiert. Falls ja, wird der Variablen ZTabVorhanden der Wert TRUE zugewiesen.
    HTML:
       If Not ZTabVorhanden Then
          Sheets.Add After:=Sheets(Sheets.Count)
          ActiveSheet.Name = strZieltab
       End If
    ... und wenn nicht vorhanden, dann wird sie angelegt und mit dem Namen versehen.
    HTML:
    Set objSrcTab = Sheets("Tabelle2")
       Set objZielTab = Sheets(strZieltab)
       Set rngEingabe1 = objSrcTab.Range("A7:E13")
       Set rngEingabe2 = objSrcTab.Range("A18:E24")
       intSpAnz = 4   'Dort muss >0 sein
    Den Variablen das Sheet bzw. den Bereich zuweisen. intSpAnz = 4 -> Spalte 4, dort steht die Anzahl drinnen.
    HTML:
       With objZielTab
          'Überschriften in Zieltab schreiben
          For i = 1 To 5 'Jede Spalte
             .Cells(1, i) = objSrcTab.Cells(6, i)
          Next i
          lngDestRow = 1
       End With
    Durch das With wird alles, was mit dem Punkt beginnt, so "umgewandelt": ObjZieltab.Cells(1,i) = objSrcTab.Cells(6, i). Also: In der Tabelle NeueDatenbank ist in Zeile1 Spalte(i) der Wert, der in der Tabelle Tabelle2 (SrcTab) in Zeile 6 Spalte(i) steht. Das ist ähnlich wie eine Formel in der Zieltabelle, nur werden hier Werte eingefügt. Wenn du in der Quell-Tabelle nachher etwas änderst, wird sich in der Zieltabelle nichts ändern.

    Mit der Übernahme der Daten funktioniert das genau so. Ich schreibe also in die entsprechende Zelle direkt den Wert, der in der Quelltabelle steht.

    So, den Rest habe ich in der koorigierten Version kommentiert.

    Wozu allerdings Tabelle1 gut ist, weiss ich nicht. Und jeder Aufruf des Makros hängt die Daten der beiden Eingabebereiche in der Zieltabelle an!
     
    cpt. Nemo, 26. März 2012
    #5
  6. joscha_h Erfahrener User
    Hallo Nemo,

    vielen Dank das funktioniert jetzt sehr gut. Auch danke für die Erklärung, dass macht es viel verständlicher für mich.

    Die Tabelle 1 war als meine eigentliche Zieltabelle gedacht.

    Eine Frage habe ich noch: ich hatte in meiner Ausgangssituation geplant die Datenbank (Zieltabelle) in einer separaten Datei anzulegen. In meinem Ausgangssachverhalt habe ich mein Problem so übersichtlich wie möglich dargestellt. Ich dachte das Öffnen einer anderen Datei und das anschließende einkopieren werde ich schon hinbekommen.

    Leider ist dem mit deiner Version nicht mehr so. In der Anlage habe ich es versucht. Die Zieldatei wird zwar geöffnet und auch ein neues Sheet angelegt. Jedoch das Übertragen der Daten klappt noch nicht.

    Kannst du dir das bitte noch einmal anschauen?

    Danke!

    Joscha
     
    joscha_h, 27. März 2012
    #6
  7. cpt. Nemo Erfahrener User
    Hallo Joscha,

    ich bin einige Tage on the road und habe da meist kein Excel zur Hand. Ich melde mich am Wochenende wieder (bitte erinnere mich daran), dann habe ich auch Zeit und Muße ...
    (Da soll aber niemanden von den anderen Helfern daran hindern, kurz mal zu testen und die Antwort zu geben ...Makro :cool:)
     
    cpt. Nemo, 28. März 2012
    #7
  8. miriki Erfahrener User

    Makro

    Ich hab nur mal 'n kurzen Blick bislang reingeworfen, aber was mir in jedem Fall dazu einfällt:

    Der Source hat enorm viele Fragmente aus dem Makro-Rekorder. Da müßte ganz allgemein echt mal aufgeräumt und optimiert werden.

    Allgemein, sowohl zur Optimierung, als auch zur Übersichtlichkeit, insbesondere wenn nicht nur mit mehreren Blättern, sondern auch noch mit mehreren Mappen gearbeitet wird: Benutze Objekt-Variablen, die auf die Mappen / Blätter gesetzt werden und benutze diese dann bei jeder Referenz. Nur einfach
    Code:
    sheets("xxx").activate
    Ist eine schlechte Idee in der Umgebung, weil ggf. das Blatt in der falschen Mappe angesprochen wird. Aber
    Code:
    thisworkbook.worksheets("xxx").activate
    ist vielleicht etwas umständlich auf Dauer. Ein
    Code:
    dim w1 as workbook
    dim s1 as worksheet
    dim r1 as range
    
    dim w2 as workbook
    dim s2 as worksheet
    dim r2 as range
    
    [ ... ]
    
    set w1 = thisworkbook
    set s1 = w1.worksheets("quellblatt")
    set r1 = s1.range("b2:d4")
    
    set w2 = workbooks("externemappe.xls")
    set s2 = w2.worksheets("zielblatt")
    set r2 = s2.range("f6:h8")
    
    [ ... ]
    
    [B]w1.activate
    s1.activate
    r1.copy destination:=r2
    [/B]
    w2.activate
    s2.activate
    sieht da doch schon recht übersichtlich aus, oder? Und für spätere Änderungen ist das auch viel universeller, weil dann nicht quer durch den Code überall "xxx" angepaßt werden muß, sondern eben nur weiter oben die "set" Anweisung.

    Etwas weiter unten in Deinem Source wird ja auch mit diesen Objekt-Variablen gearbeitet, aber eben nicht im oberen Teil, alles in allem nicht konsequent genug meiner Meinung nach. Ich persönlich bin aber auch kein großer Freund von "with" Blöcken. Meistens geht's, aber zwei ineinander verschachtelte davon machen meist höllische Probleme. Deswegen vermeide ich die, wo ich nur kann.

    Das "Suchen" nach dem Blatt in der externen Mappe ist mit dieser Methode übrigens auch etwas leichter. Wenn die mit "set" gesetzte Variable "nothing" ist, dann existiert das Blatt nicht und muß eben erzeugt werden.
    Code:
       strZieltab = "NeueDatenbank"
       For i = 1 To Worksheets.Count
          If Sheets(i).Name = strZieltab Then
             ZTabVorhanden = True
             Exit For
          End If
       Next i
       If Not ZTabVorhanden Then
          [...]
    könnte dann werden:
    Code:
       strZieltab = "NeueDatenbank"
       set s2=sheets(strzieltab)
       If (s2 is nothing) Then
          [...]
    Gruß, Michael
     
    miriki, 28. März 2012
    #8
Thema:

Makro

Die Seite wird geladen...
  1. Makro - Similar Threads - Makro

  2. Makro Zip-Datei von Webseite runterladen, auspacken, kopieren

    in Microsoft Excel Hilfe
    Makro Zip-Datei von Webseite runterladen, auspacken, kopieren: Hallo Zusammen, ich habe ein Makro gefunden von dem ich denke, dass es koennen sollte was ich braeuchte, eine Datei herunterladen, auspacken und den Inhalt in die Datei kopieren in der das Makro...
  3. Makro für variable Anzahl von Datensätzen

    in Microsoft Excel Hilfe
    Makro für variable Anzahl von Datensätzen: Hallo zusammen, ich habe wieder einmal ein kleines Excel-Problem, bei dem Ihr mir sicherlich helfen könnt. Ich habe eine Excel-Liste, das ist ein Export aus einem anderen Programm (siehe...
  4. Makro aus personal.xls starten

    in Microsoft Excel Hilfe
    Makro aus personal.xls starten: Auf einem Arbeitsblatt habe ich mehrere Buttons. Die zugehörigen Makros sind in personal.xls gespeichert. Aus dem Code-Editor heraus kann ich die Makros ohne Problem starten. auf dem Arbeitsblatt...
  5. Dokumente und Blatt umbenennen

    in Microsoft Word Hilfe
    Dokumente und Blatt umbenennen: Ich lade mir jeden Tag csv-Dateien von meiner Bank herunter. Diese sind mit Datum versehen, also die Datei selbst und das erste Blatt, z.B. "Konto_13.02.2024". Wenn ich ein Makro erstelle, in dem...
  6. Speichern mit dem Titel der Zelle A2

    in Microsoft Excel Hilfe
    Speichern mit dem Titel der Zelle A2: Moin moin, Ich habe per Makro einen Arbeitsablauf aufgezeichnet der soweit auch funktioniert. Dieser Endet jedoch im "Speichern Unter" Fenster, welches durch das Klicken von "Drucken als PDF"...
  7. Barcode Scanliste Makro anpassen

    in Microsoft Excel Hilfe
    Barcode Scanliste Makro anpassen: Hallo zusammen! Einer der Mitglieder hier hat mir eine Funktionsliste erstellt, mit der man Barcodes scannt und danach einen Wert über die Bildschirmtastatur eingibt. Die Barcodes hatten bisher...
  8. Makro wird nicht angezeigt im Makro Auswahlfenster

    in Microsoft Excel Hilfe
    Makro wird nicht angezeigt im Makro Auswahlfenster: Hallo, wenn ich mein Makro ausführen möchte, öffnet sich das Makro Auswahlfenster. Allerdings wird das Makro nicht aufgelistet. Das Makro befindet sich in der PERSONAL.xlsb Arbeitsmappe. Die...
  1. Nixxnuzz
Schlagworte:
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden