Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
888to892
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
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Range, Select und 1004

Range, Select und 1004
27.07.2007 18:05:00
Peter
Ich möchte von einem Tabellenblatt in ein anderes verbundene Zellen kopieren.
Zum ersten Testen habe ich versucht, innerhalb des selben Tabellenblattes zu kopieren:
Range("a1:b5").Select
Selection.Copy
Range("a7").Select
ActiveSheet.Paste
Funktioniert einwandfrei, kopiert die verbundenen Zellen und die Formatierungen gleich mit.
Wenn ich jetzt aber versuche, mit der Range-Anweisung einen Bereich eines anderen, nicht aktiven Tabellenblattes zu kopieren, kommt immer die Fehlermeldung 1004, dass die select-Methode auf das range-Objekt nicht angewendet werden konnte.

Hinweis: Der Button mit dem Makro befindet sich in Tabelle2, und diese ist ausgewählt.

Sheets(1).Select
Range("a1:b5").Select ' Hier kommt dann die Fehlermeldung
Selection.Copy
Wie muss man den Code anpassen, um verbundene Zellen von Tabelle1 auf Tabelle2 zu kopieren?
mfg

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range, Select und 1004
27.07.2007 18:54:00
Chaos
Servus,
Sheets("DeineQuelle").Range("A1:B5").Copy Destination:=Sheets("DeinZiel").Range("A7")
auf Select kann man zu 99 % verzichten
Gruß
Chaos

Das aufgerufene Objekt wurde von den Clients getre
27.07.2007 22:30:00
den
Folgendes Problem besteht noch: Abhängig vom Wert in A1 auf Tabelle 2 wird aus den Tabellenblättern 3 bis 13 eine bestimmte Zeile in die Tabelle 2 kopiert. Wenn in A1 der Wert 1 oder 2 steht, klappt es, ab 3 ist Feierabend. "Das aufgerufene Objekt wurde von den Clients getrennt."

Public Sub commandbutton1_click()
Dim auswahl1 As String
Dim auswahlbereich1 As String
Dim zeile1 As String
Dim zielbereich1 As String
v = Sheets(2).Range("A1").Value 'auswahl der zu kopierenden zeile aus den anderen ...
snr = 2 * v - 1 '... tabellenblättern (nur jede zweite zeile)
auswahl1 = snr  'umwandeln in string
auswahlbereich1 = "b" + auswahl1 + ":af" + auswahl1 'auswahlbereich (text) bilden
' es müssen pro zelle 31 zellen kopiert werden (monat)
' ES MUSS DER GESAMTE BEREICH AUSGEWÄHLT WERDEN, WEIL VERBUNDENE ZELLEN MIT-
' KOPIERT WERDEN SOLLEN!
For i = 3 To 13 'nur 11 Monate, also 11 Tabellenblätter
zeile1 = 2 * (i - 2) - 1    'zusammensetzung des zielbereichs (text)...
zielbereich1 = "c" + zeile1 '... in abängigkeit der sheet-nummer
'wieder nur jede zweite zeile kopieren
Sheets(i).Range(auswahlbereich1).Copy Destination:=Sheets(2).Range(zielbereich1)
Next i
''WENN IN ZELLE A1 EIN GRÖßERER WERT ALS 2 STEHT, KOMMT DIE FEHLERMELDUNG:
''Automatisierungsfehler
''Das aufgerufene Objekt wurde von den Clients getrennt.
''wenn in zelle A1 der wert 1 oder 2 steht, geht es!
''erst ab dem wert 3 geht's schief.
Range("a1").Select
End Sub


Anzeige
AW: Das aufgerufene Objekt wurde von den Clients getre
27.07.2007 23:25:45
den
Servus,
sehr abenteurliche Konstruktion.
Was willst du denn eigentlich erreichen?
Beschreib doch mal kurz, was bei welcher Bedingung wohin kopiert werden soll. Weil, so ganz hab ich deinen Code nicht geblickt.
Ist natürlich schon spät.
Gruß
Chaos

AW: Das aufgerufene Objekt wurde von den Clients g
28.07.2007 11:04:00
den
Eine Zeile des Tabellenblattes enthält Informationen über Kunde1 in Zeile1, Kunde2 in Zeile2 usw. Die Tabellenblättern 3 ... 13 stellen noch Monate dar. Es wird also in Tabellenblatt3 in Zeile1 das Verhalten von Kunde1 für Januar erfasst, dann in Tabellenblatt4 wieder Kunde1 in Zeile1 für Februar usw.
Das Tabellenblatt 2 soll die Übersicht werden. Der Benutzer wählt aus, welchen Kunden (also Zeile) er aus den Tabellenblättern 3 ... 13 kopieren möchte = Wert in Zelle A1.
Dazu baue ich mir als String den Auswahlbereich und den Zielbereich. Z.b. bekommt der String "Auswahlbereich" den Wert "b1:af1" zugewiesen (ohne "), wenn der Benutzer in A1 eine 1 eingegeben hat, oder "b5:af5", wenn eine 5 drinstand usw. Ähnliches gilt für den Zielbereich.
Jetzt sollte in der For - Next Schleife jedes der Tabellenblätter 3 ... 13 angesteuert werden, und der Auswahlbereich in das Übersichtsblatt Tabelle2 kopiert werden.
Ich hab das Makro mal auf den Kern reduziert. BEI DIESER EINFACHEREN KONSTRUKTION KOMMT DIE FEHLERMELDUNG ÜBER DEN CLIENT AB EINEM WERT VON 5 IN DER ZELLE A1!! Bei den Wert 1 ... 4 funktionert es.

Public Sub commandbutton1_click()
Dim auswahl As String
Dim auswahlbereich As String
Dim zeile As String
Dim zielbereich As String
auswahl = Sheets(2).Range("A1").Value
auswahlbereich = "b" + auswahl + ":af" + auswahl
For i = 3 To 13
zeile = i - 2
zielbereich = "c" + zeile
Sheets(i).Range(auswahlbereich).Copy Destination:=Sheets(2).Range(zielbereich)
Next i
Range("a1").Select
End Sub


Anzeige
AW: Das aufgerufene Objekt wurde von den Clients g
28.07.2007 11:56:38
den
Servus Peter,
das Makro kopiert jeweils die angegebene Zeile (A1 aus Tabelle 2) aus den Tabellenblättern, löscht zuvor den Zielbereich in Tabelle2 und kopiert dann nach Spalte C in jede 2.Zeile.

Sub auswahl()
Dim a As String
Dim r As Integer
Dim I As Integer
r = Sheets(2).Range("C65536").End(xlUp).Offset(0, 0).Row
Sheets(2).Range("C3" & ":AF" & r).ClearContents
a = Sheets(2).Range("A1").Value
For I = 3 To 13
Sheets(I).Range("A" & a & ":AF" & a).Copy Destination:=Sheets(2).Range("C65536").End(xlUp). _
Offset(2, 0)
Next I
End Sub


sollte doch so ähnlich sein, oder?
Gruß
Chaos

Anzeige
AW: Das aufgerufene Objekt wurde von den Clients g
28.07.2007 12:10:00
den
Servus,
Korrektur:

Sub auswahl()
Dim a As String
Dim r As Integer
Dim I As Integer
r = Sheets(2).Range("C65536").End(xlUp).Offset(0, 0).Row
Sheets(2).Range("C1" & ":AF12").ClearContents
a = Sheets(2).Range("A1").Value
For I = 3 To 13
If Sheets(2).Range("C1").Value = "" Then
Sheets(I).Range("A" & a & ":AF" & a).Copy Destination:=Sheets(2).Range("C1")
Else
Sheets(I).Range("A" & a & ":AF" & a).Copy Destination:=Sheets(2).Range("C65536").End( _
xlUp). _
Offset(1, 0)
End if
Next I
End Sub


Jetzt wird dein Zielbereich angesprochen, von C1 bis AF12, mehr Zeilen können es ja nicht sein / pro Kunde, ausser du willst die Werte stehen lassen, dann musst du die Löschzeile am Anfang rausnehmen.
Kopiert wird nach C1 und dann jeweils in die erste freie Zelle in Spalte C.
Gruß
Chaos

Anzeige
AW: Das aufgerufene Objekt wurde von den Clients g
28.07.2007 12:42:00
den
Hi
prinzipiell kann ich da keinen Fehler erkennen, wobei ich das ganze etwas kompakter schreiben und ne Sicherheitsabfrage einbauen würde: (btw, wo und wie ist i dimensioniert?)

Public Sub commandbutton1_click()
Dim auswahl As Long
Dim i As Long
With Sheets(2).Range("A1")
If .Value = "" Or .Value = 0 Or Not IsNumeric(.Value) Then
MsgBox ("Bitte eine Zahl grösser als 0 eingeben")
Exit Sub
End If
auswahl = .Value
End With
For i = 3 To 13
Sheets(i).Cells(auswahl, 2).Resize(1, 30).Copy Destination:=Sheets(2).Cells(i - 2, 3)
Next i
Range("a1").Select
End Sub


wenn die Werte nur angezeigt werden sollen und die Sheet-Namen sich nicht ändern, ließe sich die aufgabe auch über eine Excel-Formel lösen, beispielsweise so:
(wobei die Namen der Sheets 3-13 im Sheet(2) im Zellbereich B1-B11 stehen müssen:


=INDEX(INDIREKT("'"&$B1&"'!B1:AF65536";WAHR);$A$1;SPALTE()-2)


diese Formel ins Sheet(2) Zelle C1 eintragen und in den Zellbereich C1:AG11 kopieren.
Leere Zellen werden dabei als 0 angezeigt, aber das kannst du ja über EXTRAS-OPITIONEN-ANZEIGE beheben.
Gruß, Daniel

Anzeige
AW: Das aufgerufene Objekt wurde von den Clients g
29.07.2007 11:41:00
den
@Daniel - INDIREKT
Vielen Dank für die Formel, aber hierbei werden keine verbundenen Zellen kopiert. Deswegen kann ich diesen Vorschlag leider nicht gebrauchen. Nebenbei hatte ich mit SVERWEIS eine ähnliche Lösung.
@Daniel - VBA
@Chaos - VBA
Eure beiden Codes sind - soweit ich das beurteilen kann - grundverschieden. Trotzdem bricht bei beiden ab dem Wert 5 in Zelle A1 mein Excel zusammen, mit der Fehlermeldung über die Clients. Trotz aller ServicePacks (alles installiert, was Microsoft zu bieten hat), vermute ich jetzt mal einen Fehler meines Rechners bzw. meiner Office-XP-Installation. Ich werde am Montag in der Arbeit mal schauen, was Office2000 dazu sagt.
Bis dahin vielen Dank für eure Mühen.

Anzeige
Auch mit Office 2000 gehts schief
30.07.2007 08:38:01
Peter
Hallo Daniel und Chaos.
Ich habe gerade am Bürorechner die drei VBA-Codes getestet (meinen ersten Entwurf und eure beiden). Auch hier bricht die Verarbeitung ab einem Wert von 3 bzw. 5 in Zelle A1 ab, wieder mit der Client-Fehlermeldung.
Habt Ihr noch eine Idee, was das sein kann?
Vielen Dank für eure Mühe,
Peter

AW: Auch mit Office 2000 gehts schief
30.07.2007 11:28:00
Chaos
Servus Peter,
die Codes funktionieren. Ich kann das nicht nachvollziehen. Sind evtl. die Zellen gesperrt?
Gruß
Chaos

AW: Auch mit Office 2000 gehts schief
30.07.2007 19:41:26
Daniel
dh. ohne die original-Datei kann man eingentlich gar nichts sagen
Gruß, Daniel

Des Rätsels Lösung?
31.07.2007 12:50:55
Peter
Ich hab heute zum xten Mal die Datei NEU erstellt, also leere Arbeitsmappe, Code selbst eingetippt etc, aber zum ersten Mal am Büro-PC mit Office 2000.
Und jetzt auf einmal geht alles so wie es soll. Verbundene Zellen kopieren, egal welche Zahl in A1 steht etc.
Ich hab die Datei vom Büro-PC gleich zu Hause ausprobiert (hab heut Nachmittag frei) und auch da geht sie!
Und dann hab ich gerade eben eine neue leere Arbeitsmappe auf meinem HeimPC mit Office XP erstellt, den Code eingetippt und siehe da: Excel stürzt ab. Damit ist klar, dass meine Office-Installation irgendeinen Schaden hat.
Ich arbeite halt jetzt im Büro dran weiter. Vielen Dank nochmal für eure Hilfe!
mfg
Peter
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige