Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1484to1488
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

prüfen, ob WkB zu und specialcells

prüfen, ob WkB zu und specialcells
11.04.2016 21:01:06
Michael
Hi zusammen,
ich bin da auf zwei komische Sachen gestoßen:
a) Ich öffne eine andere .xls*, weise sie der workbook-Variablen aWB zu und knabbere an der Fehlerroutine.
  aWB.Close savechanges:=False
Set aWB = Nothing
Fehler:
If Not aWB Is Nothing Then aWB.Close savechanges:=False
So scheint es zu gehen, aber der erste Gedanke war, in der Zeile nach dem Fehler: zu überprüfen, was mit dem aWB ist.
  aWB.Close savechanges:=False
Fehler:
Msgbox aWB Is Nothing
gibt aber *immer* false zurück.
Es verwundert mich, daß die Variable noch existiert, obwohl das Ding geschlossen wurde.
b) wie macht man eine saubere Prüfung auf specialcells?
If Not aWB.Sheets("bla").Range("A1:B4").SpecialCells(xlCellTypeFormulas) Is Nothing Then

läuft auf 1004: keine Zellen gefunden, mit .count größer 0 das Gleiche, mit set range= sowieso.
Gibt es da was Eleganteres als...
- zunächst mit .find ("=") Formeln suchen, da brauche ich aber ne Schleife, ein = könnte ja auch im Text erscheinen...
- das prozedurweite OnError ausschalten, ein "kleines" nur für das specialcells reinmachen und abfragen und dann das "große" wieder anwerfen?
Ich hoffe, Euch fällt was dazu ein.
Schöne Grüße,
Michael

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: prüfen, ob WkB zu und specialcells
11.04.2016 21:26:20
Fennek
Hallo,
auch wenn es nicht direkt hilft, in meinem 'Nachbau' lief es korrekt.
Zu Punkt 1 will ich nichts sagen (ohne ein 'exit sub' ist es merkwürdig, direkt 'fehler' anzuhängen).
Das Einzige, was mir zu 2. einfällt, ist aWB richtig zugewiesen und exister "bla"?
Mfg

AW: prüfen, ob WkB zu und specialcells
11.04.2016 21:59:39
Piet
Hallo Michael,
ich habe zu SpecialCells einige Sachen ausprobiert, ua. mit Set, ohne Erfolg!
Nach meiner Erfahrung kommt man nicht umhin mit "On Error" zu arbeiten
um den Fehler "keine Zellen vorhanden" abzufangen. Dabei ist es egal ob
man den Befehl On Error Resume Next verwendet oder On Error Goto Fehler.
mfg Piet

Anzeige
AW: prüfen, ob WkB zu und specialcells
12.04.2016 10:47:28
Daniel
Hi
zu a)
die Variable enthält ja nicht das Objekt selbst, sondern nur den Verweis auf das Objekt.
So wie deine Visitenkarte ja auch nur den Verweis auf deinen Wohnort enthält und nicht das Haus selbst.
Wenn du das Objekt löscht, dann bleiben die Verweise auf dieses Objekt zunächst erhalten , so wie auf der Visitenkarte immer noch die alte Adresse steht, auch wenn du schon längst umgezogen bist und das Haus abgerissen ist.
Das Objekt selber weiss ja nicht, welche Variablen sich auf es beziehen, daher ist ein Löschen der Variablen automatisch zusammen mit dem Objekt nicht möglich.
zu b)
ja, das .SpecialCells muss man immer zusammen mit On Error verwenden.
da fällt mir jetzt auch nix besserers ein als das oder eine Suchschleife
Gruß Daniel

Anzeige
vielen Dank
12.04.2016 16:15:57
Michael
Hallo zusammen,
vielen Dank für Eure Antworten.
a) Daniels Erklärung leuchtet mir so weit ein; ich habe direkt nach das aWB.Close savechanges:=False mal ein msgbox aWB.name gesetzt, da kommt ein Automatisierungsfehler...
Eigentlich ist das das erste Mal, daß ich wirklich einen Grund sehe, ein Objekt auf nothing zu setzen.
@Fennek: ein exit sub muß nur rein, wenn man die Sub auch wirklich verlassen will: will ich aber (noch) nicht, da kommen noch ein paar Sachen.
b) Zwischenzeitlich hatte ich den Geistesblitz, zuvor ein countif(range,"=") oder countif(range,"=*") zu verwenden, aber beide tun's nicht, ZÄHLENWENN kann scheint's nach allem möglichen suchen, nicht aber nach einem "=".
Ich habe denn doch ein "Zwischen-On Error" eingebaut; eigentlich sind das ja auch nur drei Zeilen mehr und Ende.
Kürzlich war mal eine Diskussion über das Pasten mit xlvalues in einem Bereich, in dem diverse verbundene Zellen waren. Vor so einem Problem stand ich jetzt auch; deshalb diese Bocksprünge.
Das Ganze läuft in einer Schleife, so daß bei Blättern/Bereichen Variablen verwendet werden, und so scheint es brav zu tun:
Sub test()
Dim RFormeln As Range, c As Range
Dim blaetter As Variant
Dim j&
On Error GoTo fehler
'Datei öffnen, tu dies, tu das
For j = 1 To aWB.Sheets.Count
'tu dies, tu das
On Error GoTo weiter
Set RFormeln = aWB.Sheets(blaetter(1, j)).Range(blaetter(3, j)). _
SpecialCells(xlCellTypeFormulas)
For Each c In RFormeln: c.Value = c.Value: Next
weiter:
On Error GoTo fehler
'tu dies, tu das
Next
'tu dies, tu das, Datei schließen
fehler:
'tu dies, tu das
End Sub

Eigentlich wird nur die For-Schleife übersprungen, falls keine Formeln vorhanden sind.
Vielleicht kann's ja mal jemand gebrauchen.
Schöne Grüße,
Michael

Anzeige
AW: vielen Dank
12.04.2016 16:32:05
Daniel
Hi
naja, wenn du mal wba.close programmierst hast, dann sollte eigentlich klar sein, dass du dann die Variable wba nicht mehr verwenden darfst.
Excelfunktionen schauen immer nur in den Formelergebnissen, aber nie in den Formeltexten.
wenn du das On Error vermeiden willst, könntst du mit .FIND in den Formeltexten nach "beginnt mit =" suchen

dim FormelVorhanden as Range
set FormelVorhanden = Range(...).Find(what:="=*", lookat:=xlwhole, lookin:=xlvalues)
if FormelVorhanden is Nothing then
hier der code, wenn keine Formeln im Zellbereich vorhanden sind
else
hier dr Code, wenn Formeln vorhanden sind
End if
aber auch hier besteht das Risiko, dass mal ein Text vorliegen könnte, der mit "=" beginnt.
allerdings, wenn du sowieso nur die Formeln durch ihren Wert ersetzen willst, dann mach das einfach mit dem kompletten Zellbereich, egal ob da Formlen oder Werte drin stehen.
Wenn du die Werte durch den Wert ersetzt, verändert sich ja nichts:
Schleife ist dann nunnötig:
With Workbooks(...).Sheets(...).Range(...)
.formula = .value
end With
das ist in der Regel auch viel scheller, als wenn du jede Zelle einzeln umwandelst.
Gruß Daniel

Anzeige
@Daniel: danke & erledigt...
13.04.2016 17:10:11
Michael
Hi Daniel,
um Dich zu zitieren: "sollte eigentlich klar sein, dass du dann die Variable wba nicht mehr verwenden darfst"
Genau das ist der Punkt: warum wird sie dann nicht *automatisch* genothingt?
Aber gut, es ist müßig, über Billys Programmierung zu diskutieren.
Dein Vorschlag mit dem WITH sah auf den ersten Blick aus, als wär's das, was ich gesucht hatte, es funktioniert aber (in DIESEM Fall) leider nicht ganz wie erwartet, derweil es in einigen Zellen die Formatierung zerschießt: da steht tlw. so Zeug drin wie "5 - 7", aber leider nicht als Text, sondern als Standard formatiert, und hinterher isses mal wieder ein Datum.
Ich habe jetzt doch (warum nicht gleich?) ein copy-pastespecial getestet, und trotz irgendwelcher Probleme in besagtem, kürzlichen Thread (an dem hatte ich mich nicht beteiligt, insofern ist er unauffindbar), funktioniert es in meinem Fall wie es soll.
Was will ich mehr?
Vielen Dank nochmal & schöne Grüße,
Michael

Anzeige
AW: @Daniel: danke & erledigt...
13.04.2016 17:21:26
Daniel
HI
es gibt einen Funktionalen Unterschied zwischen: .Copy/.PasteSpecial xlpasteValues und .Formula = .Value
beim ersteren werden die Formelergebnisse so wie sie sind in die Zellen geschrieben.
beim zweiteren findet zusätzlich noch eine Typprüfung statt, so wie wenn du die Werte nochmal von Hand eingibst.
wenn du beispielsweise "5.7" oder "5-7" in eine Zelle eingibst, dann vermutet Excel eine Datumseingabe und wandelt diese Werte in das entsprechende Datum um.
gleiches macht auch .Formula = .Value.
beim .Copy/.PasteSpecial bleiben die Werte zunächsst so stehen.
Allerdings wird dann auch ein Formelergebnis "Leerstring" ("") nicht in eine echte Leerzelle gewandelt sonderen die Zelle ist dann nach dem .Copy/.PasteSpecial nicht leer, sondern enthält einen Text.
eine echte Leerzelle entsteht nur bei .formula = .Value
Gruß Daniel

Anzeige
AW: @Daniel: danke & erledigt...
15.04.2016 01:35:48
Michael
Hi Daniel,
danke für Deine Hinweise.
Soo detailliert musses bei mir nicht sein, ich habe mittlerweile auch einige Erfahrung...
Naja, aber heute habe ich wieder gekämpft, Mann.
Die specialcells sind echt nicht ohne, da findet sich das
https://www.herber.de/forum/archiv/1288to1292/1290900_VBA_Datenueberpruefung.html
aber aus irgendeinem Grund funzt das bei mir nicht: trotz on error bleibt der Interpreter mit einem 1004 stecken.
Ich habe auch schon aufgeschnappt, daß bei stackoverflow-Leuten das on error bei sp-cells auch nicht sauber gelaufen ist.
Egal, ich komme auch ohne das Ding aus...
dachte ich. Der nächste Anlauf war, nach leeren Zellen zu suchen, und sowohl in Excel direkt mit F5 als auch in VBA werden verbundene Zellen mitmarkiert: klar, da sind ja auch leere dabei.
Ich bin ja schon lange der Meinung, daß verb. Zellen der Feind des Programmierers sind, und das ist wieder mal eine dicke Bestätigung.
Naja, ich sag Dir nix Neues.
Schöne Grüße,
Michael

Anzeige
VerbundZellen trennen eher die Pgmmierer- ...
15.04.2016 13:58:50
Luc:-?
…Spreu vom -Weizen, Michael… ;->
Gruß, Luc :-?
Besser informiert mit …

wie meinst ets des?
15.04.2016 19:26:51
Michael
Hi Luc:-?,
- daß der "gute" Programmierer AUCH damit zurechtkommt oder
- sich gar nicht erst auf VZ einläßt?
Bei einer Neuentwicklung überlege ich mir als 1. Datenstrukturen, bevor ich Code schreibe, aber was willste machen, wenn schon x Tabellen mit grrr-Struktur vorhanden sind?
Gar nix, neu Entwickeln oder Durchbeißen...
In dem Fall habe ich mich für Letzteres entschieden und durchaus was dabei gelernt.
Na denn, frohes Schaffen & Gruß,
Michael

Anzeige
Na, dann isset doch jut! ;-) Lernen kann nie ...
15.04.2016 20:41:06
Luc:-?
…schaden, Michael;
und natürlich trifft die 1.Variante zu, denn mitunter sind diese ungeliebten Zellen auch sehr nützlich. Ich habe eher was gg Ausblendungen (⇒Mülleimer) inmitten von Tabellen (außer, wenn das über die Methoden Teilergebnis oder Filtern läuft).
SchöWE, Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige