Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
688to692
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
688to692
688to692
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

#Bezug! umgehen

#Bezug! umgehen
03.11.2005 10:53:26
Stefan
Hallo
Ich habe ein Problem mit #Bezug!, welches ich gerne umgehen möchte.
Und zwar habe ich in einem Tabellenblatt folgende Formel:
{=SUMME((Jahresstatistik!B9:B65536="Mo")*(Jahresstatistik!E9:E65536=8)*(Jahresstatistik!G9:L65536))}
Diese Formel sucht mir aus einem anderem Tabellenblatt hinterlegte Wert raus welche den Kriterien entsprechen. Hier werden alle Vorgänge zusammengezählt welche Montags um 8 Uhr stattfinden.
Nun ist das Problem, dass ich in dem anderen Tabellenblatt ein Makro laufen habe, wo man die Datensätze aktualisieren kann. Dass heißt es wird erstmal in der Tabelle alles gelöscht und dann die Werte neu übertragen.
Da durch dass löschen in dem Tabellenblatt "Jahresstatistik" kurzzeitig keine Werte mehr vorhanden sind bekomme ich in obiger Formel #Bezug! angezeigt, was mir soweit ja einleuchtet. Ich müsste händisch wieder den Bezug korrekt herstellen damit die obige Formel wieder funktioniert.
Sie sieht nämlich nach dem Makro wie folgt aus:
{=SUMME((Jahresstatistik!#BEZUG!="Mo")*(Jahresstatistik!#BEZUG!=8)*(Jahresstatistik!#BEZUG!))}
Ich möchte nun dass Problem irgendwie umgehen, sprich dass die Summe Formel gewissermaßen "fest" steht und trotz Makroeinsatzes sich nicht verändert und #Bezug! ausgibt.
Wie kann ich dass bewerkstelligen? Der Abfragebereich der Zellen von zum Beispiel B9:B65536 bleibt ja immer gleich, egal welche Daten das Makro innerhalb dieses Bereiches schreibt. Der Sinn ist ja immer durch diese Formel die aktuellen Werte zu berechnen.
Wer kann mir hier helfen?
Gruss
Stefan

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: #Bezug! umgehen
03.11.2005 11:08:00
Basti
Hallo Stefan,
ich habe zwar nicht die Lösung, aber ich kann mir nicht vorstellen, dass Excel den Bezug durch das Löschen des Inahltes verliert. Löscht dein Makro evtl. die Felder oder gar kurzfristig die Tabelle? Dann solltest du es auf das Löschen des Inhalt beschränken:
worksheets("x").Range("yz")=""
trotzdem viel Erfolg
Basti
AW: #Bezug! umgehen
03.11.2005 11:29:30
Erich
Hallo Stefan,
da sehe ich zwei Möglichkeiten:
1.
Du verzichtest im Blatt Jahresstatistik darauf, der Formel den Boden unter den Füßen wegzuziehen (also kein Löschen der Zellen), und lässt das Makro die alten Werte in den Zellen mit neuen Werten füllen.
2.
Dein Makro liest die Formel vor dem Löschen der Zellen - etwa mit Cells(...).Formula - und überschreibt die dann mit dem Löschen falsch gewordene Formel mit der ursprünglichen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: #Bezug! umgehen
03.11.2005 11:43:46
Stefan
@Erich
Also dass ich einfach ohne vorher zu löschen neu einfüge funktioniert nicht so einfach, da ich dem Makro auch noch eine Funktion drin ist welche stets neue Zeilen einfügt, sprich ein Datensatzblock bestehend aus 2.800 Zeilen wieder 2.800 Zeilen nach unten wandert, damit ein anderer Datenblock (welcher aus Tabellenblättern Januar-Dezember) jeweils rauskopiert wird und darüber eingefügt werden kann. So habe ich in meiner Jahresstatistik 33.600 theroetisch gefüllte Zellen untereinander. Und für jeden Monat kann ja jeder Block geändert sein, entweder nur 1400 Zeilen mit Werten, ein Monat nur mit 2.800 leeren Zellen (keine Daten) usw.
Wenn ich nun einfach überschreibe hängt sich meine Arbeitsmappe komplett auf, die Berechnung dauert ewig. Es liegt denke ich daran dass schnell die 65536 Zeilen (max. Unterstützung durch Excel) erreicht sind und die vorhandenen gefüllten Zellen ja immer weiter nach unten bis hin zum Ende verschoben werden. Deswegen habe ich es ja immer so gelöst, dass ich erst den Bereich bis 65536 markiere und dann lösche um so wieder Platz für die neuen Datenblöcke habe.
Bitte gib mir noch mal detailierte Hilfestellung zu Deinem 2. Vorschlag, da kann ich at hoc nichts mit anfangen.
Bin schon gespannt ob dass dann evtl. klappt.
Gruss
Stefan
Anzeige
AW: #Bezug! umgehen
03.11.2005 12:53:48
Erich
Hallo Stefan,
zu Vorschlag 2:
Nehmen wir mal an, die Formel steht in Zelle C7 des Blatts "XYZ", und dein Makro sieht so aus:

'   ... Code
'   ... Zellen löschen in "Jahresstatistik"
'   ... weiterer Code
'   ... Zellen einfügen in "Jahresstatistik"
'   ... noch mehr Code

Wenn du dann dieses Makro so ergänzt:

Dim myFormel As String
myFormel = Sheets("XYZ").Range("C7").FormulaArray
Sheets("XYZ").Range("C7").ClearContents
'   ... Code
'   ... Zellen löschen in "Jahresstatistik"
'   ... weiterer Code
'   ... Zellen einfügen in "Jahresstatistik"
'   ... noch mehr Code
Sheets("XYZ").Range("C7").FormulaArray = myFormel

dann sollte es funzen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: #Bezug! umgehen
03.11.2005 16:11:29
Erich
Hallo Stefan,
bei dem Code, den ich heute Mittag gepostet habe, geht die Formel verloren, wenn VBA vor dem Wiederherstellen der Formel abstürzt oder sonst beendet wird. Die Formel ist ja nur in einer (lokalen) Varioablen gespeihert.
Besser wäer, die Formel in der Tabelle zu sichern, aber als Text, nicht als Formel. (In diesem Text steht die Formel auf Englisch - es gibt leider kein "FormulaArrayLocal".
Das sieht dann so aus:

Sheets("XYZ").Range("C7") = "'" & Sheets("XYZ").Range("C7").FormulaArray
'   ... Code
'   ... Zellen löschen in "Jahresstatistik"
'   ... weiterer Code
'   ... Zellen einfügen in "Jahresstatistik"
'   ... noch mehr Code
Sheets("XYZ").Range("C7").FormulaArray = Sheets("XYZ").Range("C7")

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige