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

Zellen kopieren

Zellen kopieren
09.11.2005 03:14:07
gnilk
Hallo Leute,
kann mir mal jemand sagen warum dieses Makro nicht laeuft? Und wenn ja, wie es richtig lauten muss? Also

Sub und End 

Sub ist gesetzt.
Dieses Makro soll Zellen kopieren und einfuegen, wenn in der RANGE (rng) eine Hintergrundfarbe ist.
Es wird immer ein Fehler beim kopieren angezeigt.
Hier der Code:
Dim x As Workbook
Set x = Workbooks("prepare_backlog_04.xls")
'   kopieren der eingefaerbten Zellen
Dim letReih As Long
Dim i As Long
Dim rng As Range
letReih = x.Worksheets("Daten").Range("A65536").End(xlUp).Row
For i = 2 To letReih
Set rng = Range(x.Worksheets("Daten").Range("A" & i), _
x.Worksheets("Daten").Range("C" & i))
If Not rng.Interior.ColorIndex = xlNone _
Or _
Not rng.Interior.ColorIndex = 1 _
Then x.Worksheets("Daten").Range("G" & i).Copy _
After:=x.Worksheets("Daten").Range("I" & i)
Next i
Vielen Dank im Voraus
Ciao
Gnilk

		

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

Betreff
Datum
Anwender
Anzeige
AW: Zellen kopieren
09.11.2005 06:00:56
Erich
Hallo Klaus,
durch das, was in deinem Beitrag am Anfang zwischen "Also" und "ist gesetzt" steht, wurden automatisch zwei pre-Tags gesetzt. Ich füge deshalb hier zwei Ende-pre-Tags ein, um die wieder aufzuheben:
Mal schaun, obs geklappt hat - sieht man im Archivthread.
Zu deiner Frage:
...Copy After:=... funzt z. B. beim Kopieren von Blättern. Bei Ranges muss da
...Copy Destination:=... stehen (oder wie unten nur ...Copy ... ).
Und ich würde "With" und "Select Case" verwenden - liest sich besser:

Sub tst()
Dim x As Workbook
'    Set x = Workbooks("prepare_backlog_04.xls")
Set x = ThisWorkbook
'   kopieren der eingefaerbten Zellen
Dim letReih As Long
Dim i As Long
Dim rng As Range
'   With x.Worksheets("Daten")
With x.Worksheets("Tabelle1")
letReih = .Range("A65536").End(xlUp).Row
For i = 2 To letReih
Set rng = Range(.Range("A" & i), .Range("C" & i))
'        If rng.Interior.ColorIndex = xlNone _
'           Or rng.Interior.ColorIndex = 1 Then
'        Else
'           .Range("G" & i).Copy Destination:=.Range("I" & i)
'        End If
Select Case rng.Interior.ColorIndex
Case xlNone Or 1
Case Else
.Range("G" & i).Copy .Range("I" & i)
End Select
Next i
End With
End Sub

Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Zellen kopieren
10.11.2005 03:48:46
gnilk
Hallo Erich,
vielen Dank fuer Deine Antwort. Irgendwie laeuft es aber immer noch nicht.
Ich habe eine Fehlermeldung:
Run-time error '1004':
Copy method of Range class failed
Ich verstehe es einfach nicht. Habe doch alles gesetzt, es gibt auch ueberall Werte. Gut, ein paar Zellen in der Mitte sind verbunden (merge). Doch wenn ich jene loesche, dann funktioniert es immer noch nicht.
Ich habe uebrigens die selbe Fehlermeldung, bei einem AutoFilter.
' setzt wieder einen AutoFilter
If x.Worksheets("Daten").AutoFilterMode Or x.Worksheets("Daten").FilterMode _
Then GoTo weiter_20
ThisWorkbook.Worksheets("Daten").Range("A1:J1").AutoFilter 'hier ist der Fehler
weiter_20:
Woran kann das liegen? Es hat doch bis dato alles schoen hingehauen. Was haelts Du von dieser Fehlermeldung?
Vielen Dank im Voraus
Ciao
Gnilk aka Klaus
PS: Ach wie gut dass niemand weiss, dass ich gnilk heiss. Nimm mir das mit dem Nickname bitte nicht uebel. Aber ich finde ihn so toll...
Anzeige
AW: Zellen kopieren
10.11.2005 06:17:43
Erich
Hallo Klaus und Gnilk,
(das mit Klaus war nur ein kleiner Gag von mir!)
einen Fehler habe ich in meinem Code gefunden:
Statt "Case xlNone Or 1" muss da "Case xlNone, 1" stehen, wenn man beide Fälle in einer Case-Anweisung prüfen will. Vielleicht liegt hier die Ursache? Sonst läuft die Prozedur - auch mit diversen verbundenen Zellen auf "Daten" - bei mir problemlos durch:

Sub tst()
Dim x As Workbook
Set x = Workbooks("prepare_backlog_04.xls")
'   kopieren der eingefaerbten Zellen
Dim letReih As Long
Dim i As Long
Dim rng As Range
With x.Worksheets("Daten")
letReih = .Range("A65536").End(xlUp).Row
For i = 2 To letReih
Set rng = Range(.Range("A" & i), .Range("C" & i))
Select Case rng.Interior.ColorIndex
Case xlNone, 1
Case Else
MsgBox xlNone & rng.Address
.Range("G" & i).Copy .Range("I" & i)
End Select
Next i
End With
End Sub

Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Zellen kopieren
10.11.2005 06:33:54
gnilk
Halo Erich,
null Problemo mit dem Gag. Habe ich mir schon gedacht. Habe mal zurueckgegagt. :)
Funzt leider immer noch nicht. Selbes Problem und selbe Fehlermeldung. Da muss irgendwo anders der Wurm drin sein. Aber wo?
Ich habe so den Eindruck, dass das Makro meine Range nicht finden kann. wie bereits gesagt, ich habe den Feher auch mit einem Autofilter.
Danke im Voraus
Ciao Gnilk
AW: Zellen kopieren
10.11.2005 08:25:44
Erich
Hallo Gnilk,
hast du die Prozedur mal mit einer anderen Datei als prepare_backlog_04.xls ausprobiert? Wie gesagt, bei mir liefs problemlos. Vielleicht kannst du auch mal im Einzelschrittmodus starten oder dir per Msgbox rng.address nach der Zeile "Set rng ..." die Adressen der geprüften Bereiche anzeigen lassen. Vielleicht geht es nur bei einigen Bereichen nicht?
Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Zellen kopieren
11.11.2005 01:24:21
gnilk
Hallo Erich,
also irgendwie hat mein Makro voll die Probleme eine Range zu finden (z.B. Range("A1")).
Ich habe keinen Chance, dass er die Zelle findet. Es kommt dann immer die Fehermeldung wieoben beschrieben. Ich habe so den dumofen Eindruck, dass irgendetwas verstellt ist. Kann das ueberhaupt sein?
Hier ist der Anfang von meinem Makro:

Private Sub CommandButton3_Click()
'   vor nicht numerischen Eingaben warnen
'   bei den ComboBoxen
Dim iCounter As Integer
For iCounter = 1 To 12
With UserForm2("ComboBox" & iCounter)
If IsNumeric(.Text) = False Then
MsgBox "Value in ComboBox" & iCounter & " is not numeric!"
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
Exit Sub
End If
End With
Next iCounter
'   jetzt wird geschaut, ob die erwarteten Invoicings numerisch sind
With UserForm2("TextBox1")
If IsNumeric(.Text) = False Then
MsgBox "Value in 'expected invoice' is not numeric!"
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
Exit Sub
End If
End With
'   Eingabe der ComboBox muss kleiner sein, als ComboBox danach
Dim iCounter02 As Integer
For iCounter02 = 3 To 11
With UserForm2("ComboBox" & iCounter02)
If Not CDbl(UserForm2("ComboBox" & iCounter02).Text) < _
CDbl(UserForm2("ComboBox" & iCounter02 + 1).Text) Then
MsgBox "Date in ComboBox" & iCounter02 & " is bigger" & Chr(13) & _
"or equal than date in ComboBox" & iCounter02 + 1 & " !"
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
Exit Sub
End If
End With
Next iCounter02
'   nach Feiertagen abfragen, an denen nichts gebucht wird
If MsgBox("Are there any public holidays this month?", vbYesNo + vbQuestion, _
"Public holidays") = vbYes Then UserForm3.Show
'   erst einmal UserForm ausknipsen
UserForm2.Hide
' alle Set und Dim und Variablen
Dim x As Workbook
Set x = Workbooks("prepare_backlog_04.xls")
' kreieren der overview(daily)
Dim j As Long
Dim jj As Long
Dim jjj As Long
Dim jjjj As Long
Dim jjjjj As Long
Dim k As Long
' erst einmal die Spalte der weekly dates loeschen, damit es auf jeden fall
' leer ist
'    x.Worksheets("DB").Range("F3:F90").Select
With x.Worksheets("DB")
x.Worksheets("DB").Range("F3:F90").Select ' .Range(Cells(3, 6), Cells(60, 6)).ClearContents
'    Selection.Range("A1").Range(Selection.Offset(2, 5), Selection.Offset(60, 5)).Select
'    Selection.ClearContents
End With
End Sub

Kann es sein, dass hier eine Einstellung gemacht wurde, die es mir nicht mehr erlaubt mit Range("A1") zu arbeiten?
Vielen Dank im Voraus
Gnilk
Anzeige
AW: Zellen kopieren
11.11.2005 06:33:51
Erich
Hallo Klaus,
nun sind wir wohl bei einem völlig anderen Problem gelandet - da kommen jetzt weder Copy noch AutoFill vor.
Nein, hier nichts verstellt, keine Einstellung gemacht, die es dir nicht mehr erlaubt mit Range("A1") zu arbeiten. Es ist erlaubt, aber ist es auch sinnvoll? Probier mal das folgende Makro in einer neuen, leeren Mappe aus. Du wirst sehen, dass 'Range("A1").' dort überhaupt keine Wirkung hat (außer natürlich am Ende durch die beiden 'Selection.Range("A1").Select'-Anweisungen)z:

Sub tst()
Range("F3:F90").Select
Selection.Range("A1").Range(Selection.Offset(2, 5), Selection.Offset(60, 5)).Select
MsgBox Selection.Address(0, 0) ' P7:P152
Range("F3:F90").Select
Selection.Range("A1").Range([F3:F90].Offset(2, 5), [F3:F90].Offset(60, 5)).Select
MsgBox Selection.Address(0, 0) ' auch P7:P152
Range("F3:F90").Select
Selection.Range(Selection.Offset(2, 5), Selection.Offset(60, 5)).Select
MsgBox Selection.Address(0, 0) ' auch P7:P152
Range("F3:F90").Select
Selection.Range([F3:F90].Offset(2, 5), [F3:F90].Offset(60, 5)).Select
MsgBox Selection.Address(0, 0) ' auch P7:P152
Range(Cells(3, 6), Cells(90, 6)).Select
Selection.Range("A1").Range(Selection.Offset(2, 5), Selection.Offset(60, 5)).Select
MsgBox Selection.Address(0, 0) ' auch P7:P152
Range(Cells(3, 6), Cells(90, 6)).Select
Selection.Range(Selection.Offset(2, 5), Selection.Offset(60, 5)).Select
MsgBox Selection.Address(0, 0) ' auch P7:P152
Range("F3:F90").Select
Range("A1").Range(Selection.Offset(2, 5), Selection.Offset(60, 5)).Select
MsgBox Selection.Address(0, 0) ' K5:K150
Range("F3:F90").Select
Range(Selection.Offset(2, 5), Selection.Offset(60, 5)).Select
MsgBox Selection.Address(0, 0) ' auch K5:K150
Range("F3:F90").Select
Selection.Range("A1").Select
MsgBox Selection.Address(0, 0) ' F3
Selection.Range("A1").Range(Selection.Offset(2, 5), Selection.Offset(60, 5)).Select
MsgBox Selection.Address(0, 0) ' P7:P65
Range("F3:F90").Select
Selection.Range("A1").Select
MsgBox Selection.Address(0, 0) ' auch F3
Selection.Range(Selection.Offset(2, 5), Selection.Offset(60, 5)).Select
MsgBox Selection.Address(0, 0) ' auch P7:P65
End Sub

Zwei Fragen:
1.
Willst du überhaupt einen Bereich in x.Worksheets("DB") selektieren? Ich vermute, du willst doch nur den Inhalt eines bestimmten Bereichs dort mit ClearContents löschen. Dazu braucht es kein Select.
2.
Den Inhalt welcher Zellen willst du denn löschen?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Zellen kopieren
14.11.2005 02:10:46
gnilk
Hy Erich,
ich habe jetzt mal Deinen Code verwendet. Das war ja frei nach dem Motto: "...alle Wege fuehren nach Rom..."
Leider hat es mich nicht weitergebracht. Ich wollte das mit dem Select machen, um festzustellen wo der Fehler ist. Ich habe es auch schon versucht ohne select. Also direkt hinter der Adresse ClearContent zu schreiben. Natuerlich wurde mir dann auch wieder die Fehlermeldung gebracht.
Zu Deinen Fragen.
Ich will im Worksheet "DB" die Zellen "F3:F90" loeschen.
am Besten waere wohl:
x.Worksheets("DB").Range("F3:F90").ClearContents 'oder wenn vorher angewaehlt
ActiveSheet.Range("F3:F90").ClearContents
Das waere einfach und simpel und ich kann es auch nachvollziehen.
Auch Deine ganzen Adressen konnte ich nachvollziehen. Aber irgendwie hat mein Makro da keinen Bock zu. Es erscheint immer wieder die Fehlermeldung:
Run-time error '1004':
Select method of range failed
Da kann ich nur sagen: "Die spinnen die Roemer!"
Wenn ich jetzt nur z.B. Range("F3:F90").Select mache, dann nimmt er natuerlich nur das Sheet welches gerade offen ist und waehlt den Bereich aus. Das funktioniert auch wunderbar. Doch sobald ich die Adresse naeher beschreibe wird rumgemuckt! Das macht mich gaaaaaaaaaaaaaaaaaaaaaaaaaaaanz wahnsinnig, hi, hi, hi (hysterisches Lachen!).
Also ich bin mit meinem Latein am Ende! Ist ja auch nicht schwer, da mein Vokabular ziemlich klein ist.
Ich weiss nicht was ich Dir noch schreiben soll. Ich hoffe Du bekommst die Erleuchtung und es ist so hell wie zu Zeiten von Neros in Rom ! (jetzt langt es aber mal mit den roemischen Bezuegen!)
Ciao und vielen Dank, dass Du es mit mir noch nicht aufgegeben hast
Gnilk aka Klaus
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige