Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1716to1720
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wie wäre es korrekt??

Wie wäre es korrekt?
09.10.2019 13:31:33
Flip
Hallo Community,
Ich trage immer wieder Daten von einer Tabelle in ein anderes Tabellenblatt mittels Makro ein. Das ganze habe ich mir irgendwann mit dem Makrorecorder und ein paar Codeschnipseln zusammengebastelt. Ich verwende diese Vorgehensweise mittlerweile in mehreren Dateien. Mein Frage ist jetzt wie man es richtig machen würde denn ich weiß das es so sicher nicht stimmen kann obwohl das Ergebnis eigentlich immer passt.
  • Option Explicit
    
    Sub Benotung_drucken()
    ' Notenschlüssel anhand der Datenbank ausdrucken
    ' Es müssen nur die Punkte eingegebne werden und die Note wird anhand eines defeniertem  _
    Noteschlüssel berechnet.
    ' Mit diesem Makro kann der Notenschlüssel direkt anhand der Zeile wo man steht ausgedruckt  _
    werden.
    ' einfach in eine X beliebige Zelle der gewünschten Zeile anklicken und das Makro ausführen
    ' Datenbank ist als Tabelle formatiert und als "Datenbank" benannt
    ' in [..] gesetze Zahle ist der Spaltenindex der Tabelle
    Application.ScreenUpdating = False
    Sheets("Datenbank").Select
    Application.Intersect(Selection.EntireRow, Columns([46])).Copy      'kopiert die maximal mö  _
    _
    _
    gliche Punktezahl
    Sheets("Druckausgabe Note").Select
    ActiveSheet.Range("E5").PasteSpecial xlValues
    Sheets("Datenbank").Select
    Application.Intersect(Selection.EntireRow, Columns([44])).Copy      'kopiert die erreichte   _
    _
    _
    Punktezahl
    Sheets("Druckausgabe Note").Select
    ActiveSheet.Range("E6").PasteSpecial xlValues
    Sheets("Datenbank").Select
    Application.Intersect(Selection.EntireRow, Columns([48])).Copy      'kopiert die berechnete  _
    _
    _
    Note
    Sheets("Druckausgabe Note").Select
    ActiveSheet.Range("H5").PasteSpecial xlValues
    Sheets("Datenbank").Select
    Application.Intersect(Selection.EntireRow, Columns([47])).Copy      'kopiert die  _
    berechneten %
    Sheets("Druckausgabe Note").Select
    ActiveSheet.Range("H6").PasteSpecial xlValues
    Sheets("Datenbank").Select
    Application.Intersect(Selection.EntireRow, Columns([51])).Copy      'kopiert die maximal mö  _
    _
    _
    gliche Punktezahl ohne Allgemeinbildung
    Sheets("Druckausgabe Note").Select
    ActiveSheet.Range("E8").PasteSpecial xlValues
    Sheets("Datenbank").Select
    Application.Intersect(Selection.EntireRow, Columns([49])).Copy      'kopiert die erreichte   _
    _
    _
    Punktezahl ohne Allgemeinbildung
    Sheets("Druckausgabe Note").Select
    ActiveSheet.Range("E9").PasteSpecial xlValues
    Sheets("Datenbank").Select
    Application.Intersect(Selection.EntireRow, Columns([53])).Copy      'kopiert die errechnete  _
    _
    _
    Note ohne Allgemeinbildung
    Sheets("Druckausgabe Note").Select
    ActiveSheet.Range("H8").PasteSpecial xlValues
    Sheets("Datenbank").Select
    Application.Intersect(Selection.EntireRow, Columns([52])).Copy      'kopiert die  _
    berechneten % ohne Allgemeinbildung
    Sheets("Druckausgabe Note").Select
    ActiveSheet.Range("H9").PasteSpecial xlValues
    Sheets("Druckausgabe Note").PrintOut
    Sheets("Datenbank").Select
    Application.ScreenUpdating = True
    End Sub
    


  • Problem: Hier kann ich immer nur eine Zeile übertragen. Es gibt aber Dateien wo ich gerne mehrere Zeilen mittels X markieren würde und diese dann in eine anderes Blatt immer untereinander in die jeweils nächste freie Zeile eintragen möchte.
    LG Philipp

    26
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Beisieldatei?
    09.10.2019 13:45:08
    Fennek
    Hallo,
    nach einem ersten Blick sollte es möglich sein den Code zu kürzen. Es ist zwar möglich, aus dem Code auf die Datenstruktur zu schließen, aber mit einer Beispieldatei wäre es einfacher.
    mfg
    AW: Beisieldatei?
    09.10.2019 13:59:37
    Flip
    Ok Danke schonmal! Die Datei mit dem oben genannten Code kann ich aus DSGVO nicht teilen. Habe aber hier eine Testdatei wo ich eben auch das besagte Problem habe das ich gern manchmal mehrere Gegenstände in das andere Blatt eintragen möchte. (Name, Baustelle, Auftragsnummer, Datum sind aber immer gleich). Die Grundidee ist die gleiche mit der Übertragung wie beim oberen Code
    https://www.herber.de/bbs/user/132444.xls
    Anzeige
    AW: VBA-Code
    09.10.2019 14:40:07
    Fennek
    Hallo,
    hier ein Ansatz, der allerdings das Ausleihblatt nicht löscht:
    
    Sub F_en()
    Dim Lst As Worksheet: Set Lst = Worksheets("Werkzeugliste")
    Dim Bel As Worksheet: Set Bel = Worksheets("Leihbeleg")
    Dim RNG As Range, r As Range
    Set RNG = Lst.Range("A:A, B:B, C:C, E:E, J:J")
    lr = Bel.Cells(Rows.Count, 2).End(xlUp).Row
    'Werkzeug
    Set r = Intersect(Selection.EntireRow, RNG)
    r.Copy Bel.Cells(lr + 1, 1)
    'Person
    Lst.Cells(Selection.Row, "K").Copy Bel.Cells(9, 3)
    Lst.Cells(Selection.Row, "N").Copy Bel.Cells(8, 3)
    Lst.Cells(Selection.Row, "O").Copy Bel.Cells(7, 3)
    r.Cells(1).Select
    Set Bel = Nothing
    Set Lst = Nothing
    End Sub
    
    mfg
    Anzeige
    AW: VBA-Code
    09.10.2019 15:00:25
    Flip
    Wow vielen Dank! Das ging ja wahnsinnig schnell. Ok das ist jetzt echt um einiges kürzer. Ich versteh leider so gut wie überhaupt nichts in dem Code aber es klappt soweit. Ja wenn die Datei das nächste mal geöffnet wird soll der Leihbeleg natürlich wieder leer sein. Vielen Dank für deine Super schnelle Hilfe.
    AW: VBA-Code
    09.10.2019 15:00:36
    Flip
    Wow vielen Dank! Das ging ja wahnsinnig schnell. Ok das ist jetzt echt um einiges kürzer. Ich versteh leider so gut wie überhaupt nichts in dem Code aber es klappt soweit. Ja wenn die Datei das nächste mal geöffnet wird soll der Leihbeleg natürlich wieder leer sein. Vielen Dank für deine Super schnelle Hilfe.
    Anzeige
    AW: VBA-Code
    09.10.2019 15:04:39
    Flip
    Das ganze sollte allerdings nur als Wert eingefügt werden, ohne Formatierungen und Rahmen. Wo müsste ich das einbauen?
    AW: VBA-Code
    09.10.2019 15:08:04
    Torsten
    Hallo Flip,
    hier:
    
    Lst.Cells(Selection.Row, "K").Copy
    Bel.Cells(9, 3).PasteSpecial xlPasteValues
    Lst.Cells(Selection.Row, "N").Copy
    Bel.Cells(8, 3).PasteSpecial xlPasteValues
    Lst.Cells(Selection.Row, "O").Copy
    Bel.Cells(7, 3).PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    

    Gruss Torsten
    AW: VBA-Code
    09.10.2019 15:34:58
    Flip
    Bekomme jetzt allerdings bei
    r.Cells(1).Select
    

    den fehler: Laufzeitfehler 1004
    "Die select-Methode des Range-Objektes konnte nicht ausgeführt werden.
    Anzeige
    AW: VBA-Code
    09.10.2019 15:39:55
    Torsten
    Die Zeile kannst du auch weglassen. Macht keinen Sinn. Ist nur ein Markieren einer Zelle am Ende. Keine Ahnung wofuer.
    Gruss Torsten
    AW: VBA-Code
    09.10.2019 15:59:48
    Daniel
    HI
    probier mal
    Application.Goto r.Cells(1)
    
    wenn das Tabellenblatt von r nicht mehr akitv ist, kannst du r nicht mehr selektieren.
    Gruß Daniel
    AW: VBA-Code
    10.10.2019 08:38:36
    Flip
    Vielen Dank für eure Tipps. klappt alles super soweit!
    einziges Problem was jetzt auftritt: Beim Ausführen über eine Schaltfläche werden die Werte von
    Lst.Cells(Selection.Row, "O").Copy
    Bel.Cells(7, 4).PasteSpecial xlPasteValues
    

    nicht eingefügt sonder die Überschrift aus der angesprochenen Spalte (in diesem Fall "Auftr. Nr"). Wenn ich das Makro allerdings über F5 ausführe oder per F8 durchlafe klappt alles ganz normal. Nur über den Button klappt es nicht. Hab schonmal alles neu eingefügt und auch neu gestartet aber der Fehler ist weiterhin. Hat jemand eine Idee von euch?
    Anzeige
    AW: VBA-Code
    10.10.2019 09:59:49
    Daniel
    HI
    ich gehe mal davon aus, dass du beim testen von Hand das Blatt Lst selektierst und damit auch die richtige Zelle selektiert ist.
    beim normalen Makrolauf dürfte dann aber wahrscheinlich ein anderes Tabellenblatt das aktive sein und somit ist dann auch die auf diesem Blatt aktive Zelle für das Selection.Row maßgebend und nicht die aktive Zelle von Lst.
    du müsstest hier also vorher Lst selektieren.
    Gruß Daniel
    AW: VBA-Code
    10.10.2019 10:44:16
    Flip
    Das komische ist das ich jetzt beim herumtesten drauf gekommen bin das wenn der Code so aussieht
    'Person
    Lst.Cells(Selection.Row, "I").Copy Bel.Cells(9, 4)
    Lst.Cells(Selection.Row, "M").Copy Bel.Cells(7, 4)
    Lst.Cells(Selection.Row, "L").Copy Bel.Cells(8, 4)
    

    keine Probleme auftreten.
    wenn ich aber
    Lst.Cells(Selection.Row, "I").Copy
    Bel.Cells(9, 4).PasteSpecial xlPasteValues
    Lst.Cells(Selection.Row, "M").Copy
    Bel.Cells(7, 4).PasteSpecial xlPasteValues
    Lst.Cells(Selection.Row, "L").Copy
    Bel.Cells(8, 4).PasteSpecial xlPasteValues
    
    verwende dann kann ich maximal 2 Bereiche kopieren. und dabei ist es egal welchen ich deaktiviere.
    sobald ich alle aktiv lasse fügt er beim letzten immer nur die Beschriftung der Spalte ein und nicht den Wert aus der Zelle echt mysteriös.
    Hier die aktuelle Datei:
    https://www.herber.de/bbs/user/132460.xls
    Anzeige
    AW: VBA-Code
    10.10.2019 10:54:49
    Torsten
    Bei mir nicht. Laeuft sauber durch.
    Keine Ahnung, was bei dir falsch laeuft.
    AW: VBA-Code
    10.10.2019 11:03:55
    Flip
    Ok das ist echt seltsam. Hab jetzt nochmal die Datei von hier geöffnet und bei mir wird in D8 beim Leihbeleg nichts eingetragen über die Schaltfläche. über einen CMD Button klappt es. Keine Ahnung was es da hat. So einen Fehler hatte ich noch nie.
    Könnte man den Code anders schreiben im Bezug auf .PasteSpecial xlPasteValues ?
    AW: VBA-Code
    10.10.2019 11:09:52
    Torsten
    Versuch mal nach jeder Paste Zeile die Markierung aufzuheben unb den Excel Zwischenspeicher zu leeren mit:
    Application.CutCopyMode = False
    

    Vielleicht hilft das.
    Anzeige
    AW: VBA-Code
    10.10.2019 11:15:32
    Flip
    Tatsächlich!! Jetzt geht es!? Hast du eine Ahnung wieso dem so ist? Wieso tritt das ohne .PasteSpecial xlPasteValues nicht auf. Und vorallem wieso klappt es bei dir auch ohne der Zusatzeile?
    AW: VBA-Code
    10.10.2019 11:19:21
    Torsten
    Nicht wirklich. Rechnerleistung vielleicht? Kann ich mir aber auch nicht vorstellen.
    AW: VBA-Code
    10.10.2019 11:23:45
    Flip
    Nein das kann es auf keinen Fall sein. Vielleicht ist wieder irgendein Win10 Update daran Schuld.
    AW: VBA-Code
    10.10.2019 11:37:17
    Flip
    Ich danke dir trotzdem sehr für deine Hilfe!!!
    gerne...
    10.10.2019 11:41:06
    Torsten
    AW: gerne...
    11.10.2019 10:28:22
    Flip
    Hallo Torsten! könntest du mir nochmal helfen?
    Hab das Problem beim kopieren von dem einen in das andere Tabellenblatt das ich bei manchen Artikeln eine mehrzeilige Zelle habe, die Zeilenhöhe wird allerdings nicht beim Leihbeleg übernommen. Wie kann ich nur die jeweilige Zeilenhöhe aus der kopierenden Zelle übernehmen? LG
    Anzeige
    AW: gerne...
    11.10.2019 12:44:23
    Torsten
    Hallo Flip,
    dann muesstest du doch die Formate mitkopieren. Aber das wolltest du ja nicht.
    Eine Moeglichkeit waere, im gesamten benutzten Bereich in der Zieltabelle die Zellattribute auf
    WrapText = True zu setzen nach dem Kopieren.
    Nach dem Muster:
    Worksheets("Sheet1").UsedRange.WrapText = True
    
    Gruss Torsten
    AW: VBA-Code
    09.10.2019 15:09:11
    Flip
    Bekomme allerdings mit "Option Explicit" eine Fehlermeldung bei
    lr = Bel.Cells(Rows.Count, 2).End(xlUp).Row
    

    AW: VBA-Code
    09.10.2019 15:12:07
    Torsten
    weil lr nicht deklariert ist. Schreib oben noch eine Zeile
    Dim lr As Long
    

    Anzeige
    AW: VBA-Code
    09.10.2019 15:23:22
    Flip
    Vielen Dank euch beiden für die schnelle Hilfe!!!

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige