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

Alle Daten der Tabelle kopieren

Alle Daten der Tabelle kopieren
20.07.2015 01:05:34
Martina
Liebes Forum,
seit Tagen suche ich eine kleine Prozedur und finde nix, obwohl es so einfach ist...bin leicht verzweifelt! Alle gefundenen Beispiele hatten immer Bedingungen, die ich in der Form nicht habe.
Möchte alle bisher erfaßten Daten-ohne die Überschrift- einer Tabelle kopieren und in anderer Tabelle unten, in erster freien Zeile ab Spalte P einfügen.
Tabelle "Quelle" hat Überschriften von B7 : L7 (Zeilen darüber und Spalte A ohne Daten)
Darunter befinden sich eingegebene Daten (unterschiedl. viele Zeilen)
Diese Daten möchte ich kopieren und in...
Tabelle "Ziel" ab 1. leerer Zelle ab Spalte P einfügen.
(zu deutsch: alle Daten aus "Quelle" in "Ziel" unten anfügen)
Jeden Monat gibt's neue Daten, die ich per Makro in Tab"Ziel" unten hinzufügen möchte.
Mein Makro kopiert alle Daten von Zeile 8 ab Spalte A(!) bis "unendlich" und ich will diese in Tab."Ziel" einfügen:

Sub MarkierenAbZeile8()
Sheets("Quelle").Activate
Range(Range("B8"), _
Range("B8").End(xlDown)).EntireRow.Select
End Sub 

Wenn ich die kopierten Daten (per Hand/ohne Makro)in z.B. ab P448 einfügen möchte,
dann kommt Fehlermeldung, "..da der Bereich Kopieren und der Bereich zum Einfügen  _
unterschiedliche Formen und Größen haben".
Warum, habe ich verstanden (Zeile ab A passt nicht in Zeile ab P), aber keine Idee, wie ich das  _
_
_
_
mit dem Kopieren ab Spalte B machen soll und vor allem nur bis Spalte L !
Hiiilfe!!
Frage1:warum kopiert mein Makro alle Daten ab Spalte A obwohl ich Range B8 angegeben habe?
Frage2: wie Einfügen, um die Zielformatierung zu behalten?
Frage3: kann jmd. mein Problem besser lösen? Falls ja, könntet Ihr mit Kommentar hinzufügen,  _
was die Befehle bewirken, ich möchte das gern verstehen und lernen?
Das wäre echt nett!!
Vielleicht erbarmt sich ja jemand?
Herzlichen Dank, Martina

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
willst Du kopieren oder markieren?
20.07.2015 03:39:14
Matthias
Hallo Martina
Zitat
Mein Makro kopiert alle Daten von Zeile 8 ab Spalte A(!) bis "unendlich"
Dein Makro kopiert nichts. Du markierst nur einen Bereich. Zum Kopieren benutzt man Copy
Das Du Alles markierst liegt am ...EntireRow.Select
Willst Du nur von B8 bis L(letztebeschriebene Zelle dieserSpalte) kopieren, versuche es so:

Option Explicit
Sub Kopiere()
Dim Loletzte&
With Worksheets("Quelle")
Loletzte = .Cells(.Rows.Count, 12).End(xlUp).Row
If Loletzte > 8 Then .Range("B8:L" & Loletzte).Copy
End With
Worksheets("Ziel").Range("P448").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
Zitat: Frage2: wie Einfügen, um die Zielformatierung zu behalten?
xlPasteValues fügt nur Inhalte ein
Gruß Matthias

Anzeige
kleine Korrektur ...
20.07.2015 10:44:56
Matthias
Hallo
If Loletzte > 7 Then ...
muss es natürlich heißen.
Bitte die 8 im Code auf 7 ändern.
Gruß Matthias

AW: kleine Korrektur ...
20.07.2015 11:11:56
Werner
Hallo Matthias,
es liegt mir ja fern deine Lösung anzuzweifeln aber Ziel soll doch die erste freie Zelle in Spalte P sein.
Option Explicit
Sub Kopiere()
Dim Loletzte&
Dim Loletzte1&
With Worksheets("Quelle")
Loletzte = .Cells(.Rows.Count, 12).End(xlUp).Row
If Loletzte > 7 Then .Range("B8:L" & Loletzte).Copy
End With
With Worksheets("Ziel")
Loletzte1 = .Cells(.Rows.Count, 16).End(xlUp).Row + 1
.Cells(Loletzte1, 16).PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False
End Sub
Geht doch dann so oder?
Gruß Werner

Anzeige
klar kann man das so machen ...
20.07.2015 11:35:30
Matthias
Hallo Werner, klar kann man das so machen ...
war aber nicht Ziel meiner Antwort.
Zitat
Warum, habe ich verstanden (Zeile ab A passt nicht in Zeile ab P), aber keine Idee, wie ich das _
_
_
_
mit dem Kopieren ab Spalte B machen soll und vor allem nur bis Spalte L !
Hiiilfe!!
Frage1: warum kopiert mein Makro alle Daten ab Spalte A obwohl ich Range B8 angegeben habe?
Frage2: wie Einfügen, um die Zielformatierung zu behalten?

Mein Ziel war es Frage1 und Frage2 zu beantworten. Das habe ich getan.
Das man die erste freie Zelle der Spalte(16) im Zielregister genauso ermitteln kann
dachte ich, ist selbsterklärend.
Gruß Matthias

Anzeige
AW: klar kann man das so machen ...
20.07.2015 16:54:21
Martina
Hallo Matthias, hallo Werner,
vielen Dank für Eure Hilfe, echt SUPER!!!!
Ich hatte vergessen, die E-Mail-Benachrichtigung einzustellen, sonst wäre ich schneller gewesen.
@ Matthias: stimmt, habe falsches Makro kopiert sollte natürlich copy statt activate heißen
Werde die Umsetzung ausprobieren und melde mich schnellstens!
Nochmals DANKE!!
Martina

Rückmeldung
21.07.2015 11:21:08
Martina
Hallo Matthias, hallo Werner,
habe die Version von Matthias und den 2. Teil von Werner bei mir getestet: funkt. phantastisch!
@ Matthias: bin noch neu im VBA-Geschäft, deshalb ist "selbsterklärend" zwar richtig, hätte mir aber noch Probleme gemacht.
Vielen Dank auch für die Beantwortung meiner beiden Fragen, hat ein AHA gebracht :-)
Das Makro funkt. wenn ich beide Tabellen (Quelle/Ziel) in der gleichen Arbeitsmappe habe.
Frage:
Wie kann ich vorgehen, wenn die Daten in 2 verschiedenen Dateien stehen?
Leider kann ich nur den Namen der Zieldatei nennen, weil das meine eigene ist: "Datenbank.xlsm"
Die Quelldatei hat jedes Mal einen anderen Namen *.xls oder .xlsx(kommt vom Kunden).
Als Lösung könnte ich vielleicht eine MsgBox voranstellen, welche den User auffordert, die Quelldatei zu öffnen und erst dann (wenn beide Dateien geöffnet) das Makro zu aktivieren!?
Allerdings weiß ich nicht, was ich danach machen soll, damit Excel erkennt, was die Quelldatei ist, aus welcher er die Daten ausliest? Vielleicht: das Tabellenblatt aus der Quelldatei hat den Codenamen "Tabelle1". (Bei Zieldatei: "ABC")
Wenn das noch nicht ausreicht, könnte man evtl. noch eine weitere Useraktion abfragen (MsgBx)?
Habt Ihr eine Idee?
Vielen Dank für Eure Tipps, so lernt man doch am Besten, weil ich mich mit der Bedeutung Eures Codes auseinandersetzen muß!
Martina

Anzeige
Geht nicht bei 2 verschiedenen Dateien!
22.07.2015 23:30:12
Martina
könnt ihr mir nochmal helfen?
Siehe Beitrag Rückmeldung!
Vielen Dank!
Martina

AW: Prüfen ob Datei bereits geöffnet
23.07.2015 10:05:13
Werner
Hallo Martina,
da bin ich leider der falsche Ansprechpartner. Meine Kenntnisse in Sachen VBA würde ich da wohl eher als Basiswissen bezeichnen wollen.
Zudem sehe ich bei deiner Frage das Problem, dass der Name der Datei, bei der geprüft werden soll ob sie bereits offen ist, sich ständig ändert.
Die einzige Möglichkeit die ich da sehe ist, eine Eingabebox vorzuschalten in der der jeweilige Nutzer den Dateinamen einträgt und anschließend dann geprüft wird, ob diese Datei bereits offen ist oder nicht. Aber wie gesagt, da reichen meine Kenntnisse nicht aus um dir weiter zu helfen.
Ich stell den Beitrag mal offen, vielleicht nimmt sich ja ein Kenner der Materie des Problems an.
Gruß Werner

Anzeige
AW: Geht nicht bei 2 verschiedenen Dateien!
23.07.2015 23:37:41
Matthias
Hallo
Allerdings weiß ich nicht, was ich danach machen soll, damit Excel erkennt, was die Quelldatei ist, aus welcher er die Daten ausliest?
Die Datei in der Dein Code steht hat doch ein "FullName".
Mit Thisworkbook.FullName kannst Du prüfen ob es Ziel oder Quelldatei ist


msgbox Thisworkbook.FullName 'das wäre Deine Zieldatei
Userbild
Somit weißt Du was ist Quell- und was ist Zieldatei.
Deine Zieldatei hat ja immer den gleichen Namen, bzw. Pfad
Gruß Matthias

Anzeige
AW: Problem mit deiner Lösung
24.07.2015 15:03:18
Martina
Hallo Mathhias,
Danke, dass du dich noch mal gemeldet hast!
Bestimmt hast du auch mal am Anfang gestanden, wie ich. Momentan kann ich verstandeswegen deine Antwort überhaupt nicht unterbringen.
(ich denke: ThisWorkbook kommt doch gar nicht in deinem Code vor? oder: soll das Makro unterwegs mal prüfen, welche Datei gerade gemeint ist?...sicher hast du das nicht so gemeint, wollte nur verständlich machen, dass ich sicher nicht das verstehe, was du mir mitteilen möchtest.)
Deshalb nochmal ganz von vorne:
Ich hatte dein Makro ausprobiert. Das funktionierte nur, wenn ich beide Arbeitsblätter in der (Quell-)Datei hatte, in welcher ich das Makro eingebaut hatte.
Dort spreche ich mit deinem Makro doch beide Tabellenblätter an [with worksheets("Quelle")]
Bei meiner Problematik geht es doch an dieser Stelle erstmal um ein workbook oder? (Quelldatei)!
müßte Excel nicht zur Quelldatei wechseln, dort die loletzte kopieren und dann wieder zur bekannten ZielDATEI wechseln und dort die Zeilen loletzte1 einfügen? (siehe deine Variablen).
Oder verstehe ich das Ganze vollkommen falsch? Wenn ja, könntest du mir bitte sagen, ob dein obiges Makro in meinem Fall funktioniert? Ich bekomme das nicht hin.
Leider bin ich auch noch nicht in der Lage, irgendwas zu prüfen.., weil mir die Befehle noch nicht so geläufig sind. Vielleicht habe ich mich in meiner Beschreibung des Ablaufs, für den ich eine Prozedur benötige (s. gaanz oben) auch falsch ausgedrückt?
Danke im voraus für deine Geduld!!
Martina

Anzeige
hier ein Link
25.07.2015 06:45:16
Matthias
Hallo
Zitat:
ThisWorkbook kommt doch gar nicht in deinem Code vor
Richtig. In Deiner Ausgangsfrage war auch nicht die Rede von 2 Dateien.
Bemühe bitte das Archiv um weitere Hilfe zu erhalten.
Ich weiß nicht wie ich eine Datei mit unbekannten Namen öffnen soll
Evtl. hilft Dir dieser Beitrag:
https://www.herber.de/forum/archiv/1156to1160/1159871_Datei_oeffnen.html
Gruß Matthias

AW: Alle Daten der Tabelle kopieren
25.07.2015 08:35:51
Sepp
Hallo Martina,
mit dem folgenden Code, er gehört in deine Mappe in der du die Daten sammeln willst, sollte es klappen.
Die Quell-Datei kannst du per Dialog auswählen.
Bitte vorher noch die Tabellennamen anpassen!
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub copyData()
  Dim objWB As Workbook, objSH As Worksheet, rng As Range
  Dim strFile As String
  Dim lngLast As Long, lngNext As Long
  Dim bolOpen As Boolean
  
  On Error GoTo ErrExit
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlManual
    .DisplayAlerts = False
  End With
  
  With Application.FileDialog(msoFileDialogFilePicker)
    .InitialFileName = "E:\Forum" 'Startverzeichnis
    .Title = "Datei auswählen"
    .ButtonName = "Auswahl..."
    .InitialView = msoFileDialogViewList
    If .Show = -1 Then strFile = .SelectedItems(1)
  End With
  
  If strFile <> ThisWorkbook.FullName Then
    If Len(strFile) Then
      For Each objWB In Application.Workbooks
        If objWB.FullName = strFile Then
          bolOpen = True
          Exit For
        End If
      Next
      
      If objWB Is Nothing Then Set objWB = Workbooks.Open(strFile)
      
      Set objSH = ThisWorkbook.Sheets("Tabelle1") 'Tabellenname der Ziel-Tabelle anpassen!
      
      With objWB.Sheets("Tabelle2") 'Tabellenname der Quell-Tabelle anpassen!
        lngLast = Application.Max(8, .Cells(.Rows.Count, 2).End(xlUp).Row)
        lngNext = objSH.Cells(objSH.Rows.Count, 16).End(xlUp).Row + 1
        
        Set rng = .Range(.Cells(8, 2), .Cells(lngLast, 12))
        
        objSH.Cells(lngNext, 16).Resize(rng.Rows.Count, rng.Columns.Count) = rng.Value
      End With
      If Not bolOpen Then objWB.Close True
    End If
  End If
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'copyData'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Prozedur - copyData"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = xlAutomatic
    .DisplayAlerts = True
    .StatusBar = False
  End With
  
  Set objSH = Nothing
  Set objWB = Nothing
End Sub


Gruß Sepp

Anzeige
AW: Alle Daten der Tabelle kopieren
25.07.2015 11:34:05
Werner
Hallo Sepp,
das ist ja mal wieder ein typischer "Sepp" - ich habe es gerade ausprobiert, funktioniert super. Wieder etwas gelernt. Auf den Weg über den File-Dialog hätte ich eigentlich auch kommen können. Aber selbst wenn, hätte es bei mir an der Umsetzung gehapert.
Interessehalber ne Nachfrage: Der Code öffnet ja über den File-Dialog die Quell Datei, kopiert die Daten und schließt die Quell Datei wieder. Es funktioniert ja auch, wenn die Quell Datei schon offen sein sollte, allerdings wird die Quell Datei nicht geschlossen wenn sie beim Start des Makros schon offen war. Wie ließe es sich dahingehend ändern, dass die Quell Datei in jedem Fall wieder geschlossen wird, auch wenn sie bei Ausführen des Codes schon offen war.
Nur aus eigenem Interesse.
Gruß Werner

Anzeige
AW: Alle Daten der Tabelle kopieren
25.07.2015 13:31:35
Sepp
Hallo Werner,
dazu einfach die Variable bolOpen und die entsprechende Abfrage weglassen.
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub copyData()
  Dim objWB As Workbook, objSH As Worksheet, rng As Range
  Dim strFile As String
  Dim lngLast As Long, lngNext As Long
  
  On Error GoTo ErrExit
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlManual
    .DisplayAlerts = False
  End With
  
  With Application.FileDialog(msoFileDialogFilePicker)
    .InitialFileName = "E:\Forum" 'Startverzeichnis
    .Title = "Datei auswählen"
    .ButtonName = "Auswahl..."
    .InitialView = msoFileDialogViewList
    If .Show = -1 Then strFile = .SelectedItems(1)
  End With
  
  If strFile <> ThisWorkbook.FullName Then
    If Len(strFile) Then
      For Each objWB In Application.Workbooks
        If objWB.FullName = strFile Then Exit For
      Next
      
      If objWB Is Nothing Then Set objWB = Workbooks.Open(strFile)
      
      Set objSH = ThisWorkbook.Sheets("Tabelle1") 'Tabellenname der Ziel-Tabelle anpassen!
      
      With objWB.Sheets("Tabelle2") 'Tabellenname der Quell-Tabelle anpassen!
        lngLast = Application.Max(8, .Cells(.Rows.Count, 2).End(xlUp).Row)
        lngNext = objSH.Cells(objSH.Rows.Count, 16).End(xlUp).Row + 1
        
        Set rng = .Range(.Cells(8, 2), .Cells(lngLast, 12))
        
        objSH.Cells(lngNext, 16).Resize(rng.Rows.Count, rng.Columns.Count) = rng.Value
      End With
      objWB.Close True
    End If
  End If
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'copyData'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Prozedur - copyData"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = xlAutomatic
    .DisplayAlerts = True
    .StatusBar = False
  End With
  
  Set objSH = Nothing
  Set objWB = Nothing
End Sub


Gruß Sepp

AW: THX
25.07.2015 13:43:40
Werner
Hallo Sepp,
danke dir.... und wieder etwas dazu gelernt. Mühsam ernährt sich das Eichhörnchen.
Gruß Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige