Autor
|
Thema: Mehrere Zellen in neuer Datei&/Tabellenblatt ausgeben (1210 mal gelesen)
|
Phildi Mitglied Student
Beiträge: 4 Registriert: 25.07.2012
|
erstellt am: 25. Jul. 2012 14:23 <-- editieren / zitieren --> Unities abgeben:
Hallo an alle Experten, ich bin Student und versuche gerade für ein Projekt eine Datenbank zu erstellen. Dabei möchte ich eine Analyse programmieren. Ich möchte, dass Datensätze(jeder 9 Spalten lang) in eine neue Exceldatei kopiert werden. Dazu habe ich mal folgendes Makro erstellt: Public Sub Zeilen2() Dim i As Integer Dim cell As Range i = 1 For Each cell In Tabelle1.Range("H:H") If Not cell Is Nothing Then If cell.Value = "Hoch" Then cell.EntireRow.Copy Destination:=Tabelle2.Rows(i) i = i + 1 End If End If Next cell End Sub Jetzt habe ich zwei Probleme. 1. Was muss ich bei der Definition der Destination beachten? Ich bekomme es nicht gebacken, dass ich die Datensätze in eine andere Datei bekomme 2. Das Makro funktioniert (wie oben geschrieben) fast einwandfrei auf ein neues Tabellenblatt in der selben Datei. Allerdings habe ich im Asugabeblatt die ersten drei Zeilen für Überschriften geblockt und fixiert. Die Datensätze werden jedoch jedesmal über den Unterschriften ausgegeben und nicht darunter. Freue mich wenn mir jemand dazu einen Tipp geben kann. Danke schon mal für die Beiträge Grüße Phildi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 25. Jul. 2012 16:41 <-- editieren / zitieren --> Unities abgeben: Nur für Phildi
Hallo und Willkommen auf CAD.de , zu 1): Guck' mal, ob Du anstelle von Code: cell.EntireRow.Copy Destination:=Tabelle2.Rows(i)
mitCode: cell.EntireRow.Copy Paste...#NeueMappeNeuesRegister
und ggf. der Hilfe weiterkommst? zu 2) Naja, Dein i ist eins, also geht es auch beim Einfügen in der ersten Zeile los, egal, was da drin steht. Eine Möglichkeit wäre, für das Einfügen den Zähler um die Anzahl der belegten Zeilen im Zielregister zu erhöhen, also ...Tabelle2.Rows(i+3)Allerdings bin ich mir unsicher, ob dann nicht am Ende aller Zeilen ein Fehler geworfen wird... [Tante Edit: "+3" im "i" ergänzt - Danke, Beverly! /Edit] ------------------ DIN1055.de | Lastannahmen für Anwender [Diese Nachricht wurde von Paulchen am 26. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 26. Jul. 2012 09:39 <-- editieren / zitieren --> Unities abgeben: Nur für Phildi
|
Phildi Mitglied Student
Beiträge: 4 Registriert: 25.07.2012
|
erstellt am: 26. Jul. 2012 12:09 <-- editieren / zitieren --> Unities abgeben:
Danke euch beiden für die Tipps... Ich beschäftige mich erst seit ein paar Tagen mit Visual Basic und lerne jetzt zwar immer mehr ... aber es dauert auch seine Zeit Ich habe eure Hinweise mal eingearbeitet ... Habe jetzt aber nen Laufzeitfehler9... Allerdings ist doch mein Index i.o. ! Hab hier nochmal den Code:
Code: Public Sub Zeilen2() Dim i As Integer Dim cell As Range i = 1 For Each cell In Tabelle1.Range("H:H") If Not cell Is Nothing Then If cell.Value = "Hoch" Then cell.EntireRow.Copy Destination:=Workbooks("Themen_Priorität HOCH.xlsx").Tabelle2.Rows(1) i = i + 1 End If End If Next cell End Sub
Kann es vielleicht auch sein, dass ich Daten aus einem xls.-Datei nicht in eine xlsx-Datei übertragen kann??? Ich arbeite nämlich mit den unterschiedlichen Formaten. LG Phildi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Paulchen Mitglied Bauing./SW-Entwickler
Beiträge: 1227 Registriert: 19.08.2004 Büro: Win10 Enterprise 64bit, Office Professional Plus 2013 - Privat: Linux Mint 15, LibreOffice
|
erstellt am: 26. Jul. 2012 13:12 <-- editieren / zitieren --> Unities abgeben: Nur für Phildi
|
Phildi Mitglied Student
Beiträge: 4 Registriert: 25.07.2012
|
erstellt am: 26. Jul. 2012 16:03 <-- editieren / zitieren --> Unities abgeben:
Danke für die Hinweise Paul ... ich habe jetzt einfach nochmal von Vorne angefangen und habe festgestellt, dass die Laufzeitfehler(jetzt 438) dann auftauchen wenn ich bei als Ausgabeziel folgendes angebe: Code: cell.EntireRow.Copy Destination:=Workbooks("Themen_Prioritaet_HOCH.xlsm").Tabelle2.Rows(i + 4)
Lasse ich als Ziel ein einfaches Tabellenblatt in der gleichen Datei funktioniert das Ding einwandfrei. Ich habe jetzt nochmal ne google-Recherche gemacht aber komme zu keiner Lösung. P.S. Die Dateitypen habe ich inzwischen auf gleiches Format angepasst. Fällt euch noch was ein?!? Grüße Phildi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 26. Jul. 2012 16:20 <-- editieren / zitieren --> Unities abgeben: Nur für Phildi
Hi Phil, meines Wissens kann man nicht so ohne Weiteres auf den Codenamen aus einer anderen Arbeitsmappe referenzieren - das geht nur über einen Umweg. Versuche es mal so:
Code: Public Sub Zeilen2() Dim i As Integer Dim rngZelle As Range Dim wksTab As Worksheet i = 1 With Workbooks("Themen_Priorität HOCH.xlsx") For Each wksTab In .Worksheets If wksTab.CodeName = "Tabelle2" Then Exit For Next wksTab End With For Each rngZelle In Tabelle1.Columns("H:H").SpecialCells(xlCellTypeConstants) If rngZelle = "Hoch" Then rngZelle.EntireRow.Copy Destination:=wksTab.Rows(i + 3) i = i + 1 End If Next rngZelle End Sub
Es spielt keine Rolle, welche Dateiendung de Zielarbeitsmappe hat.------------------ Bis später, Karin [Diese Nachricht wurde von Beverly am 26. Jul. 2012 editiert.] [Diese Nachricht wurde von Beverly am 26. Jul. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Phildi Mitglied Student
Beiträge: 4 Registriert: 25.07.2012
|
erstellt am: 27. Jul. 2012 09:45 <-- editieren / zitieren --> Unities abgeben:
Hey Karin, danke für die Info ... hatt ein bisschen gedauert bis ich durch deinen Code durchgestiegen bin ;-) die Mühen eines Anfängers eben. Hab ihn aber auch mal ausprobiert und es kommen auch keine Fehlermeldungen mehr aber ansonsten passiert nichts. Beide Files geöffnet, Makros aktiviert, Code im Tabellenblatt mit den Ausgangsdaten hinterlegt, ... Was mach ich nur falsch Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 27. Jul. 2012 15:14 <-- editieren / zitieren --> Unities abgeben: Nur für Phildi
Hi Phil, weshalb den Code im Tabellenblatt? Von allein passiert da doch nichts, irgendwie muss der Code ja angestoßen werden - z.B. durch das Worksheet_Change-Ereignis des Tabellenblattes. So wie der der Code jetzt ist, müsste er in einem allgemeinen Modul stehen und über die Makroauswahl gestartet werden. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |