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

Wert aus Formal als Bedingung für If Abfrage in VBA

Wert aus Formal als Bedingung für If Abfrage in VBA
23.09.2023 10:20:50
Padde86
Hallo, ich bin bei VBA noch ein echter Neuling, daher hoffe ich ihr könnt mir helfen.

Es geht darum, dass in Zeile A1 auf verschiedenen Blättern jeweils eine Formel steht, die ausgibt, ob in der Zeile H35 oder J35 ein Wert steht, sprich einfache WENN Abfrage (Wenn wert dann 1)

Im VBA möchte ich gerne, dass wenn die Formel eine 1 ausgibt ein anderes Blatt ausgeblendet wird. Das funktioniert auch alles nahezu, jedoch nicht mit dem Wert aus einer Formel, sondern nur wenn ich eine 1 selbst in das Feld schreibe.

Ist es möglich das Ergebnis aus einer Formel in Excel als Wert für meine IF Abfrage in VBA einzuarbeiten?

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
23.09.2023 10:48:21
GerdL
Hola,

welches Makros hast du ?
Die Formel ist in welcher Tabelle in A1 ?
Welche Tabelle ist bei 1 aus-/ und bei 0 einzublenden ?

cu Gerd
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
23.09.2023 11:33:07
Beverly
Hi,

benutze das Change-Ereignis des Tabellenblattes und überwache die Eingabe in die Zellen H35 und J35 - nach diesem Prinzip:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address(0, 0) = "H35" Or Target.Address(0, 0) = "J35" Then
If Range("A1") = 1 Then
'hier was gemacht werden soll
Else
'hier was andernfalls gemacht werden soll
End If
End If
End Sub


Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
23.09.2023 11:57:07
Padde86
Hi Karin,

Genau das hab ich drin, aber das klappt leider nicht :(
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
25.09.2023 09:59:06
Padde86
So, endlich am Computer - habe die Tabelle eben etwas abändern müssen:
Jetzt ist A1 hinfällig und es sieht wie folgt aus:

In Tabe T35 ist die Abfrage ob irgendwo ein entsprechender Wert ist und wenn ja wird eine 1 in T35 ausgegeben. Die Formel darin lautet:
=WENN(R35=1;1;WENN(S35=1;1;WENN(H35>0;1;WENN(J35="";"";1))))

Im VBA habe ich folgendes stehen:


Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$T$35" Then

If Target = 1 Then

Sheets("Januar").Visible = False
Sheets("Februar").Visible = False
Sheets("März").Visible = False
Sheets("April").Visible = False
Sheets("Mai").Visible = True
Sheets("Juni").Visible = True
Sheets("Juli").Visible = True
Sheets("August").Visible = False
Sheets("September").Visible = False
Sheets("Oktober").Visible = False
Sheets("November").Visible = False
Sheets("Dezember").Visible = False

Else

Sheets("Januar").Visible = False
Sheets("Februar").Visible = False
Sheets("März").Visible = False
Sheets("April").Visible = True
Sheets("Mai").Visible = True
Sheets("Juni").Visible = True
Sheets("Juli").Visible = False
Sheets("August").Visible = False
Sheets("September").Visible = False
Sheets("Oktober").Visible = False
Sheets("November").Visible = False
Sheets("Dezember").Visible = False

End If

End If


End Sub


Habe den Vorschlag von Karin versucht entsprechend einzubauen - leider ohne Erfolg

Das Wäre jetzt Tabelle 3 (März)
Anzeige
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
25.09.2023 10:15:46
Beverly
Kann so auch nicht funktionieren, denn du darfst mit dem Change-Ereignis nicht die Zelle mit der Formel überwachen sondern musst die Zellen überwachen, die das Formelergebnis der Zelle beeinflussen: also nicht mehr nur wie ursprünglich H35 und J35 (mein Code bzw. deine ursprüngliche Angabe) sondern auch neu dazugekommen R35 und S35 - das muss in der ersten If-Anweisung stehen.
Außerdem steht in meinem Code nicht, dass du in der zweiten If-Abweisung Target überwachen sollst, sondern die Zelle mit der Formel - ursprünglich A1 (mein Code bzw. deine Angabe) muss neu T35 sein.

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
26.09.2023 17:28:53
daniel
Hi
das Change-Event spricht nur an, wenn bei einem konstanten Zellwert dieser Wert geändert wird oder wenn bei einer Formel der Formeltext geändert wird ( dh es wird eine neue Formel eingeben)
das Change-Event spricht nicht an, wenn eine Formel neu berechnet wird und es ein neues Ergebnis gibt.
du müsstest hier schon das Calculate-Event verwenden, das wird immer dann ausgelöst, wenn eine Formel neu berechnet wird (wobei es egal ist, ob sie dann auch ein neues Ergebnis erhält oder nicht)
im Calculate-Event kannst du aber nicht ermitteln, welche Zelle neu berechnet wird (es gibt kein Target), was dann zur Folge hat, dass dein Marko recht häufig ausgeführt wird, was eine flackrige Angelegenheit werden könnte.
es ist daher anzuraten, den .Visible-Zustand eines Tabellenblatts nur dann zu ändern, wenn es erforderlich ist, also das Sheets(x).Visible = False nur dann auszuführen, wenn das Blatt auch sichtbar ist und nicht, wenn es sowieso schon ausgeblendet ist.

also im prinzip so
Private Sub Worksheet_Calculate()   

If Range("T35").value = 1 Then
if Sheets("Januar").Visible = -1 Then Sheets("Januar").Visible = 0
if Sheets("Februar").Visible = -1 Then Sheets("Februar").Visible = 0
... und so weiter


beachte, dass die .Visble-Eigenschaft eines Tabellenblatts nicht True und False ist, sondern es drei Einstellungen gibt:
-1 (sichtbar), 0 (ausgeblendet) und 2 (ausgeblendet und nur über VBA einblendbar)

True und False funktionieren, weil VBA ein True wie -1 und ein False wie 0 interpretiert.

Gruß Daniel

Anzeige
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
28.09.2023 08:17:21
Padde86
Hi Daniel,

danke für den Hinweis, wieder was gelernt :)
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
25.09.2023 10:40:31
GerdL
Moin,
wenn in R,S,H,J in Zeile 35 Eingabezellen sind, genügt dies:
Private Sub Worksheet_Change(ByVal Target As Range)


Dim a As Integer, b As Boolean


Select Case Target.Address(0, 0)
Case "R35", "S35", "H35", "J35"
b = (Range("T35") = 1)
For a = 1 To 12
Sheets(MonthName(a)).Hidden = b
Next
End Select


End Sub

Gruß Gerd
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
25.09.2023 11:14:10
Padde86
Hallo Gerd und Karin,

leider sind das nicht die einzigen Eingabefelder - ich hatte mir das offenbar zu einfach vorgestellt.

Ich habe mal anbei die Datei etwas abgespeckt reingepackt.
https://www.herber.de/bbs/user/163099.xlsm

Das neue Problem ist dann wohl weitreichender, da in R und S abgefragt wird, ob es sich um einen Sonntag oder Samstag handelt und wenn ja eine andere Zeile abgefragt werden soll - sprich ich kann in einem Sheet (Erklärungen und Grunddaten) eingeben, welches Jahr wir haben - dann wird in "Funktionen" berechnet, wann welcher Tag ist und Feiertag etc und das wiederrum im "Januar" als Beispiel entsprechend ausgegeben. Am besten ihr werft einen Blick drauf, dann wird es ggf klar was ich meine, bin leider nicht so gut im Erklären :D

Somit wären dann ja weitere Abfragen bei anderen Sheets notwendig, oder?
Anzeige
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
25.09.2023 15:42:38
Padde86
Das Problem ist wahrscheinlich auch, dass das Datum sich bereits aus Formeln zusammensetzt, oder? :(
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
25.09.2023 18:22:41
Beverly
Ich nehme an, der Code soll wirksam werden wenn in die Spalten D, G oder J etwas eingetragen wird?
Folgenden Code ins Codemodul DieseArbeitsmappe:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Select Case Sh.Name
Case "Januar", "Februar", "März", "April" '== hier die restlichen Monatsnamen ergänzen!!!
If Target.Row > 4 Then
Select Case Target.Column
Case 4, 7, 10
If Cells(Target.Row, 1) > "" Then
If Sh.Range("T35") = 1 Then
'hier der Code was bei T35 = 1 gemacht werden soll
Else
'hier der Code was gemacht werden solle wenn T35 nicht 1 ist
End If
End If
End Select
End If
End Select
End Sub


Übrigens: in deinem Code steht im If-Teil dasselbe wie im Else-Teil - wozu dann überhaupt eine Unterscheidung, wenn in beiden Fällen dasselbe gemacht werden soll...?

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
26.09.2023 17:09:56
Padde86
Hi Karin,

vielen Dank für die Unterstützung - langsam komme ich dahinter wo mein Denkfehler liegt und wie das klappt - VBA ist leider Neuland für mich aber finde es sehr interessant.

Zu den Bedingungen IF ... 1

Ich kann das ja entsprechend abfragen welcher Monat, also hab es aktuell so ergänzt, dass davor lasse ich jetzt weg, ist ja von dir:



If Sh.Range("T35") = 1 Then

If Sh.Name = "März" Then

Sheets("Januar").Visible = False
Sheets("Februar").Visible = False
Sheets("März").Visible = True
Sheets("April").Visible = True
Sheets("Mai").Visible = True
Sheets("Juni").Visible = False
Sheets("Juli").Visible = False
Sheets("August").Visible = False
Sheets("September").Visible = False
Sheets("Oktober").Visible = False
Sheets("November").Visible = False
Sheets("Dezember").Visible = False

Else

Sheets("Januar").Visible = False
Sheets("Februar").Visible = True
Sheets("März").Visible = True
Sheets("April").Visible = True
Sheets("Mai").Visible = False
Sheets("Juni").Visible = False
Sheets("Juli").Visible = False
Sheets("August").Visible = False
Sheets("September").Visible = False
Sheets("Oktober").Visible = False
Sheets("November").Visible = False
Sheets("Dezember").Visible = False


Jetzt würde das Selbe wieder mit Februar etc folgen - ist jetzt eigentlich nur Copy-Paste
Die Frage trotzdem, ist es möglich dass ich die Monate irgendwie deklariere und dann das Ganze mit einer Schleife ablaufen lasse? Keine Ahnung ob das hier auch mit einer Do-While-Schleife läuft - C hab ich damals gelernt, der Aufbau ist ja ähnlich

Idee wie es je Monat sein soll:

Anzeige ist bis T35 1 wird Aktueller Monat + Vormonat + Folgemonat
Wenn T35 1 ist (Monat fertig ausgefüllt) verschwindet Vormonat, da ab dem nächsten Eintrag ja der noch aktuelle Monat zum Vormonat wird. Es taucht daher den Übernächste Monat bereits auf. (Angenommen wir gehen von März aus wird Feb - Apr angezeigt - Mit T35 1 im März wird dann März - Mai angezeigt)
Anzeige
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
26.09.2023 20:09:28
Beverly
Ganz so funktioniert dein Konzept nicht, denn die Formel steht nicht immer in Zelle T35, je nachdem wieviele Tage der Monat hat - das muss berücksichtigt werden. Versuche es mal so:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Dim intStart As Integer
Dim intZaehler As Integer
Dim lngLetzte As Long
Select Case Sh.Name
Case "Funktionen", "Erklärung und Grunddaten"
Case Else
If Target.Row > 4 Then
lngLetzte = Sh.Cells(Rows.Count, 1).End(xlUp).Row
Select Case Target.Column
Case 4, 7, 10
If Cells(Target.Row, 1) > "" Then
If Sh.Cells(lngLetzte, 20) = 1 Then
Select Case Sh.Name
Case "Januar", "Februar"
intStart = 1
Case "März"
intStart = 2
Case "April"
intStart = 3
Case "Mai"
intStart = 4
Case "Juni"
intStart = 5
Case "Juli"
intStart = 6
Case "August"
intStart = 7
Case "September"
intStart = 8
Case "Oktober"
intStart = 9
Case "November", "Dezember"
intStart = 10
End Select
For intZaehler = 1 To 12
If Worksheets(intZaehler).Index intStart + 1 Or Worksheets(intZaehler).Index > intStart + 3 Then
Worksheets(intZaehler).Visible = False
Else
Worksheets(intZaehler).Visible = True
End If
Next intZaehler
End If
End If
End Select
End If
End Select
End Sub


Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
Rückfragen
27.09.2023 17:48:13
Beverly
So absolut verständlich ist deine Arbeitsmappe leider nicht.
1. wie schon geschrieben gibt es Blätter, bei denen nicht T35 die Zelle mit der Formel ist da der betreffende Monat weniger Tage hat
2. wenn ich das richtig verstehe, soll der Blattwechsel beim letzten Eintrag stattfinden. Welche Zelle ist denn konkret die letzte Zelle in die der Eintrag erfolgen muss, damit das nächste Monatsblatt aufgerufen werden soll? Eine 1 wird doch generell berechnet, wenn in Spalte G oder in Spalte J etwas eingetragen wird. Und im Blatt Dezember z.B. wird 1 ausgegeben sowohl in Zeile 33 (Freitag 29.12.) als auch in Zeile 35 (Sonntag 31.12.).
4. dürfen an Wochenenden überhaupt Eintragungen gemacht werden?

Aufgrund dieser (und vielleicht noch weiterer, die mir nur noch nicht augefallen sind) Ungereimtheiten würde ich dir eine andere Vorgehensweise vorschlagen, und zwar keine vollautomatisierte sondern eine vom Benutzer gesteuerte - füge auf jedem Blatt zwei Schaltfläche ein: eine zum Vorwärts- und eine zum Rückwärtsblättern. Dann kann der Benutzer den Zeitpunkt selbst entscheiden wann er umblättern möchte und zusätzlich noch in welche Richtung.

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Rückfragen
28.09.2023 08:16:39
Padde86
Hallo Karin,

da wir bei uns auch immer wieder mal an einem Wochenende arbeiten ist das beabsichtigt aber an sich tatsächlich trotzdem überflüssig.
Eine Anpassung dass die Abfrage in T35 in allen Blättern ist hätte ich vorgenommen, allerdings klappt deine Formel bis auf eine Kleinigkeit, welche ich selbst abgeändert bekommen habe, super.

Die Idee mit dem vorwärts und rückwärts Blättern finde ich aber super. Ich kann ja mit STRG Bild-Auf und STRG Bild-Ab das theoretisch auch als Makro aufzeichnen, allerdings ist die Frage wie ich das mit dem einblenden und ausblenden des nächsten Blatts mache - gibt ja die Option den Text jeden Monat als Makro einzupflegen, dann ist mir natürlich klar wie - dachte aber ich frage mal, da ich anhand eures Codes langsam ein paar Dinge lerne und mich sehr dafür interessiere, wie du das machen würdest.

Liebe Grüße
Lösungsvorschlag: Vor-Zurück mittels Schaltfächen
28.09.2023 13:30:15
Beverly
Im Anhang meine Lösung mittels Schaltflächen zum Folge- und zum Vormonat.
Man könnte bei Bedarf noch eine Abfrage einbauen, ob man tatsächlich wechseln will, falls die Zelle mit der Formel noch nicht 1 ausgibt - aber ob das notwendig ist kann ich nicht einschätzen.
Ich habe übrigens die Formel nach Zelle T1 verschoben - wenn ich das richtig sehe ist es nicht von essentieller Bedeutung, wo die Formel steht, es würde aber auf jeden Fall jeglichen Code vereinfachen wenn es in jedem Blatt dieselbe Zelle ist.

https://www.herber.de/bbs/user/163152.xlsm

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
AW: Wert aus Formal als Bedingung für If Abfrage in VBA
23.09.2023 11:58:49
Padde86
Muss korrigieren, muss doch nochmal schauen dann poste ich das komplett

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige