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

befüllte Zeilen kopieren und speichern

befüllte Zeilen kopieren und speichern
donimuc
Hallo Profis,
Sepp und Bernd waren hier so super nett um mich bei folgendem Befehl zu unterstützen!
Danke nochmals dafür!
Nun hätte ich aber noch eine Frage/Bitte - wer kann mir da weiterhelfen?
Im besagten Beispiel kopiert mir der Befehl immer den Zellenbereich B2:AB20! Wie müsste ein Befehl lauten der mir nur beschriebene Zellen im Bereich B2:AB300 kopiert?
Also nur Zellen kopieren, die innerhalb dieser Zeilen auch Werte enthalten!
Es könnte ja sein, dass ich mehr als Zeile 20 befülle oder auch weniger! Also immer nur die Zeilen die befüllt sind!
Wer weiß Rat?
Hier noch der bisherige Befehl:
Option Explicit
Sub copyData()
Dim objWB As Workbook
Dim strFile As String
Dim bolOpen As Boolean
Dim lngCalc As Long
On Error GoTo ErrExit
With Application
.ScreenUpdating = False
.EnableEvents = False
lngCalc = .Calculation
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
strFile = "E:\Pfad\Tool.xls" 'Pfad zur Datei - Anpassen!
For Each objWB In Application.Workbooks
If objWB.FullName = strFile Then Exit For
Next
If objWB Is Nothing Then
bolOpen = True
Set objWB = Workbooks.Open(strFile)
End If
With objWB
ThisWorkbook.Sheets("Daten").Range("B2:AB20").Copy _
.Sheets("Final").Range ("B2")
.Save
If bolOpen Then .Close
End With
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 Modul - Modul1"
.Clear
End If
End With
On Error GoTo 0
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = lngCalc
.DisplayAlerts = True
End With
Set objWB = Nothing
End Sub
Danke für alle die helfen wollen/können!
Doni
AW: befüllte Zeilen kopieren und speichern
23.01.2012 19:49:20
Dirk
Hallo Doni
Ich würd mal Probieren
ThisWorkbook.Sheets("Daten").Range("B2:AB20").Copy _
durch
ThisWorkbook.Sheets("Daten").Range("I6", Range("I6").End(xlDown)).Copy _

auszutauschen
du darst dann nur keine leeren Zellen dazwischen haben
Gruß
Dirk
AW: befüllte Zeilen kopieren und speichern
23.01.2012 20:13:49
donimuc
Hallo Dirk,
habe ich probiert! Funktioniert aber nicht.
Bekomme die Meldung:
Fehler beim Kompilieren
Syntaxfehler!
Außerdem markiert er die Zeile darunter:
(.Sheets("Final").Range("B6"))
rot!
Gruß,
Doni
Anzeige
AW: befüllte Zeilen kopieren und speichern
23.01.2012 20:25:04
donimuc
So, habe das Ganze nohmal wiederholt - Fehlermeldung:
Fehler in Prozedur ´copyData`
Fehlernummer: 1004
Beschreibung: Anwendungs oder objektdefinierter Fehler
Wer weiß Rat?
Danke,
Doni
AW: befüllte Zeilen kopieren und speichern
23.01.2012 20:47:17
Dirk
Hallo Doni poste bitte nochmal den Code das klingt so als hättest du den Falsch eingegeben
so sollte der eigendlich aussehn kann ihn aber leider nicht testen
Sub copyData()
Dim objWB As Workbook
Dim strFile As String
Dim bolOpen As Boolean
Dim lngCalc As Long
On Error GoTo ErrExit
With Application
.ScreenUpdating = False
.EnableEvents = False
lngCalc = .Calculation
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
strFile = "E:\Pfad\Tool.xls" 'Pfad zur Datei - Anpassen!
For Each objWB In Application.Workbooks
If objWB.FullName = strFile Then Exit For
Next
If objWB Is Nothing Then
bolOpen = True
Set objWB = Workbooks.Open(strFile)
End If
With objWB
ThisWorkbook.Sheets("Daten").Range("I6", Range("I6").End(xlDown)).Copy _
.Sheets("Final").Range ("B2")
.Save
If bolOpen Then .Close
End With
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 Modul - Modul1"
.Clear
End If
End With
On Error GoTo 0
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = lngCalc
.DisplayAlerts = True
End With
Set objWB = Nothing
End Sub

Anzeige
AW: befüllte Zeilen kopieren und speichern
23.01.2012 20:55:20
JoWe
ein leerzeichen zuviel:
.Sheets("Final").Range ("B2")
AW: befüllte Zeilen kopieren und speichern
23.01.2012 21:07:20
donimuc
Hallo JoWe,
habe ich geändert - bringt auch nichts! :-(
Außerdem landet er in Zelle B4 abernicht B6!!!
Gruß,
Doni
AW: befüllte Zeilen kopieren und speichern
23.01.2012 21:01:19
donimuc
Hallo Dirk,
hier der Code:
Sub copyData()
Dim objWB As Workbook
Dim strFile As String
Dim bolOpen As Boolean
Dim lngCalc As Long
On Error GoTo ErrExit
With Application
.ScreenUpdating = False
.EnableEvents = False
lngCalc = .Calculation
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
strFile = "C:\Users\Doni\Desktop\tool.xlsm"
For Each objWB In Application.Workbooks
If objWB.FullName = strFile Then Exit For
Next
If objWB Is Nothing Then
bolOpen = True
Set objWB = Workbooks.Open(strFile)
End If
With objWB
ThisWorkbook.Sheets("Auswertung").Range("I6", Range("I6").End(xlDown)).copy _
.Sheets("Final").Range ("B6")
.Save
If bolOpen Then .Close
End With
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 Modul - Modul1"
.Clear
End If
End With
On Error GoTo 0
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = lngCalc
.DisplayAlerts = True
End With
Set objWB = Nothing
End Sub
Habe das Blatt umbenannt, statt Daten, Auswertung und die Zielzelle ist B6. Ansonsten alles gleich!
Er öffnet die Datei "tool", kopiert aber nichts rein. Und es erscheint die Gleiche Meldung wieder:
Fehler in Prozedur ´copyData`
Fehlernummer: 1004
Beschreibung: Anwendungs oder objektdefinierter Fehler
Weiß nicht weiter!!
Gruß,
Doni
Anzeige
AW: befüllte Zeilen kopieren und speichern
24.01.2012 07:55:23
Dirk
Ok jetzt hab ich auch erstmal ein Fragezeichen über dem Kopf
Kannst du mal eine Datei mit daten und deine Tools hochladen?
gruß
Dirk
AW: befüllte Zeilen kopieren und speichern
24.01.2012 14:34:14
donimuc
Hier die Zieldatei!
Wie gesagt - Wunsch wäre das Daten die im Zellenbereich B6:AB300 stehen in die Datei Tool, Blatt Final kopiert werden. Aber nur Zeilen die im Blatt Auswertung wirklich beschrieben wurden!
Es gibt keine Leerzeilen!
Hier noch die Zieldatei:
https://www.herber.de/bbs/user/78581.xlsm
Danke und Gruß,
Doni
Anzeige
AW: befüllte Zeilen kopieren und speichern
24.01.2012 15:16:13
fcs
Hallo Doni,
dadurch, dass das Blatt "Daten" während der Makroausführung in der Copy-Zeile ggf. nicht das aktive Blatt ist, kommt der Objekt-Fehler, da
Range("I6").End(xlDown)
eine Zelle im aktiven Blatt sucht.
Hier muss man etwas sauberer mit den Objekt-Bezügen arbeiten.
Ich hab es jetzt so gelöst, dass im Bereich zunächst die letzte Zelle mit Daten gesucht wird. Dann wird kopiert.
Gruß
Franz
Sub copyData()
Dim objWB As Workbook
Dim strFile As String
Dim bolOpen As Boolean
Dim lngCalc As Long
Dim ZelleLetzte As Range
On Error GoTo ErrExit
With Application
.ScreenUpdating = False
.EnableEvents = False
lngCalc = .Calculation
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
strFile = "E:\Pfad\Tool.xls" 'Pfad zur Datei - Anpassen!
For Each objWB In Application.Workbooks
If objWB.FullName = strFile Then Exit For
Next
If objWB Is Nothing Then
bolOpen = True
Set objWB = Workbooks.Open(strFile)
End If
With ThisWorkbook.Sheets("Daten")
With .Range("B2:AB2000")
Set ZelleLetzte = .Find(what:="*", after:=.Range("A1"), LookIn:=xlValues, _
lookat:=xlWhole, searchdirection:=xlPrevious)
End With
If ZelleLetzte Is Nothing Then
MsgBox "Keine Daten zum Kopieren vorhanden"
Else
.Range(.Range("B2"), .Range("AB" & ZelleLetzte.Row)).Copy _
Destination:=objWB.Sheets("Final").Range("B2")
End If
End With
With objWB
.Save
If bolOpen Then .Close
End With
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 Modul - Modul1"
.Clear
End If
End With
On Error GoTo 0
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = lngCalc
.DisplayAlerts = True
End With
Set objWB = Nothing
End Sub

Anzeige
AW: befüllte Zeilen kopieren und speichern
24.01.2012 16:51:41
Dirk
@fcs
Schönes Makro
wenn Doni jetzt noch das Tabellenblatt richtig angibt läuft das auch :-D
du hast ja über
searchdirection:=xlPrevious

den letzten eintrag eingelesen
den kannte ich noch garnicht
gibt es einen "Katalog" wo wann die nachschlagen kann und wofür die stehen?
Gruß
Dirk
AW: befüllte Zeilen kopieren und speichern
24.01.2012 18:26:20
donimuc
Danke für eure Hilfe!
Werde das gleich mal ausprobieren!!!!!
Gruß an alle die geholfen haben!!!!!! :-)
Doni
Konstanten von Parametern in Methoden/Funktionen
25.01.2012 11:00:17
Parametern
Hallo Dirk,
es gibt mehrere Wege, um die in Excel-VBA möglichen Werte von Parametern mit Konstanten herauszufinden.
1. VBA-Hilfe zu den jeweiligen Funktionen/Methoden aufrufen, ggf. weiteren Links folgen
2. Im VBA-Editor unter Ansicht den Objektkatalog anzeigen
2.1 Suchbegriff eingeben, z.B.; Find
2.2 Falls erfordrlich unter den Suchergebnissen und/oder den Elementen zum Suchergebnis passenden Eintrag wählen.
2.3 Zu dem gewählten Element wird unten in einem separaten Bereich die Syntax mit den Parametern angezeigt.
2.4 Zur Anzeige der möglichen Werte für die Parameter entweder auf den Link klicken (leider nicht immer vorhanden) oder den Parameter kopieren und als neuen Suchbegriff eingeben.
2.5 In der Elemente-Liste werden die Konstanten angezeigt. Durch Auswahl eines Elements kann man den zugehörigen nummerischen Wert anzeigen. Die nummerischen Werte sind zum Beispiel erforderlich, wenn man Excel von einer anderen Anwendung aus ansteuert und den Verweis auf die Excel-Objekt-Bibliothek nicht vorabsetzen möchte.
3. Irgendein dickes Excel-VBA-Handbuch (typischer Weise 3 bis 6 cm im Buchregal)
Kann da aber nichts aktuelles empfehlen; meine letzte Anschaffung in dieser Richtung bezieht sich noch auf Excel 4.0 mit 5 1/4" Begleitdiskette.
4. Sauberes Programmieren in Verbindung mit der entsprechenden Option im VBA-Editor
Userbild
Wenn der VBA-Editor das Objekt, auf das eine Methode oder Eigenschaft angewendet werden soll, eindeutig erkennen kann, dann werden nach Eingabe des nachfolgenden Punktes die zulässigen Methoden/Eigenschaften als Auswahlliste angezeigt. Hat die Methode/Eigenschaft Parameter, dann werden diese nach Eingabe eines Leerzeichens/einer öffnenden Klammer angezeigt. Gibt man nach Eintippen eines Parameters mit Konstanten als mögliche Werte das ":=" ein, dann wird automatisch eine Auswahlliste der zulässigen Werte angezeigt. Man kann das ":=" übrigens auch löschen und neu eintippen, um die Auswahlliste anzuzeigen.
Leider funktioniert diese Methode nicht immer, aber immer öfter ;-)
Ich arbeite deshalb fast immer mit entsprechend deklarierten Objektvariablen ( wb as Workbook, wks as Worksheet, rngBereich as Range, objChart as Chart, etc). Das erhöht die Chancen, dass die automatische Objekt-Typ-Erkennung im Editor funktioniert.
Beispiele:
'Allgemeines Modul - Excel 2007
Sub aaTest()
'Elementauswahl im VBA-Editor wird unterstützt
Dim wks As Worksheet
Set wks = Worksheets("Tabelle1")
With wks
With .Range(.Cells(2, 2), .Cells(100, 5))
.Find What:="Me", After:=.Cells(2, 2), Searchdirection:=xlNext
End With
End With
End Sub
Sub abTest()
'Elementauswahl im VBA-Editor wird nicht unterstützt
With Worksheets("Tabelle1")
With .Range(.Cells(2, 2), .Cells(100, 5))
.Find What:="Me", After:=Cells(2, 2), Searchdirection:=xlNext
End With
End With
End Sub
Sub acTest()
'Elementauswahl im VBA-Editor wird unterstützt
With Tabelle1 'direkte Angabe des Objekts mit dem Codename im VBAProjekt
With .Range(.Cells(2, 2), .Cells(100, 5))
.Find What:="Me", After:=Cells(2, 2), Searchdirection:=xlNext
End With
End With
End Sub

Gruß
Franz
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige