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

Benutzten Bereich kopieren

Benutzten Bereich kopieren
Dieter
Hallo Forum
Ein in der Länge jeweils veränderliches Tabellenblatt soll an definierter Stelle in ein Word-Dokument kopiert werden. ich benutze zur Ermittlung des benutzten Bereiches die Eigenschaft UsedRange.Hier ein Ausschnitt des Codes.
Dim wks As Worksheet
Dim Bereich As Variant
Set WrdApp = New Word.Application
WrdApp.Documents.Add Template:= _
Pfad0 & "Rechnung.dot", NewTemplate:=False, DocumentType:=0
Set WrD = WrdApp.ActiveDocument
Set wks = ActiveWorkbook.Worksheets("BetragErmitteln")
Set Bereich = wks.UsedRange
With WrD
Bereich.Copy
.Bookmarks("Tabelle").Range.PasteSpecial Link:=False, DataType:=wdPasteRTF, _
Placement:=wdInLine, DisplayAsIcon:=False
End With
(Den Code für weitere Übertragungen in das Dokument und für Speichern und Schließen des Word-Dokumentes habe ich weg gelassen).
Das funktioniert auch soweit, nur bekomme ich den Bereich immer größer als aktuell vorhanden. Das Problem wurde schon häufig beschrieben und die Ursachen sind mir einigermaßen klar. Zur Vermeidung wollte ich nachfolgenden Code anstelle der UsedRange-Eigenschaft benutzen. Der Code stammt aus einem "Code-Book".
Set Bereich = wks.Range(Cells(1, 1), Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, _
Cells.SpecialCells(xlCellTypeLastCell).Column))
Leider steigt VBA mit Laufzeitfehler 1004 und der Meldung "Die Methode "Range" für das Objekt '-Worksheet' ist fehlgeschlagen.
Was mache ich falsch, wo liegt mein Denkfehler? Man kann es sicher einfacher bzw. verständlicher lösen. Nur leider bin ich in VBA noch nicht so weit. Ich wäre für einen Hinweis, wie ich eine Tabelle in ihrer wirklichen Länge selektieren oder kopieren kann, sehr dankbar.
Gruß Dieter

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

Betreff
Benutzer
Anzeige
AW: Benutzten Bereich kopieren
19.10.2009 17:48:42
Uduuh
Hallo,
With wks
Set Bereich = .Range(.Cells(1, 1), .Cells(.Cells.SpecialCells(xlCellTypeLastCell).Row, _
.Cells.SpecialCells(xlCellTypeLastCell).Column))
End with
Gruß aus’m Pott
Udo

AW: Benutzten Bereich kopieren
19.10.2009 17:51:24
Ramses
Hallo
Der Code aus dem Codebook funktioniert als solches.
Lass mal das hier laufen zum testen ob der Fehler dann noch auftritt
Sub test()
Dim wks As Worksheet
Dim Bereich As Variant
Set wks = Worksheets("Tabelle1")
Set Bereich = wks.Range(Cells(1, 1), Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, Cells. _
SpecialCells(xlCellTypeLastCell).Column))
MsgBox "Der benutzte Bereich liegt in: " & Bereich.Address
End Sub
Gruss Rainer
Anzeige
sauber referenzieren
19.10.2009 18:10:42
Erich
Hi Dieter und Rainer,
der Ausdruck wks.Range(Cells(1, 1), Cells(... kann leicht Ärger machen.
Wenn der Code in einem normalen Modul steht, gehört Cells(1,1) zum gerade aktiven Blatt - das muss nicht wks sein.
Wenn der Code im Modul eines Tabellenblatts steht, gehört Cells(1,1) zum diesem Blatt, auch das muss nicht wks sein.
Udo hat schon dargestellt, wie man mit With leicht sauber referenzieren kann.
Noch eine Frage an Dieter:
Willst du überhaupt mit UsedRange bzw. SpecialCells(xlCellTypeLastCell) arbeiten?
Eventuell würde die Bestimmung der letzten Zeile/Spalte etwa mit
.Cells(.rows.count,XX).end(xlup).row
besser passen. XX wäre die Nummer der SPalte, in der die letzte Zeile bestimmt wird.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Egal....
19.10.2009 20:56:57
Ramses
Hallo Erich
Ich gebe dir recht:
Sauber referenzieren ist Pflicht, daher muss auch der "Bereich" als Range und nicht als Variant deklariert werden.
Trotzdem, troz deiner Erläuterungen, MUSS die Codezeile funktionieren.
Lediglich das Ergebnis stimmt nicht, da die letzten Zellen einfach aus einem falschen Blatt kommen.
Trotzdem darf es dabei nicht zu einem Laufzeitfehler kommen.
Gruss Rainer
Nicht egal....
19.10.2009 21:36:57
Erich
Hi Rainer,
doch, es kann wegen der unklaren Referenzierung einen Laufzeitfehler geben. In test1()
knallt es mit einem 1004 (Methode 'Range' ... ist fehlgeschlagen), test2 und test3 dagegen laufen richtig:
(gebraucht wird eine Mappe mit Tabelle1 und Tabelle2)

Sub test1()       ' knallt
Dim wks As Worksheet
Dim Bereich As Range
Sheets("Tabelle2").Select
Set wks = Worksheets("Tabelle1")
Set Bereich = wks.Range(Cells(1, 1), _
Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, _
Cells.SpecialCells(xlCellTypeLastCell).Column))
MsgBox "Der benutzte Bereich liegt in: " & Bereich.Address
End Sub
Sub test2()       ' funzt
Dim wks As Worksheet
Dim Bereich As Range
Sheets("Tabelle2").Select
Set wks = Worksheets("Tabelle1")
Set Bereich = wks.Range(wks.Cells(1, 1), _
wks.Cells(wks.Cells.SpecialCells(xlCellTypeLastCell).Row, _
wks.Cells.SpecialCells(xlCellTypeLastCell).Column))
MsgBox "Der benutzte Bereich liegt in: " & Bereich.Address
End Sub
Sub test3()       ' funzt
Dim wks As Worksheet
Dim Bereich As Variant ' statt Range - schlecht, geht aber auch
Sheets("Tabelle2").Select
Set wks = Worksheets("Tabelle1")
With wks
Set Bereich = .Range(.Cells(1, 1), _
.Cells(.Cells.SpecialCells(xlCellTypeLastCell).Row, _
.Cells.SpecialCells(xlCellTypeLastCell).Column))
MsgBox "Der benutzte Bereich liegt in: " & Bereich.Address
End With
End Sub
Viel Spaß beim Testen!
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Nicht egal....
19.10.2009 21:54:13
Gerd
Hallo zusammen!
doch, es kann wegen der unklaren Referenzierung einen Laufzeitfehler geben
Insbesondere, wenn der (urprüngl. -Specialcells-)Code in einem Tabellenblattmodul steht.
Gruß Gerd
Klar....
19.10.2009 22:23:33
Ramses
Hallo Erich
Ich hatte da einen Gedankenfehler drin. Da steht im Code ja "RANGE" davor,... und da wird ja auf eine Start- und Endzelle als Object verwiesen, und weil die Start und Endzelle nicht auf der gleichen Tabelle sind MUSS es ja knallen.
Ich hatte das mit Cells(x,x) verwechselt,... ich Dubbel.
Wer lesen kann ist klar im Vorteil
Gruss Rainer
AW: Nicht egal....
19.10.2009 22:37:08
Dieter
Hallo miteinander,
allen Helfern ein herzliches Danke. Es hat etwas gedauert, bis ich den Sachverhalt begriffen habe. Die geänderte Referenzierung war der Knackpunkt, nun funktioniert der Code wie gewünscht. Trotzdem werde ich in einer ruhigeren Stunde das Problem "benutzter Bereich" über eine andere Bestimmung der letzten Zeile/ Spalte versuchen. Nochmals Danke, es war für mich als Hobby/ Wochenend-Anwender sehr hilf- und lehrreich.
Gruß Dieter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige