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

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

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
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

167 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige