PDA

Vollständige Version anzeigen : Code laäuft auf Fehler 1004


DeBabba
04.04.2012, 13:08
Hallo zusammen,
ich hab da ne ganz ganz blöde sache und hoffe auf euren Beistand
Folgendes Problem(chen)

Ein User hat den folgenden Code
i = Workbooks(1).Worksheets(2).UsedRange.Columns.Count
j = Workbooks(1).Worksheets(2).UsedRange.Rows.Count
Workbooks(1).Worksheets(2).Range(Cells(1, 1), Cells(j, i)).copy
Workbooks(2).worksheets(1).pastespecial

in Excel 2003 läuft das prima. Seit der Umstellung auf Excel 2010 bleibt das Script mit dem Fehler 1004 an der Copy Zeile hängen

habe das ganze schnell mal zum testen wie folgt geändert
farbe = Int((55 * Rnd) + 0)
a = Workbooks(1).Name
b = Worksheets(2).Name
i = Workbooks(1).Worksheets(2).UsedRange.Columns.Count
j = Workbooks(1).Worksheets(2).UsedRange.Rows.Count
'Workbooks(1).Worksheets(2).Select
Workbooks(1).Worksheets(2).Range(Cells(1, 1), Cells(j, i)).Interior.ColorIndex = farbe


flogendes Ergenis:
das Scribt bleibt auch bei mir hängen (1004er fehler). Wenn ich jedoch zuvor das "zielblatt" auswähle (Select) , dann funktioniert das.

Hat sich da im 2010er VBa was geändert, oder mach ich was falsch, oder oder oder...
Wäre lieb wenn jemand von euch da helfen könnte

Gruß
DeBabba

EarlFred
04.04.2012, 14:34
Hallo DeBabba,

Du verstößt mit Deinem Code gegen die Regel, Bezüge eindeutig zu referenzieren.

Workbooks(1).Worksheets(1).Range(Cells(x,y))
"Cells" von was? Wenn nicht angegeben, dann vom aktiven Workbook, aktives Blatt!

Mach's Dir mal so deutlich:
Workbooks(1).Worksheets(1).Range(Workbooks(2).Worksheets(2).Cells(1,1)......)
Kann so nicht gehen, oder?

Warum denn auch nicht gleich:
Workbooks(1).Worksheets(2).UsedRange.Copy?

Was, wenn UsedRange in C3 beginnt und bis D4 reicht? .Rows.Count und .Columns.Count jeweils = 2, also
Copy(1,1 bis 2,2) = A1:B2.... Nicht der gewollte Bereich, oder?


Grüße
EarlFred

DeBabba
04.04.2012, 14:48
Hallo Fred,
vielen lieben Dank für Dein Feedback.
Ich habe diesen Code nicht geschrieben, ich gehe solche sachen auch anders an.
das kommt von irgend einem Anwender mit dem Titel :" Seit ihr office 2010 installiert habe, geht das nicht mehr
Ich werde mir hier auch nicht weiter die Finger verbrennen und den Leuten mitteilen, dass sie ihren Code anpassen müssen.
Gruß
Klaus

IngGi
04.04.2012, 16:33
Hallo zusammen,

nur am Rande:
Was, wenn UsedRange in C3 beginnt und bis D4 reicht? .Rows.Count und .Columns.Count jeweils = 2, also
Copy(1,1 bis 2,2) = A1:B2.... Nicht der gewollte Bereich, oder?
Der UsedRange ist meines Erachtens nur nach rechts und nach unten beweglich, d.h. oben links ist immer Zelle A1.

Gruß Ingolf

DeBabba
05.04.2012, 08:20
Hi ingi, Hallo earlFred

PEBCACK (Problem Exists Between Chair And Keyboard)
das hat bei dem User auch nur funktioniert, weil beim makrostart die sich auf dem "richtigen" Blatt befunden haben. Einmal nicht und schon hats geknirscht :stupid:
Aber man bekommt halt immer was anderes erzählt, als was eigentlich wirklich war

Dank euch nochmals

Bis danndnan

DeBabba

EarlFred
05.04.2012, 08:45
Hallo Ingolf,

Der UsedRange ist meines Erachtens nur nach rechts und nach unten beweglich, d.h. oben links ist immer Zelle A1.
unter 2003 ist's wirklich der genutzte Bereich, andere Versionen zum Testen habe ich nicht zur Verfügung.

Mal zum Testen an einem leeren Blatt und zum schrittweisen "Durchklickern":
Option Explicit

Sub test()
Dim a As Long, b As Long

With ActiveSheet
.Cells.Clear
.Range("C3:D4") = "test"
'Test: Haltepunkt (F9)
.UsedRange.Select
a = .UsedRange.Rows.Count
b = .UsedRange.Columns.Count
.Range(.Cells(1, 1), .Cells(a, b)).Select
End With
End Sub

Grüße
EarlFred

IngGi
05.04.2012, 09:09
Hallo EarlFred,

da brat mir doch einer 'n Storch! Man lernt nie aus. Danke für die Richtigstellung.

Gruß Ingolf