Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Warum funkioniert mein Makro nur in einer Zeile

Forumthread: Warum funkioniert mein Makro nur in einer Zeile

Warum funkioniert mein Makro nur in einer Zeile
05.09.2016 15:59:08
Jenny
Hallo an alle,
ich wäre euch sehr verbunden, wenn ihr mal einen Blick auf unten stehendes Makro werft.
Solange ich nur etwas in eine Zelle einfüge (Spalte E oder G) wird alles so gemacht, wie ich es mir wünsche.
Aber ist es denn auch möglich, etwas in mehrere Zellen gleichzeitig einzufügen, sodass das Makro dann das was es jetzt macht in allen Zeilen macht, in denen ich was eingefügt habe?
Bislang kommt in so einem Fall immer Laufzeitfehler 13, Typen unverträglich.
Beim Debuggen wird

If Target.Count = 1 And Target  "" Then

markiert.
Bitte seid doch so lieb und helft mir. Danke
Jenny

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 And Target  "" Then
On Error GoTo ERREXIT
Application.EnableEvents = False
Select Case Target.Column
Case 5: Call SpalteE(Target)
Case 7: Call SpalteG(Target): Call SpalteE(Target)
End Select
End If
ERREXIT:
Application.EnableEvents = True
End Sub
Sub SpalteG(ByVal Target As Range)
Dim r As Range, c As Range, z&, cc As Range, zf&
Dim gefunden As Boolean
If Target.Offset(, -6)  "" Then
z = Target.Row
gefunden = False
Set cc = Range("A1:A" & z - 1).Find(Target.Offset(, -6).Value, _
Range("A1"), xlValues, xlWhole)
If Not cc Is Nothing Then
zf = cc.Row
Do
Set cc = Range("A1:A" & z - 1).FindNext(cc)
If cc.Offset(, 6) = Target Then
Target.Offset(, -2) = cc.Offset(, 4) '& " " & (cc.Offset(, 4).Address)
gefunden = True
End If
Loop Until cc Is Nothing Or cc.Row = zf Or gefunden
End If
If Not gefunden Then Target.Offset(, -2).Value = "n.v."
End If
End Sub
Sub SpalteE(ByVal Target As Range)
Dim lngR As Long
lngR = Target.Row
Cells(lngR, 2).FormulaR1C1 = Cells(1, 2).FormulaR1C1
Cells(lngR, 3).FormulaR1C1 = Cells(1, 3).FormulaR1C1
Cells(lngR, 6).FormulaR1C1 = Cells(1, 6).FormulaR1C1
Cells(lngR, 8).FormulaR1C1 = Cells(1, 8).FormulaR1C1
Cells(lngR, 9).FormulaR1C1 = Cells(1, 9).FormulaR1C1
Cells(lngR, 10).FormulaR1C1 = Cells(1, 10).FormulaR1C1
Cells(lngR, 11).FormulaR1C1 = Cells(1, 11).FormulaR1C1
Cells(lngR, 12).FormulaR1C1 = Cells(1, 12).FormulaR1C1
Rows(lngR).Copy
Cells(lngR, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Target.Select
End Sub

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Target.value
05.09.2016 16:02:06
Fennek
Hallo,
versuche:
Target.value ""
mfg
AW: Target.value
05.09.2016 16:09:17
Jenny
Hallo,
danke erstmal für deine Mühe, aber das hat das Problem leider nicht gelöst,
bekomme immer noch denselben Fehler, nur dass jetzt beim Debuggen
If Target.Count = 1 And Target.Value  "" Then
markiert wird.
LG
Jenny
Anzeige
AW: Target.value
05.09.2016 16:10:28
Jenny
selbes Problem wenn ich nur
If Target.Value  "" Then
nehme
AW: Target.value
05.09.2016 16:14:06
Matthias
Hallo
Warum setzt Du dann nicht Fehlersprungmarke vor die Zeile
Beispielsweise (gekürzt) so:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ERREXIT
If Target.Count = 1 And Target  "" Then
MsgBox "Target ist nicht leer & Target.Count = " & Target.Count
ERREXIT:
Application.EnableEvents = True
End If
End Sub
Gruß Matthias
Anzeige
AW: Warum funkioniert mein Makro nur in einer Zeile
05.09.2016 16:11:00
Michael
Hi Jenny,
die Fehlermeldung bekommst Du weg, indem Du das anders formulierst:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 then
If Target  "" Then   ' ***
On Error GoTo ERREXIT
Application.EnableEvents = False
Select Case Target.Column
Case 5: Call SpalteE(Target)
Case 7: Call SpalteG(Target): Call SpalteE(Target)
End Select
End If
end if                      ' ***
ERREXIT:
Application.EnableEvents = True
End Sub

Um das für BEREICHE verfügbar zu machen, müßte man eine Schleife einsetzen, die alle in Target enthaltenen Zellen EINZELN daraufhin überprüft, ob sie leer sind oder nicht und je nach dem die Aktionen anwirft.
Ich kann mich dunkel erinnern, daß ich Dir so was in der Art vor einigen Monaten schon mal vorgeschlagen (wenn nicht programmiert) hatte, aber da wolltest Du es nicht - jetzt habe ich leider keine Zeit dafür.
Schöne Grüße,
Michael
Anzeige
mehrzeilig
05.09.2016 16:24:33
Michael
Hi,
ich habe mir doch einen Ruck gegeben; mangels Daten hier mit zwei Dummies für SpalteXXX, aber das sollte auch bei Dir laufen:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TC As Long
Dim c As Range
If Target.Columns.Count > 1 Then Exit Sub
If Target.Column = 5 Or Target.Column = 7 Then TC = Target.Column Else Exit Sub
'If Target.Count = 1 And Target  "" Then
On Error GoTo ERREXIT
Application.EnableEvents = False
Select Case TC
Case 5: For Each c In Target
If c  "" Then Call SpalteE(c)
Next
Case 7: For Each c In Target
If c  "" Then
Call SpalteG(c)
Call SpalteE(c)
End If
Next
End Select
ERREXIT:
Application.EnableEvents = True
End Sub
Sub SpalteG(test)
MsgBox test.Address
End Sub
Sub SpalteE(test)
MsgBox test.Address
End Sub

Das Errorhandling ist nicht sauber - das solltest Du AUCH in SpalteXXX drin haben, denn DA passieren die Aktionen.
Gruß,
M.
Anzeige
AW: mehrzeilig
05.09.2016 17:29:42
Jenny
Hallo Michael,
vielen Dank, du hast mir sehr geholfen.
LG
Jenny
das freut mich - schöne Grüße, owT
05.09.2016 18:32:31
Michael
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige