Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1188to1192
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

Werte in erste freie Spalte einfügen

Werte in erste freie Spalte einfügen
Ralf
Hallo miteinander,
ich habe hier eine Mapppe in der ich in einer Tabelle alle Aktuell laufenden Aufträge sehe.
Durch einen Buttonklick komme ich auf die Tabelle des jeweiligen Auftrags (Tabellenname 1 -20).
Hier werden die jeweiligen Schichtleistungen eingegeben und in der Übersichtsseite kummuliert angezeigt.
Mit folgendem Makro wird von der Übersichtsseite nach Beendigung eines Auftrags die jeweiligen Daten des datugehörenden Auftrags gelöscht.
  • 
    Sub Kopie2()
    Mldg = "Sind Sie sicher, dass Sie löschen wollen ?"    ' Meldung definieren.
    Stil = vbYesNo  ' Schaltflächen definieren.
    Titel = "Achtung !!!!"    ' Titel definieren.
    Antwort = MsgBox(Mldg, Stil, Titel, Hilfe, Ktxt)    ' Meldung anzeigen.
    If Antwort = vbYes Then    ' Benutzer hat "Ja" gewählt.
    Sheets("2").Select
    Range("A5:F300").ClearContents
    Sheets("Zusammenf.").Select
    Range("B3:G3").ClearContents
    Sheets("2").Select
    Range("A1").Select
    Else    ' Benutzer hat "Nein" gewählt.
    Text1 = "Dann eben nicht"    ' Operation ausführen.
    End If
    End Sub
    

  • Momentan muss ich noch vor Makrostart die Spalten A2 bis T2 der aktuellen Tabelle (in denen die Leistungswerte des dann abgeschlossenen Auftrags stehen) von Hand ausschneiden und in die erste freie Zeile meiner Archivierungsliste (Tabellenname 'Liste' - Zielbereich auch A - T) einfügen.
    Was muss in das Makro, damit vor dem Löschen die Werte in die erste freie Zeile meiner Liste kopiert werden?
    Denke für einen Profi ist das kein Problem, ich stehe allerdings auf dem Schlauch.
    Vielen Dank im Voraus
    Ralf

    8
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Benutzer
    Anzeige
    AW: Werte in erste freie Spalte einfügen
    08.12.2010 10:55:33
    marcl
    Hallo Ralf,
    hier mal ungetesteter Beitrag
    ' Auftragsblatt muss ausgewählt sein
    activesheet.range("A2:T2").copy
    sheets("Liste").select
    dim zeile as long
    zeile = activesheet.usedrange.rows.count ' findet die letzte verwendete Zeile im Blatt
    cells(zeile+1,1).select
    activesheet.paste
    gruß
    marcl
    AW: Werte in erste freie Spalte einfügen
    08.12.2010 11:12:40
    Ralf
    Hallo marcl,
    danke für deine Antwort.
    Vom Ansatz richtig. Habs folgendermaßen eingebaut:
  • 
    Sub Kopie2()
    Mldg = "Sind Sie sicher, dass Sie löschen wollen ?"    ' Meldung definieren.
    Stil = vbYesNo  ' Schaltflächen definieren.
    Titel = "Achtung !!!!"    ' Titel definieren.
    Antwort = MsgBox(Mldg, Stil, Titel, Hilfe, Ktxt)    ' Meldung anzeigen.
    If Antwort = vbYes Then    ' Benutzer hat "Ja" gewählt.
    Sheets("2").Select
    ActiveSheet.Range("A2:T2").Copy
    Sheets("Liste").Select
    Dim zeile As Long
    zeile = ActiveSheet.UsedRange.Rows.Count ' findet die letzte verwendete Zeile im Blatt
    Cells(zeile + 1, 1).Select
    ActiveSheet.Paste
    Sheets("2").Select
    Range("A5:F300").ClearContents
    Sheets("Zusammenf.").Select
    Range("B3:G3").ClearContents
    Sheets("2").Select
    Range("A1").Select
    Else    ' Benutzer hat "Nein" gewählt.
    Text1 = "Dann eben nicht"    ' Operation ausführen.
    End If
    End Sub
    

  • Nur kopiert er die Formeln an die Stelle. Ich benötige die Werte.
    Hast du noch einen Tip ?
    Gruß Ralf
    Anzeige
    ohjeh, select select select select
    08.12.2010 11:23:18
    Matthias
    Hallo
    zeile = ActiveSheet.UsedRange.Rows.Count ' findet die letzte verwendete Zeile im Blatt
    Cells(zeile + 1, 1).PasteSpecial Paste:=xlValues
    Sheets("2").Range("A5:F300").ClearContents
    Sheets("Zusammenf.").Range("B3:G3").ClearContents
    Das ist zu viel Wirrwarr mit den vielen Select
    Gruß Matthias
    AW: ohjeh, select select select select
    08.12.2010 11:37:09
    Ralf
    Hallo Matthias,
    das sieht ja mal Übersichtlich aus.
    Weiß nur nicht, wo ich es reinpacken soll, da ich z.B. die Tabelle 'Liste' nirgends sehe.
    Gruß Ralf
    na einfach ersetzen ...
    08.12.2010 11:47:14
    Matthias
    Hallo
    Ich habe nur diesen Teil Deines Codes ersetzt
      zeile = ActiveSheet.UsedRange.Rows.Count ' findet die letzte verwendete Zeile im Blatt
    Cells(zeile + 1, 1).Select
    ActiveSheet.Paste
    Sheets("2").Select
    Range("A5:F300").ClearContents
    Sheets("Zusammenf.").Select
    Range("B3:G3").ClearContents
    
    Du brauchst kein Select um Inhalte zu löschen, wenn Du das Tabellen richtig referenzierst.
    also anstatt
      Sheets("2").Select
    Range("A5:F300").ClearContents
    

    eben
     Sheets("2").Range("A5:F300").ClearContents
    
    Bin jetzt weg, Gruß Matthias
    Anzeige
    AW: na einfach ersetzen ...
    08.12.2010 13:57:06
    Ralf
    Vielen Dank Matthias,
    hat soweit geklappt. Nachdem ich noch eine letzte Änderung gemacht habe stehe ich wieder vor Problemen und werde das Projekt wohl doch aufgeben.
    Da ich auch die einzelnen Schichten archivieren will, kopiere ich diese in die Tabelle 'Auswertung'.
    Im Vorfeld weiß ich nicht wieviele Schichten vorhanden sind. Darum habe ich generel 100 Zeilen angesetzt, da ich nicht weiß wie die tatsächliche Anzahl abgefragt wird.
    Soweit klappt alles auch. Nur wird erst bei Zeile 6649 eingefügt, obwohl die erste freie 797 wäre.
    Ich bin ratlos und werde wohl aufgeben.
    Hier der Code:
  • 
    Sub Kopie2()
    Mldg = "Sind Sie sicher, dass Sie löschen wollen ?"    ' Meldung definieren.
    Stil = vbYesNo  ' Schaltflächen definieren.
    Titel = "Achtung !!!!"    ' Titel definieren.
    Antwort = MsgBox(Mldg, Stil, Titel, Hilfe, Ktxt)    ' Meldung anzeigen.
    If Antwort = vbYes Then    ' Benutzer hat "Ja" gewählt.
    Sheets("Zusammenf.").Select
    ActiveSheet.Range("B3:Q3").Copy
    Sheets("Liste").Select
    Dim zeile As Long
    zeile = ActiveSheet.UsedRange.Rows.Count ' findet die letzte verwendete Zeile im Blatt
    Cells(zeile + 1, 1).PasteSpecial Paste:=xlValues
    Sheets("2").Select
    ActiveSheet.Range("A5:Q105").Copy
    Sheets("Auswertung").Select
    Dim zeile1 As Long
    zeile1 = ActiveSheet.UsedRange.Rows.Count ' findet die letzte verwendete Zeile im Blatt
    Cells(zeile1 + 1, 1).PasteSpecial Paste:=xlValues
    Sheets("2").Range("A5:F300").ClearContents
    Sheets("Zusammenf.").Range("B3:G3").ClearContents
    Sheets("Zusammenf.").Select
    Range("B2").Select
    Else    ' Benutzer hat "Nein" gewählt.
    Text1 = "Dann eben nicht"    ' Operation ausführen.
    End If
    End Sub
    

  • Nochmals vielen Dank für deine Unterstützung
    Ralf
    Anzeige
    wirklich aufgeben ? ...
    09.12.2010 23:50:49
    Matthias
    Hallo
    Wenn Du aufgeben willst - bitte, dann tu es. (das ist aber immer die schlechtere Variante)
    Ansonsten könnte ich/man Dir das mit dem UsedRange ja mal erklären.


    Also nimm mal eine neue leere Tabelle.
    Schreibe in A1 einfach mal Hallo
    Schreibe in E10 auch Hallo
    Nun drücke bitte mal Strg +Pos1 - Es wird A1 aktiviert
    Nun drücke bitte mal Strg +Ende - Es wird E10 aktiviert.
    Wenn Du nun den Inhalt aus E10 löschst, könnte man glauben das UsedRange hätte sich geändert.
    Hat es aber nicht!
    Drücke bitte Strg +Pos1 - Es wird A1 aktiviert
    Drücke bitte Strg +Ende - Es wird wieder E10 aktiviert. (obwohl inhaltlich leer).
    UsedRange ist also der Bereich, der bereits benutzt wurde, egal ob Du später Inhalte entfernst.
    Fazit:
    Du mußt also die Zeilen ab dem letzten Eintrag bis Ende komplett löschen und die Datei speichern!
    Dann findet Excel auch die erste freie Zelle in Zeile 797
    Gruß Matthias
    Anzeige
    Copy Destination:=
    08.12.2010 11:11:04
    Matthias
    Hallo Ralf
    probier mal ...
    Code in ein Modul:
    Dim Variable
    Variable = Tabelle2.Cells(Rows.Count, 1).End(xlUp).Row + 1
    Tabelle1.Range("A2:T2").Copy Destination:=Tabelle2.Range("A" & Variable)
    
    Tabelle2 ist Deine Tabelle mit dem RegisterNamen "Liste"
    Gruß Matthias

    341 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige