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

Macro Problem

Macro Problem
17.02.2016 16:51:22
Erik

Hallo zusammen !
Habe ein Macro das mir ein Problem bereitet.
Ich habe bereits einen Tread aufgemacht, bei dem es aber ein Problem mit dem Zertifikat der xls Datei gibt, deshalb hier das Makro ohne Beispieldatei:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D7:D1000")) Is Nothing And Target.Count = 1 Then
Range("H" & Target.Row) = Format(Now, "dd.mm.yyyy")
End If
On Error GoTo Fehler
Dim LR&
With ActiveSheet
LR = .Cells(Rows.Count, 5).End(xlUp).Row 'letzte Zeile der Spalte E
If Not Intersect(Target, .Range("D:D")) Is Nothing Then
If Target.Count <> 1 Then 'wenn mehrere Zellen gleichzeitig
MsgBox "Bitte nur einzeln ändern"
Application.EnableEvents = False
Application.Undo
ElseIf Target.Value <> "" And Target.Row < LR Then
Application.EnableEvents = False
.Range(.Cells(Target.Row + 1, 4), .Cells(LR, 4)). _
SpecialCells(xlCellTypeBlanks) = Target.Value
.Range(.Cells(Target.Row, 8), .Cells(LR, 8)). _
SpecialCells(xlCellTypeBlanks) = Cells(Target.Row, 8)
End If
End If
End With
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number <> 0 Then MsgBox "Fehler: " & Err.Number & vbLf & Err.Description: Err. _
Clear
End Sub

sobald ich in diesem Beispiel etwas in Zelle D7 eingebe wird die Tabelle richtig vervollständigt !
Lösche ich aber E9 bis G9, so daß nur noch zwei Zeilen mit Artikel befüllt sind
und gebe dann wiederum ein Kennzeichen in D7 ein,
kommt der Fehler 1004 und die ganze Tabelle wird befüllt.
Kann mir jemand helfen ?
Gruß
Erik

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Macro Problem
17.02.2016 16:55:59
Erik
Hallo nochmal,
hier noch ein jpg, damit das Beispiel einfacher zu verstehen ist.
Userbild
Gruß
Erik

Aus 5 mach 4
17.02.2016 17:18:04
Raphael
Hallo Erik,
mach aus der 5 ne 4
LR = .Cells(Rows.Count, 4).End(xlUp).Row 'letzte Zeile der Spalte E

Gruess
Raphael

bitte zu testen
17.02.2016 18:04:14
Michael
Hi zusammen,
die Zuweisung der Specialcells INNERHALB eines Ranges führt zu den Problemen.
Ich habe mal etwas gesucht und hier eine Antwort gefunden...
http://www.office-hilfe.com/support/showthread.php/17582-Fehler-abfangen-VBA
... nämlich, daß sich Specialcells *immer* auf den UsedRange bezieht.
Im besagten Link werden einige Methoden aufgezeigt, um das zu umgehen, ich habe eine andere verwendet:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LR&
Dim d As Date
Dim r As Range
' Stop
If Not Intersect(Target, Range("D7:D1000")) Is Nothing Then
If Target.Count <> 1 Then
MsgBox "Bitte nur einzeln ändern"
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Else
If Target.Value <> "" Then
LR = Cells(Rows.Count, 5).End(xlUp).Row 'letzte Zeile der Spalte E
'       MsgBox "LR: " & LR & " TR: " & Target.Row
If Target.Row < LR Then
d = Format(Now, "dd.mm.yyyy")
Set r = Intersect(Range("D" & Target.Row + 1).Resize(LR - Target.Row, 1), _
Cells.SpecialCells(xlCellTypeBlanks))
If Not r Is Nothing Then
MsgBox "Intersect " & r.Address
Application.EnableEvents = False
r.Value = Target.Value
Application.EnableEvents = True
Else
MsgBox "keine Leeren gefunden "
End If
Set r = Intersect(Range("H" & Target.Row).Resize(LR - Target.Row + 1, 1), _
Cells.SpecialCells(xlCellTypeBlanks))
If Not r Is Nothing Then
MsgBox "Intersect " & r.Address
Application.EnableEvents = False
r.Value = d
Application.EnableEvents = True
Else
MsgBox "keine Leeren gefunden "
End If
End If
End If
End If
End If
End Sub
Die MsgBoxen und die beiden Else-Zweige kannste ja wieder rausnehmen.
Alles zusammen als Datei: https://www.herber.de/bbs/user/103649.xls
Schöne Grüße,
Michael

Anzeige
Nicht UsedRange …
17.02.2016 18:22:03
RPP63
… sondern .CurrentRegion, Michael.
Beispiel (gerade nachgestellt):
UsedRange = A1:E16
CurrentRegion ab A1: A1:B8
Sowas funktioniert einwandfrei:
Sub RPP()
Tabelle1.Cells(1).CurrentRegion.SpecialCells(xlCellTypeBlanks) = "leer"
End Sub
Gruß Ralf

AW: Nicht UsedRange …
17.02.2016 19:49:24
Michael
Hi Ralf,
aber anscheinend nur, wenn tatsächlich leere Zellen vorhanden sind.
Ehrlich gesagt, ich durchschaue nicht ganz, was da passiert, nur die currentregion (als default?) kann's auch nicht sein, denn beim Testen mit einem Code zwischen dem ursprünglichen und meinem (habe es leider alles rausgelöscht), bei dem ich zwecks Visualisierung erst mal gegelbt habe, wurde seltsamerweise der Bereich von A1 bis J10 gegelbt.
Da die erste Überschrift erst in D6 steht, kann ich das nicht nachvollziehen - von D7 aus ist A1 NICHT in der CurrentRegion.
Naja, ich muß nicht alles wissen, Hauptsache, es rennt.
Schöne Grüße,
Michael

Anzeige
AW: Nicht UsedRange …
18.02.2016 08:47:08
Erik
Hallo Michael,
habe Deinen Code ausprobiert. Er funktioniert! Vielen Dank.
Aber was hat es mit dem Befehl von Ralf auf sich ?
Soll ich Deinen Code noch irgendwo abändern?
Ich blicke da zu wenig durch.
Nochmals vielen Dank an alle für eure Hilfe!
Gruß
Erik

nee, paßt schon so
18.02.2016 11:30:11
Michael
Hi Erik,
wenn es läuft, gibt es keinen Grund, was zu ändern.
Wir Deutschen sagen ja "never change a running system", wohingegen die Amis meinen "don't fix it if it ain't broken"...
Die Diskussion mit Ralf ging eher in eine philosophische Richtung - wobei für mich immer noch nicht geklärt ist, ob Beverly in dem genannten link (6.12.12, 11:02) nun Recht hat damit:
" xlCellTypeBlanks bezieht sich immer auf Zellen im benutzten Bereich eines Tabellenblattes"
Ralfs Beispiel ging etwas daran vorbei, denn es geht nicht um die explizite Angabe von currentregion, sondern einen möglichen "automatischen" Bezug auf den "benutzten Bereich", selbst wenn specialcells innerhalb einer Range-Angabe angesprochen wird.
Wie eben in Deinem ursprünglichen Code
.Range(.Cells(Target.Row + 1, 4), .Cells(LR, 4)). _
SpecialCells(xlCellTypeBlanks)

oder den Beispielen, auf die sich Beverly bezieht.
Nun, Beverly bzw. Karin ist ja auch hier im Forum als Excel-Power-Frau am Rödeln, also nehme ich ihre Aussage mal so hin - und behalte die ganze Geschichte im Hinterkopf, falls mir mal wieder was Ähnliches unterkommt.
Happy Exceling & Gruß,
Michael

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige