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

Fehlermeldung nicht nachvollziehbar

Fehlermeldung nicht nachvollziehbar
14.03.2019 15:51:58
Memo
Hallo zusammen,
habe vor paar Tagen ein Beitrag hier eingestellt "Vergleichen mit mehreren Bedingungen". Dank einen netten User, Daniel, habe ich ein Code zusammengestellt welches jedoch nicht in meiner eigentlichen Pivot Tabelle funktioniert.
Derselbe Code funktioniert tadellos wenn man die Pivot Tabelle nachstellt.
Sobald ich jedoch den funktionierenden Code in die tatsächliche Pivot Tabelle laufen lasse dann bekomme ich die Fehlermeldung
"Objektvariable oder With-Blockvariable nicht festgelegt. Laufzeitfehler '91'" und es wird nur 1 Zeile gelb gefüllt, obwohl dutzende mehr gelb sein sollten.
Die Aufgabenstellung ist im Beitrag "Vergleichen mit mehreren Bedingungen" zu finden.
Anbei der Code:

Sub Filtern()
Dim cell, Zielzelle As Range
For Each cell In Range("A:A").SpecialCells(xlCellTypeConstants)
If cell.Value = "V1" Or cell.Value = "V2" Or cell.Value = "V3" Or cell.Value = "V4" Or  _
cell. _
Value = "V5" Then
Set Zielzelle = Range("1:1").Find(cell.Value)
If Year(Zielzelle.Offset(cell.Row - 1, 1)) & Format(Month(Zielzelle.Offset(cell.Row -   _
_
_
1, _
1)), "0#") 

Danke im Vorab an alle die etwas beitragen..
VG
Memo

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlermeldung nicht nachvollziehbar
14.03.2019 16:02:11
Alexandra
Hi Memo,
dazu müsste man die tatsächliche Datei sehen! Lade Sie hoch, dann wird Dir geholfen!
LG
Alexandra
AW: Fehlermeldung nicht nachvollziehbar
14.03.2019 16:32:07
Memo
Hi Alexandra,
leider ist die Pivot mega groß. Hier kann man nur bis zu 300kb Dateien hochladen. Ich habe jedoch aus der originalen Pivot ein Screenshot gemacht und diese jpeg hochgeladen.
Hier wird nur der Bereich von A:A zu M:M und Range 1:1 zu 2:2 geändert.
Also wenn man nur die Zelle M4 betrachtet:
Das Makro soll beim ausführen schauen was steht in M4. In diesem Fall steht V3 und dann soll er in die Spalte V3 (Plan) springen und das Datum mit dem heutigen vergleichen. Wenn das Datum was in der Zelle steht größer ist als heute + 1 Monat dann nichts unternehmen. Wenn kleiner dann komplette zeile Gelb markieren und diese Markierungen als separate Arbeitsblatt zur Verfügung stellen sodass ich nur Speicherort und name vergeben muss. Diese Prozedur soll bis M5000 ausgeführt werden.
In den Zellen können V2,V3,V4,V5 stehen. wenn V2 dann springe zu V2 (Plan), wenn V3 dann zu V3 (Plan) usw.
Ich hoffe das Bild kann dir ein Überblick verschaffen.
Danke für deine Mühe.
Userbild
VG
Memo
Anzeige
AW: Fehlermeldung nicht nachvollziehbar
14.03.2019 16:56:38
Werner
Hallo,
na ja, hast du dir den Code mal genau angeschaut?
Als Beispiel mal für die erste Datenzeige = Zeile 4
Dort steht in Spalte M V3
Dann suchst du in Zeile 2 nach V3. Dort steht aber nirgendwo V3 alleine, so dass du auch kein Ergebnis bekommst und somit dein Set in einen Fehler läuft, weil deine Range-Variable Zielzelle leer ist.
Versuch mal:
Set Zielzelle = Range("1:1").Find(what:=cell.Value, lookin:=xlvalues, lookat:=xlPart)
So bekommst du aber immer den ersten Treffer. Für das Beispiel also die Zelle CE2
Gruß Werner
Anzeige
AW: Fehlermeldung nicht nachvollziehbar
14.03.2019 17:08:56
Memo
Hallo Werner,
ich denke ich habe mich falsch ausgedrückt.
Also der Code soll M4 schauen wenn da V3 steht dann soll er in die entsprechende Zelle wo V3 (Plan) steht hin und dort das Datum auslesen. Also in dem Fall muss er in CF4 springen und das Datum auslesen und dann schauen wenn das Datum größer als heute + 1 Monat ist dann nix tun. Wenn das Datum Kleiner als heute +1 Monat ist dann komplette Zeile Gelb färben und all die gelb gefärbten Zeilen als neue Datei zur Verfügung stellen sodass ich nur Speicherdatum und Name zu wählen habe.
Ich hoffe ich konnte mich ausdrücken.
Danke für deine genommene Zeit.
VG
Memo
Anzeige
AW: Fehlermeldung nicht nachvollziehbar
20.03.2019 13:43:05
Memo
Hi Werner,
sorry für die verspäte Rückmeldung.
Besten Dank für deinen Code.
Nach ausführen hat er eine Fehlermeldung gebracht, weil "loLetzteZ" anscheinend nicht deklariert war. Habe dann Dim loLetzteZ As Long deklariert. Danach hat es funktioniert.
Suchbereich und Suchtext habe ich angepasst/geändert - Von Vx zu ILx (Plan)-.
Soll dich nicht durcheinander bringen.
Option Explicit
Sub Filtern()
Dim raZelle As Range, raZielzelle As Range
Dim daDatum As Date, loLetzte As Long
daDatum = DateSerial(Year(Date), Month(Date) + 1, Day(Date))
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
For Each raZelle In .Range("M4:M" & loLetzte).SpecialCells(xlCellTypeConstants)
Select Case raZelle.Value
Case "IL2 (Plan)", "IL3 (Plan)", "IL4 (Plan)", "IL4 (Plan)"
Set raZielzelle = .Range("2:2").Find(what:=raZelle.Value, _
LookIn:=xlValues, lookat:=xlPart)
If Not raZielzelle Is Nothing Then
If .Cells(raZelle.Row, raZielzelle.Column + 1) 

Jedoch wird keine einzige Zeile Gelb gefärbt und in den zweiten Arbeitsblatt werden keine richtigen Zeilen aufgelistet.
Ich habe nun die große Pivot Tabelle nahezu 1:1 nachgestellt.
Gerne würde ich diese hier hochladen wollen, jedoch Sie übersteigt die max. Grenze von 300 KB. Die nachgestellte Datei ist 923 KB groß.
Ich würde die Datei dir gerne als PN schicken, wenn du damit einverstanden wärst oder es dir irgendwie anderst zukommen lassen?
VB
Memo
Kann ich Sie
Anzeige
AW: Fehlermeldung nicht nachvollziehbar
14.03.2019 16:59:35
Alexandra
Hi Memo,
ich werde die Datei sicher nicht nachbauen! Lade die Datei bei Dropbox oder Onedrive hoch und stelle hier den Link rein!
LG
Alexandra
AW: Fehlermeldung nicht nachvollziehbar
14.03.2019 17:30:47
Memo
Hi Alexandra,
ich habe jetzt die Pivot extrem runtergebrochen, als normale excel file gespeichert ohne makros und lade diese nun hier hoch.
Hoffe das hilft dir weiter.
Gruß
Memo
Anzeige
übrigens....
14.03.2019 17:06:07
Werner
Hallo,
...solltest du dabei immer mit entsprechender Fehlerbehandlung arbeiten. Nämlich genau für den Fall, dass der Suchbegriff nicht gefunden wurde und dir dann die Set Anweisung nicht in einen Fehler läuft.
Zudem sollten bei Find grundsätzlich die weiteren Parmeter mit angegeben werden. Excel speichert nämlich die Suchparameter der letzten Such ab. Wenn du die im Code nicht explizit mit angibst, dann wird einfach auf die abgespeicherten Parameter zurückgegriffen, was dann zu unerwarteten Ergebnissen führen kann.
Nach diesem Motto:
Set Zielzelle = Range("1:1").Find(what:=cell.Value, lookin:=xlvalues, lookat:=xlPart)
If not Zielzelle Is Nothing Then
'hier der weitere Code bei Treffer
Else
Msgbox "Der Suchbegriff ist nicht vorhanden."
End If
Und am Schluß des Codes sollten alle mit Set gesetzten Variablen auch wieder geleert werden.
Set Zielzelle = Nothing
Gruß Werner
Gruß Werner
Anzeige
AW: übrigens....
14.03.2019 17:26:58
Memo
Hi Werner,
sorry das ist schon viel zu hoch für mich. Bin noch neu im VBA Umfeld.
Was ist denn nun bei diesem Code falsch und wie muss es abgeändert werden, damit genau das was du betonst nicht passiert (excel soll nicht auf vorherige Suche greifen). Sondern Bereich M4 bis M5000 schauen bzw. suchen ob V2,V3,V4,V5 vorhanden ist dann springen zu V2(Plan) usw...
Sub Filtern()
Dim cell, Zielzelle As Range
For Each cell In Range("M:M").SpecialCells(xlCellTypeConstants)
If cell.Value = "V1" Or cell.Value = "V2" Or cell.Value = "V3" Or cell.Value = "V4" Or  _
cell. _
Value = "V5" Then
Set Zielzelle = Range("2:2").Find(cell.Value)
If Year(Zielzelle.Offset(cell.Row - 1, 1)) & Format(Month(Zielzelle.Offset(cell.Row -  _
1, _
1)), "0#") 
Danke.
VG
Memo
Anzeige
AW: übrigens....
14.03.2019 18:58:03
Alexandra
Hallo Memo,
ändere als erstes mal die V2 (Plan) usw. in V2 nur, den das wird gesucht laut dem Code!
LG
Alexandra
AW: übrigens....
15.03.2019 09:13:14
Memo
Hi Alexandra,
an das liegt es nicht. Wenn ich einen Teil der Pivot Tabelle in eine andere Excel kopiere und den Code drüber laufen lasse, geht es.
Es geht nur nicht in der Pivot.
VG
Memo
AW: übrigens....
15.03.2019 12:42:03
Daniel
Ich glaube eher, das ganze Problem liegt darin, dass du uns immer nur normale Daten in einer Excel Tabelle zur Verfügung stellst, bei dir aber mit einer Pivot Tabelle arbeitest. Das sind einfach zwei verschiedene Welten. Den Code für normale Excel Tabellen kannst du nicht für eine Pivot Tabelle verwenden. Hatte ich auch schon ein paar Mal erwähnt...
Gruß
Daniel
Anzeige
AW: übrigens....
15.03.2019 11:07:22
Werner
Hallo,
teste mal:
Sub Filtern()
Dim raZelle As Range, raZielzelle As Range
Dim daDatum As Date
daDatum = DateSerial(Year(Date), Month(Date) + 1, Day(Date))
Application.ScreenUpdating = False
For Each raZelle In Range("M:M").SpecialCells(xlCellTypeConstants)
Select Case raZelle.Value
Case "V1", "V2", "V3", "V4", "V5"
Set raZielzelle = Range("2:2").Find(what:=raZelle.Value, _
LookIn:=xlValues, lookat:=xlPart)
If Not raZielzelle Is Nothing Then
If Year(raZielzelle.Offset(raZelle.Row - 1, 1)) 
Gruß Werner
AW: übrigens....
15.03.2019 13:34:18
Memo
Hi Werner,
danke für die Rückmeldung.
Dein Code habe ich direkt über die originale Pivot Tabelle laufen lassen.
Es wird zwar ausgeführt, aber keine einzige Zeile wird gelb hervorgehoben.
Dein Code funktioniert tadellos in einer stinknormalen Excel file. Ich habe sogar 1600 Zeilen kopiert und eingefügt. Darunter sollten exakt 798 Zeilen gelb markiert werden, das tut dein Code tadellos.
Jedoch funktioniert derselbe Code mit derselben Angaben/Bereichvorgaben leider nicht in der blöden Pivot.
Der zu analysierende Bereich ist ja nur 2187 Zeilen. In der Pivot tut sich aber leider nichts.
Ich wollte sogar die Pivot komplett kopieren und als Werte in eine neue excel ohne markos einfügen.
Aber beim einfügen werden nicht alle 2187 zeilen eingefügt, egal wie ich es anstelle, obwohl ich komplett alles kopiere.
Nun stehe ich vor ein neues Problem.
Ich würde aber sehr gerne Wissen wollen, warum ein tadellos funktionierender VBA Code nicht in einer Pivot oder in dieser Pivot funkt bzw. wie ich diese Pivot mit den exakten Inhalt reproduzieren kann ohne Datenverlust?
Danke für deine Unterstützung.
VG
Memo
Anzeige
AW: übrigens....
15.03.2019 13:50:33
Daniel
Hab ich jetzt schon etliche Male geschrieben, aber egal. Musst ja nicht drauf hören, aber bitte stelle die gleichen schon beantworteten Fragen nicht immer wieder.
AW: übrigens....
15.03.2019 14:24:13
Memo
Hi Daniel,
sorry ich würde gerne den Grund dafür wissen wollen, warum ein VBA Code nicht in einer Pivot Tabelle funktioniert, wenn schon VBA der Grundbaustein der Office Anwendungen ist.
Was kann Pivot was VBA nicht kann?
Gibt es für eine Pivot Tabelle eine gesonderte VBA Programmiersprache?
Heisst es quasi eine Pivot könnte man definitiv nicht mithilfe VBA vereinfachen/analysieren/auswerten?
Grüße
Memo
AW: übrigens....
15.03.2019 14:50:26
Daniel
Eine Pivot Tabelle ist ein Objekt in Excel. Denke mal an ein Diagramm - da kannst du auch nicht nach belieben Daten verändern, markieren oder ausblenden. Es verarbeitet Hintergrunddaten (eine Datentabelle) und du kannst damit eine große Menge einzelner Datensätze in übersichtlicher Form darstellen.
Eine Pivot Tabelle ist da ganz ähnlich.
Um etwas an den dargestellten Daten zu ändern, musst du immer die Datentabelle, die dahinter liegt ändern. Insofern wirst du zwar mit VBA die Pivot Tabelle bearbeiten können, aber auch da dann nur die Darstellung der Daten und andere in Pivot verfügbare Mechanismen. Einzelne Zeilen färben oder gar ausblenden wird aber so nichts.
AW: übrigens....
15.03.2019 14:17:44
Memo
Hi Werner,
dein Code funktioniert, jedoch markiert er auch Zeilen bei denen das Datum nicht zutrifft.
Habe ein Bild hochgeladen, wo die Lösung nach ausführen des Codes zeigt.
Da kannst auch sehen, dass die Zeilen mit x eigentlich nicht gelb gefüllt werden dürften, weil das Datum in den blau unterstrichenen Zellen nicht kleiner als heute+1 Monat ist.
Userbild
Kannst du mir sagen wo hier der Fehler liegt in dem Code?
Danke.
VG
Memo
AW: übrigens....
15.03.2019 16:00:37
Werner
Hallo,
da war vom "alten Code" versehentlich ein Year mit drin geblieben.
Jetzt nochmal der Code, orientiert an deiner Beispielmappe:
Überschriften in Zeile 2, Daten ab Zeile 4
Suche in Spalte A
Sub Filtern()
Dim raZelle As Range, raZielzelle As Range
Dim daDatum As Date, loLetzte As Long
daDatum = DateSerial(Year(Date), Month(Date) + 1, Day(Date))
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
For Each raZelle In .Range("A4:A" & loLetzte).SpecialCells(xlCellTypeConstants)
Select Case raZelle.Value
Case "V1", "V2", "V3", "V4", "V5"
Set raZielzelle = .Range("2:2").Find(what:=raZelle.Value, _
LookIn:=xlValues, lookat:=xlPart)
If Not raZielzelle Is Nothing Then
If .Cells(raZelle.Row, raZielzelle.Column + 1) 

Daten werden gefärbt und ins Blatt 2 kopiert.
Gruß Werner
AW: übrigens....
15.03.2019 16:12:03
Daniel
Alles schön und gut Werner, wird ihm jedoch auch nichts nützen solange er versucht den Code über ner Pivot Tabelle laufen zu lassen...
AW: übrigens....
15.03.2019 16:29:24
Werner
Hallo Daniel,
das dürfte ihm ja inzwischen klar sein. Die letzte Frage bezog sich dann ja wohl auch auf seine Tabelle mit den "Grunddaten".
Gruß Werner
AW: übrigens....
20.03.2019 13:49:00
Memo
Hi Werner,
zunächst sorry für die verspätete Rückmeldung.
Besten Dank für deinen Code.
Nach ausführen hat er eine Fehlermeldung gebracht, weil "loLetzteZ" anscheinend nicht deklariert war. Habe dann Dim loLetzteZ As Long deklariert. Danach hat es funktioniert.
Suchbereich und Suchtext habe ich angepasst/geändert - Von Vx zu ILx (Plan)-.
Soll dich nicht durcheinander bringen.
Option Explicit
Sub Filtern()
Dim raZelle As Range, raZielzelle As Range
Dim daDatum As Date, loLetzte As Long
daDatum = DateSerial(Year(Date), Month(Date) + 1, Day(Date))
Application.ScreenUpdating = False
With Worksheets("Tabelle1")
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
For Each raZelle In .Range("M4:M" & loLetzte).SpecialCells(xlCellTypeConstants)
Select Case raZelle.Value
Case "IL2 (Plan)", "IL3 (Plan)", "IL4 (Plan)", "IL4 (Plan)"
Set raZielzelle = .Range("2:2").Find(what:=raZelle.Value, _
LookIn:=xlValues, lookat:=xlPart)
If Not raZielzelle Is Nothing Then
If .Cells(raZelle.Row, raZielzelle.Column + 1) 

Jedoch wird keine einzige Zeile Gelb gefärbt und in den zweiten Arbeitsblatt werden keine richtigen Zeilen aufgelistet.
Ich habe nun die große Pivot Tabelle nahezu 1:1 nachgestellt.
Gerne würde ich diese hier hochladen wollen, jedoch Sie übersteigt die max. Grenze von 300 KB. Die nachgestellte Datei ist 923 KB groß.
Ich würde die Datei dir gerne als PN schicken, wenn du damit einverstanden wärst oder es dir irgendwie anderst zukommen lassen?
VB
Memo

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige