Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Formeln per VBA in Zellen eintragen

Formeln per VBA in Zellen eintragen
23.05.2024 16:31:18
rem0ria
Hallo liebe Community,

erst einmal ein großes Lob und Dankeschön an die Personen, die hier sehr aktiv bei Problemen geholfen haben.
Bin seit Jahren ein stiller Leser und mir wurde schon in anderen Beitragen sehr oft weitergeholfen! Danke!

Nun habe ich aber ein Problem, zu dem ich leider keine wirkliche Antwort finde:

In einer intelligenten Tabelle kann ich Artikel eingeben und entsprechend werden mir die Listenpreise angezeigt.
Nun kann es vorkommen, dass der Artikel zu einem anderen Preis angeboten worden ist und der per Formel gezogene Preis überschrieben wird.
Wird nun der Preis gelöscht, möchte ich, dass per VBA automatisch wieder die Formel in die entsprechende Zelle eingetragen wird.
Bei der Formel unten wird mir aber ein Laufzeitfehler 1004 ausgespuckt. Ändere ich die "Formel" z.B. in =summe(t1:t5), funktioniert alles einwandfrei.
Habe auch schon versucht die Formel durch SVERWEIS und auch ohne die dynamischen Zellbezüge zu verwenden, alle beenden mit Fehler 1004.

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)

Dim iZeile As Long
For iZeile = 4 To Range("T37").End(xlUp).Row
If IsEmpty(Cells(iZeile, 20)) Then
Cells(iZeile, 20).Formula = "XVERWEIS([@Artikel];Tab_Artikel[Name];Tab_Artikel[Listenpreis];"";0)"
End If
Next iZeile
End Sub


Gibt es hier eine Möglichkeit?

Vielen Dank im Voraus.

Liebe Grüße
rem0ria

Anzeige

33
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formeln per VBA in Zellen eintragen
23.05.2024 16:42:51
schauan
Hallöchen,

mal ein erster Hinweis - da fehlt das "=" am Beginn der Formel. Zudem musst Du auch auf die Sprache achten deswegen gibt es Formula und FormulaLocal
AW: Formeln per VBA in Zellen eintragen
23.05.2024 16:44:38
{Boris}
Hi,

Ändere ich die "Formel" z.B. in =summe(t1:t5), funktioniert alles einwandfrei.

Glaub ich nicht, denn Formula verlangt die englische Schreibweise. Du solltest FormulaLocal verwenden.

Weiter: Eine Formel beginnt IMMER mit einem =Zeichen.
Zudem müssen Anführungszeichen, die Bestandteil der Formel sind, DOPPELT geschrieben werden.

VG, Boris
Anzeige
AW: Formeln per VBA in Zellen eintragen
23.05.2024 21:18:40
rem0ria
Ihr habt Recht, beim Testen habe ich es allerdings mit den englischen Schreibweisen versucht, also hab ich nicht SUMME() sondern SUM() genutzt, genauso habe ich es auch mit XLOOKUP() versucht. Habe wohl beim zurücksetzen auf die Originalformeln das Gleichzeichen vergessen.

AW: Formeln per VBA in Zellen eintragen
23.05.2024 18:32:57
daniel
Hi
das solltest du ohne Makro lösen mit einer zusätzlichen Spalte.
in der Spalte trägst du den alternativpreis ein (bsp in Spalte P)
in der eigentlichen preisspalte steht dann =Wenn(P2="";XVerweis(...Listenpreis...);P2)

dh wenn die Spalte P leer ist, wird der Listenpreis ausgegeben und wenn nicht, der Wert aus Spalte P,
so mit kannst du das ohne Makro steuerern und du hast immer im Blick, wo der Listenpreis angewendet wird und wo eine Preisalternative eingetragen wurde.

Gruß Daniel
Anzeige
AW: Formeln per VBA in Zellen eintragen
23.05.2024 22:21:14
daniel
Hi
ich würde das nicht im Calculate-Event machen sondern im Change-Event, dh dann, wenn die Inhalte tatsächlich gelöscht werden.

dim rng as range

set rng = Range("T4:T" & Range("T37").end(xlup).row)
if not intersect(Target, rng) is nothing then '--- Änderung im relevanten Bereich
if Target(1).value = "" Then '--- Inhalte wurden gelöscht
application.EnableEvents = False
intersect(target, rng).SpecialCells(xlcelltypeblanks).FormulaLocal = "=XVERWEIS([@Artikel];Tab_Artikel[Name];Tab_Artikel[Listenpreis];"""";0)"
application.EnableEvents = true
end if
end if


Gruß Daniel
Anzeige
AW: Formeln per VBA in Zellen eintragen
24.05.2024 10:02:43
rem0ria
Hallo zusammen,

danke für die vielen Infos.

Habe hier mal meine Tabelle hochgeladen:
https://www.herber.de/bbs/user/169686.xlsm

Es geht um die Tabelle in den Spalten Q:X

Man gibt den Artikel an und der Listenpreis erscheint. In Abhängigkeit auch von der Spalte Rabatt wird in der Mitte des Tabellenblattes entsprechend alles zusammengetragen und ausgegeben. Ich bin noch neu in dem Thema der intelligenten Tabellen, daher ist dies auch ein Versuch, wie sich diese verhalten und was ich alles damit "anstellen" könnte.

Der Tipp mit dem Change-Event anstatt Calculate hört sich auf jeden Fall sinnig an. Der Hinweis mit der Hilfsspalte für einen individuellen Preis muss ich mir noch überlegen, da wieder mehr Abhängigkeiten dazu kommen und ich schauen muss, ob ich das abfragetechnisch dann so korrekt hinbekomme.


Beste Grüße
rem0ria




Anzeige
AW: Formeln per VBA in Zellen eintragen
24.05.2024 15:39:05
daniel
Der Hinweis mit der Hilfsspalte für einen individuellen Preis muss ich mir noch überlegen, da wieder mehr Abhängigkeiten dazu kommen und ich schauen muss, ob ich das abfragetechnisch dann so korrekt hinbekomme.

die Hilfsspalte hast du doch schon drin, nämlich für den Rabatt.
diese könnte man für beides nutzen (den ein Rabatt ist ja auch eine Abweichung vom Listenpreis)
mit einer eingabe einer Zahl kleiner 1 (%) ist ein Rabatt gemeint, eine Zahl größer 0 ist ein Alternativpreis

Gruß Daniel
Anzeige
AW: Formeln per VBA in Zellen eintragen
27.05.2024 14:05:49
rem0ria
Da die Spalte Rabatt aber auch für einen tatsächlichen Rabatt herhalten muss, kann ich schlecht beides in einer Spalte verknüpfen.

Aber ich habe über deinen Vorschlag nachgedacht und werde auf eine zusätzliche Spalte ausweichen, in der der Alternativpreis bei Bedarf eingetragen werden kann.
Anders hätte ich das Ganze zwar "cooler" gefunden, aber deine Argumente dagegen hab mich zumindest überzeugt. Danke für den gedanklichen Input!
Anzeige
AW: Formeln per VBA in Zellen eintragen
23.05.2024 23:28:23
Oppawinni
Entschuldige mal, aber
1)
if not intersect(Target, rng) is nothing then
gewährleistet nicht, dass Target(1) Element von rng ist.
2)
ist es vielleicht sinnvoll, wenn man schon
application.EnableEvents = False
setzt, dann auch eine Fehlerbehandlung einzubauen.
Guten Morgen
Anzeige
AW: Formeln per VBA in Zellen eintragen
24.05.2024 08:16:41
daniel
1. Korrekt. Ist hier aber unwichtig.
Wenn man den Löschbutton klickt, dann sind alle Zellen von Target leer, also reicht es aus eine Zelle zu prüfen, egal welche

2. Ich bevorzuge es, Fehler im Vorfeld durch Abfragen zu vermeiden und das Problem dadurch zu minimieren, dass die Events nicht für den ganzen Code deaktiviert werden, sondern nur dort, wo es notwendig ist, so dass bei Fehlern an anderer Stelle das Problem nicht Auftritt.



Anzeige
AW: Formeln per VBA in Zellen eintragen
24.05.2024 08:20:50
Oppawinni
Also das nennt man dann aber Chaos Code mein Freund
AW: Formeln per VBA in Zellen eintragen
24.05.2024 14:44:47
schauan
Hallo Daniel,

1)
von t37 aus kommst Du erst mal ans Ende der it nach t36, egal, ob da was drin steht.
2)
wenn Du von t36 hoch gehst, kommst Du unter der Zeile raus, wo gelöscht wurde - je nachdem, wo noch Formeln bzw. Daten stehen
3)
On Error ist ja nun nicht unbedingt dafür geschaffen, es an den Makroanfang zu setzen und es dann bis zum Ende so zu belassen. Bei der Fehlerbehandlung sollte man mE ein gesundes Maß zwischen Aufwand für Prüfungen und On Error finden. Bei der Programmierung recht sparsam einsetzen, für die Anwendung dann ggf breiter bzw. Du machst Dir eine Booket - List was die Anwender Deinem Programm mit ihrer Kreativität antun wollen.
Du müsstest genau genommen schon prüfen, ob es das Blatt noch gibt, wo Du was machen willst. Hat es eventuell einen Blattschutz, stehen die richtigen Daten drin usw. Eben alles, was ein findiger Anwender oder auch Excel Dir so für Steine in den Weg legen kann.
Dazu gehören dann aber auch entsprechend Meldungen.
Jegliche Fehler zu umschiffen bedeutet dann auch einen Mehraufwand an Programmierung.
Mal ein Beispiel, ok, ein kleines:-)
Wenn Du prüfen willst, ob ein Blatt existiert, kannst Du in einer Schleife über alle Blätter die Namen abgleichen, bei Treffer ggf. eine boolsche Variable auf True setzen, eventuell die Schleife verlassen - ok, die ist hier nicht allzu zeitintensiv, und anhand der Variable dann irgendwie weiter machen.

Mit On Errror machst Du es vielleicht so:
on error resume next 'oder was wie goto errorhandler mit Meldungsausgabe oder was auch immer

a=sheets(sname).name
on error goto 0
if a=sname then ... else ...

intelligenterweise nimmst Du eine Funktion, um ein sub nicht mit zu vielen Fehlerbehandlungen zu überfrachten:
sub test()

if sheet_exist("MeinBlatt") Then ... else ...
End Sub
private function sheet_exist(strName as string) as boolean
on error resume next
a=sheets(strName).name
if not isempty(a) then sheet_exist = true
End Function


Anzeige
AW: Formeln per VBA in Zellen eintragen
24.05.2024 09:12:00
daniel
Seit wann ist systematisches Vorgehen und das vorzeitige vermeiden von Fehlern durch entsprechende Prüfungen „Chaos“? Ist es nicht eher chaotisch, blind in eine Situation reinzulaufen und dann auf auftretende Fehler nur zu reagieren anstatt sie zuvermeiden?

Ist es nicht so gar systematisch, sich gedanken darüber zu machen, wo Fehler passieren können und diese im Vorfeld zu vermeiden?

Anzeige
AW: Formeln per VBA in Zellen eintragen
24.05.2024 09:49:07
Oppawinni
Dein Code ist schlicht nicht sauber und darüber muss nicht weiter diskutiert werden. Für jemanden, der sich maßlos über Stringvergleich aufregen kann, bist du gegenüber deinem eigenen Bockmist ganz schön tolerant.
AW: Formeln per VBA in Zellen eintragen
27.05.2024 00:51:49
Oppawinni
So, ich hab jetzt mal geschaut, der Thread von Said ist ja scheinbar schon im Archiv.
Schade, vielleicht komme ich morgen mal dazu zu schauen, inwieweit du da geholfen hast, wie du es zugesagt hast.
Zu der Frage hinsichtlich Events..
Wenn du die Events abschaltest betrifft das ja die Application, und selbst wenn du in deiner Selbstherrlichkeit davon überzeugt sein solltest, dass du es ausschließen könntest, dass ein Fehler auftritt der dazu führt, dass die Events nicht mehr wieder aktiviert werden, so ist es ja ein Post für einen User, dem du aber nicht deine Selbstherrlichtkeit übertragen kannst.
Du hast es auch unterlassen, darauf hinzuweisen, dass es unbedingt erforderlich ist, sicher zu stellen, dass die Events in jedem Fall wieder aktiviert werden.
Du kannst dich auf den Kopf stellen und den Füssen wackeln, aber es ist für Normalsterbliche notwendig eine Fehlerbehandlung vorzusehen, nicht für Götter.
Grundsätzlich könnte man sagen, ok deine fehlerhafte Abfrage von Target(1), wird wahrscheinlich folgenlos bleiben.
Da müsste schon jemand irgend etwas dummes tun, aber Menschen tun dumme Dinge.... Unfehlbare und sonstige Götter natürlich nicht.
Soviel für heute.
Es sieht leider nicht so aus, dass ich diese Woche viel Zeit für deine Spielchen haben werde, aber eins will ich dir noch mit geben..
Unterlasse es gefälligst Fragesteller als dumm zu bezeichnen, sonst könnte es sein, dass ich ernsthaft böse werde.
Anzeige
AW: Formeln per VBA in Zellen eintragen
27.05.2024 10:29:51
daniel
ich hab nix zugesagt.
wenn du von mir was willst, kann ich dir das gerne liefern, aber dann müssen wir uns auch darüber unterhalten, wie deine Gegenleistung aussieht.

zum anderen:
ein Forum ist ein Forum, das zunächst einmal einfache Fragen beantwortet.
Ein Forum kann keine Programmierausbildung ersetzen und es ist auch kein Ort, wo man sich "schlüsselfertige" Lösungen einfach abholen kann.
Anzeige
AW: Formeln per VBA in Zellen eintragen
27.05.2024 11:11:55
Oppawinni
Will sagen, dass du dich nicht gekümmert hast. Ich mach mir später noch die Mühe und suche dir heraus, was du geschrieben hattest...
Aber keine Angst du bist der Letzte dem ich irgend einen Auftrag erteilen würde. Das liegt primär an deiner sozialen Inkompetenz und zum anderen an deinen mangelnden Fähigkeiten in Bezug auf Programmierung. Du hast Recht, es ist hier nicht der Ort für einen Programmierkurs, den du aber sicher nötig hättest.
Anzeige
AW: Off Topic
27.05.2024 22:13:46
Oppawinni
So,
https://www.herber.de/forum/archiv/1976to1980/1978516_zeilen_loeschen_wenn.html

Meine Frage:
Nicht um den Brei herum reden.
Willst du dich dem Thema annehmen, oder nicht?

Deine Antwort:
will ich und habe ich doch auch schon.

Dann bemüht sich Said noch dir eine Datei hochzuladen, die du gewünscht hattest
und dann..
sehe ich nichts weiter, Schweigen im Walde.

Davor noch dieser unsägliche Kommentar von dir:
hier schein der Schüler aber schon mit dem Ausführen einfacher Menübefehle nach Anweisung überfordert gewesen zu sein.
um mal Kinski/Giermann zu zitieren: "so blöd kann keiner sein"

Wäre das hier mein Forum wäre das dein letzter Post gewesen...
Einfach unterirdisch, was dir meinst leisten zu dürfen.

Ich bin vielleicht nicht der tollste Programmierer und auch länger nicht mehr in Programmiererkreisen unterwegs,
in Excel vielleicht auch nicht mehr ganz auf der Höhe,
aber ich erkenne immer noch, wann ich einen Profi vor mir habe.
Du bist, und es wird vielleicht einmal Zeit, dass dir das mal einer sagt, da du das offenbar noch nicht erkannt hast,
noch nicht einmal eine kleines Licht unter Programmierern und menschlich ohnehin untragbar.
Anzeige
AW: Off Topic
27.05.2024 22:24:23
daniel
da du hast recht, da hab ich mich ein bisschen im Ton vergriffen, das stimmt.
und nein, programmierprofi bin ich wirklich nicht.
aber das kann man mit einer Ausbildung, die aus 3 Tagen VBA-Grundlagen (Firmenintern) und ein bisschen Basic-Programmen aus Computerzeitschriften abschreiben beschränkt, auch nicht sein.

aber du hast ihm doch geholfen, bei dir ist er in kompetenten und freundlichen Händen.
dann kann ich mich ja auch zurückziehen.
also was sollst.
du darfst jetzt kräftig in die Tasten hauen und allen dein Wissen weitergeben.
Anzeige
AW: Off Topic
27.05.2024 22:47:48
Oppawinni
Ich hatte dir aber geschrieben, dass ich raus bin
Und ich hatte auch kaum noch Zeit. Auch das habe ich geschrieben. Es gibt halt manchmal wichtigeres als Excel-Forum.
AW: Off Topic
27.05.2024 23:09:28
daniel
dann musst du deine Prioritäten verschieben
ich bin ja unfähig.
AW: Off Topic
27.05.2024 23:16:22
Oppawinni
Dass ein Pfau ein Pfau bleibt, auch mit gestutzten Flügeln und gerupften Federn, war mir schon klar.
Du hättest das jetzt mit deinem Kommentar nicht noch unterstreichen müssen.
Anzeige
AW: Off Topic
27.05.2024 23:21:37
daniel
och, warum nicht
ich freue mich, in zukunft mehr von dir zu lesen.
AW: Formeln per VBA in Zellen eintragen
24.05.2024 11:37:35
daniel
dann hilf mir bitte mich weiter zu entwickleln
wie wäre der Code sauber?
wie würdest du ihn schreiben?
was würdest du anders machen und warum wäre das besser?

AW: Formeln per VBA in Zellen eintragen
24.05.2024 13:11:18
Oppawinni
Ich hab das Wochenende wenig Zeit und du hast auch noch eine offene Aufgabe....
Anzeige
AW: Formeln per VBA in Zellen eintragen
24.05.2024 13:38:28
daniel
soviel zeit solltst du dir nehmen, wenn du kein "ich hab recht und du hälst das Maul"-Typ sein möchest.


AW: Formeln per VBA in Zellen eintragen
24.05.2024 15:54:59
Oppawinni
Ich muss nichts beweisen. Du hast selbst bestätigt, dass dein Code nicht in Ordnung ist und deine Aufgabe hast du auch nicht erledigt. Böser Junge. :0=)). Spielchen spiele ich, wann ich will.
Anzeige
AW: Formeln per VBA in Zellen eintragen
24.05.2024 16:00:56
daniel
wenn du Spielchen spielst, muss ich dich ja nicht ernst nehmen.
also geh spielen.

AW: Formeln per VBA in Zellen eintragen
24.05.2024 17:33:12
Oppawinni
Natürlich geh ich spielen. Das ist, was Musiker insb. an Wochenenden mitunter tun.
AW: Formeln per VBA in Zellen eintragen
23.05.2024 18:41:24
daniel
noch ein Grund, warum du das so machen solltest wie von mir beschrieben:
Excel geht bei intelligenten Tabellen eigentlich davon aus, dass wenn eine Spalte eine Formel enthält, diese Formel für die Ganze Spalte gilt und überträgt die Formel in die ganze Spalte der Tabelle, wenn du sie in die erste Zelle einträgst.
oder auch wenn du Zeilen hinzufügts, werden solche Formeln dann automatisch in die neue Zeile übernommen.
Wenn du da jetzt in einder Spalte Festwerte und Formeln mischst, dann funktioniert das zwar prinzipiell, aber kann auch an manchen Stellen zu Problemen führen.
Besser ist also, in solchen Tabellen die Spalten "sortenrein" zu halten und in einer Spalte entweder Anwenderangaben ODER eine Formel vorsehen.
Gruß Daniel
Anzeige
AW: Formeln per VBA in Zellen eintragen
23.05.2024 16:42:50
BoskoBiati2
Hi,

eigentlich müsste es formulalocal heißen:

Cells(iZeile, 20).Formulalocal = "=XVERWEIS([@Artikel];Tab_Artikel[Name];Tab_Artikel[Listenpreis];"";0)"
Das passt so nicht...
23.05.2024 16:46:22
{Boris}
Hi Edgar,

die Anführungszeichen, die Bestandteil der Formel sind, müssen doppelt geschrieben werden.

VG, Boris
Anzeige
AW: Das passt so nicht...
23.05.2024 16:53:15
BoskoBiati2
Hi Boris,

hast recht, habe ich ganz übersehen.

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige