PDA

Vollständige Version anzeigen : VBA - Zellwert auslesen


Carolina Schmidt
30.06.2015, 08:06
Hallo zusammen,
weiß jemand, wie ich einen Zellwert, der durch eine Formel entstanden ist, mit VBA auslesen kann?
Ich möchte abhängig, was in der Zelle (CD113) steht eine MsgBox einblenden lassen. Das funktioniert auch, wenn ich in die abgefragte Zelle (Formel) reinklicke und mit Return bestätige. Es soll aber alleine funktionieren!

Hier 'mal mein code:

If Not Intersect(Target, Range("CD113")) Is Nothing Then
If Range("CD113").Value = "mit Aufpreis" Then
MsgBox ("Aufpreis und Lieferzeit beachten.") & strText, 0, "Achtung!"
End If
End If

Viele Dank schon 'mal.
Grüße
Carolina

EarlFred
30.06.2015, 08:28
Hallo Carolina,

Du versuchst vermutlich, die Zelle mit dem Change-Ereignis zu überwachen und Dein Problem ist nun vermutlich nicht, wie Du den Zellwert auslesen kannst (das tut Dein Code ja), sondern dass das Change-Ereignis nicht auf eine Neuberechnung reagiert, sondern nur auf Eingaben, oder?

Das Calculate-Ereignis, das bei Neuberechnung ausgelöst wird, bezieht sich leider nicht auf eine Einzelzelle, so dass eine Prüfung umständlich wird und Dir möglicherweise kein brauchbares Ergebnis liefert.
Besser wäre es, wenn Du entweder
- die Eingabe in der Zelle überwachst, auf die sich Deine Formel in CD113 bezieht
- anstelle der von Dir verwendeten Formel eine UDF schreibst, die das gleiche berechnet, aber zusätzlich die MsgBox ausgibt.

'allgemeines Modul
Option Explicit

Function MeineFunktion(ByRef rngPrüfung As Range) As String
If rngPrüfung = 100 Then 'oder was auch immer
MeineFunktion = "mit Aufschlag!"
MsgBox "Aber bitte mit Sahne!"
Else
MeineFunktion = "kein Aufschlag heute mal"
End If
End Function

Aufruf aus der Tabelle mit
CD113:=MeineFunktion(A113)

Aber auf eins einigen wir uns: Wenn ein Nutzer der Tabelle 250 Zellen gleichzeitig ändert und danach 250 mal die MsgBox aufpoppt, dann steckst Du die Haue, die Du von den Nutzern dafür bekommst, alleine ein, OK? ;)

Grüße
EarlFred

Carolina Schmidt
30.06.2015, 09:24
Hallo EarlFred,
leider bekomme ich das so nicht hin.
Nochmal zum besseren Verständnis ...
Ich schreibe den oberen Code in ein Modul.

... und wie schreibe ich den unteren in das Tabellenblatt?

Vielen Dank
Grüße
Carolina

EarlFred
30.06.2015, 09:39
Hallo Carolina,

CD113:=MeineFunktion(A113)
soll heißen:
In die Zelle CD113 kommt die Formel =MeineFunktion(A113).

Grüße
EarlFred

Carolina Schmidt
30.06.2015, 10:42
Hallo EarlFred,

super, dass funktioniert!!!!
Vielen, vielen Dank! :hands:

Jetzt möchte ich es nur noch schaffen, dass oben bei der msgBox wieder "Achtung!" steht und nicht Microsoft Excel.

Ich hatte das ja so gelöst:
If Not Intersect(Target, Range("CD113")) Is Nothing Then
If Range("CD113").Value = "mit Aufpreis" Then
MsgBox ("Aufpreis und Lieferzeit beachten.") & strText, 0, "Achtung!"
End If
End If

... aber das funktioniert mit diesem Code nicht.

Grüße
Carolina

EarlFred
30.06.2015, 10:49
Hallo Carolina,

mit diesem Code
mit welchem?

Grüße
EarlFred

Carolina Schmidt
30.06.2015, 11:28
Hallo EarlFred,

ich habe einen Teil von meinem Code versucht mit einzubauen:

Option Explicit
Function MeineFunktion(ByRef rngPrüfung As Range) As String
If rngPrüfung = "mit Aufpreis" Then
MeineFunktion = "mit Aufpreis"
MsgBox "Aufpreis und Lieferzeit beachten." & strText, 0, "Achtung!"
Else
MeineFunktion = "ohne Aufpreis"
End If
End Function

Aber das geht nicht!

Grüße
Carolina

Hasso
30.06.2015, 12:04
Hallo Carolina,
bei mir wird die MsgBox korrekt angezeigt, wenn ich die Variable strText deklariere, was du nicht getan hast. Woher kommt denn der Wert für strText?Option Explicit

Function MeineFunktion(ByRef rngPrüfung As Range) As String
Dim strText As String
If rngPrüfung = "mit Aufpreis" Then
MeineFunktion = "mit Aufpreis"
MsgBox "Aufpreis und Lieferzeit beachten." & strText, 0, "Achtung!"
Else
MeineFunktion = "ohne Aufpreis"
End If
End Function

EarlFred
30.06.2015, 12:41
Hallo Carolina,

Aber das geht nicht!
solche Aussagen nützen keinem etwas. Bitte beschreibe ordentlich, was passiert / nicht passiert / anders ist als erwartet / welcher Fehler (Zeile, Nummer, Beschreibung) auftritt.

Ausschlaggebend dafür, ob im Titel der MsgBox der Standardtext ("Micrososft Excel") steht oder Dein gewünschter ist, dass das Argument Tilte von Dir belegt wird.

Grüße
EarlFred

Carolina Schmidt
14.07.2015, 09:48
Hallo,
jetzt bin ich wieder da (Kind war krank)!

@Hasso
Danke, so funktioniert das!!

@EarlFred
Kann ich "MeineFunktion" auch nur auf einen bestimmten Bereich anwenden?
Jetzt kommt die Meldung nämlich bei meinen anderen Makros auch.:entsetzt:

Viele Grüße
Carolina