Discussion:
Kommentar per VBA, wenn bestimmte Bedingung erfüllt
(zu alt für eine Antwort)
Johnny Hartmannsgruber
2007-09-04 09:30:02 UTC
Permalink
Hallo,

ich habe folgendes Problem:

Im Blatt "quelle" gibt es die Spalte F "Best EK" - der Inhalt kommt per
WENN-Formel aus den Spalten P, Q oder R in denen verschiedene EK's stehen....
Je nachdem welche der 3 Spalten den günstigsten Preis beinhaltet, wird in F
eingetragen...

jetzt hätte ich gerne,daß in "Best EK" ein Kommentar erstellt wird, in dem
ich sehe: der inhalt der zelle kommt beispielsweise aus Spalte Q - damit ich
sehe woher der Preis stammt...

kann man sowas realisieren?
Danke, Johnny
Claus Busch
2007-09-04 10:35:07 UTC
Permalink
Hallo Johnny,
Post by Johnny Hartmannsgruber
Im Blatt "quelle" gibt es die Spalte F "Best EK" - der Inhalt kommt per
WENN-Formel aus den Spalten P, Q oder R in denen verschiedene EK's stehen....
Je nachdem welche der 3 Spalten den günstigsten Preis beinhaltet, wird in F
eingetragen...
jetzt hätte ich gerne,daß in "Best EK" ein Kommentar erstellt wird, in dem
ich sehe: der inhalt der zelle kommt beispielsweise aus Spalte Q - damit ich
sehe woher der Preis stammt...
probiers mal so im Codemodul des entsprechenden Arbeitsblattes:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim strComment As String

If Intersect(Target, Range("F:F")) Is Nothing _
Then Exit Sub

Select Case Target.Value
Case Is = Target.Offset(0, 10).Value
strComment = "Wert aus Spalte P"
Case Is = Target.Offset(0, 11).Value
strComment = "Wert aus Spalte Q"
Case Is = Target.Offset(0, 12).Value
strComment = "Wert aus Spalte R"
End Select

If Target.Comment Is Nothing Then
Target.AddComment strComment
Else
Target.Comment.Delete
Target.AddComment strComment
End If

End Sub


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Claus Busch
2007-09-04 11:06:08 UTC
Permalink
Hallo Johnny,

ich nochmals.
Da du ja in Spalte F eine Formel hast und Änderungen in P:R gemacht werden,
ändere das Vorgehen. Kopiere folgenden Code in ein Modul:
Sub KommentareEinfügen()

Dim strComment As String
Dim rngZelle As Range
Dim Lrow As Long

Lrow = Cells(Rows.Count, 6).End(xlUp).Row

For Each rngZelle In Range("F2:F" & Lrow)

Select Case rngZelle.Value
Case Is = rngZelle.Offset(0, 10)
strComment = "Wert aus Spalte P"
Case Is = rngZelle.Offset(0, 11)
strComment = "Wert aus Spalte Q"
Case Is = rngZelle.Offset(0, 12)
strComment = "Wert aus Spalte R"
End Select

If rngZelle.Comment Is Nothing Then
rngZelle.AddComment strComment
Else
rngZelle.Comment.Delete
rngZelle.AddComment strComment
End If

Next
End Sub

und diesen Code in das Codemodul des entsprechenden Arbeitsblattes:
Private Sub Worksheet_Change(ByVal Target As Range)

If Range("P:Q") Is Nothing _
Then Exit Sub

KommentareEinfügen

End Sub


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Johnny Hartmannsgruber
2007-09-04 12:24:05 UTC
Permalink
hi,
bin wie beschreiben vorgegangen....
wenn ich ejtzt eine zelle ändere, dann wird der code ja ausgrführt...
allerdings kommt dann ein fehler und er stoppt in zeile
"rngZelle.AddComment strComment"

woran kann das liegen?

DAnke, Johnny
Post by Claus Busch
Hallo Johnny,
ich nochmals.
Da du ja in Spalte F eine Formel hast und Änderungen in P:R gemacht werden,
Sub KommentareEinfügen()
Dim strComment As String
Dim rngZelle As Range
Dim Lrow As Long
Lrow = Cells(Rows.Count, 6).End(xlUp).Row
For Each rngZelle In Range("F2:F" & Lrow)
Select Case rngZelle.Value
Case Is = rngZelle.Offset(0, 10)
strComment = "Wert aus Spalte P"
Case Is = rngZelle.Offset(0, 11)
strComment = "Wert aus Spalte Q"
Case Is = rngZelle.Offset(0, 12)
strComment = "Wert aus Spalte R"
End Select
If rngZelle.Comment Is Nothing Then
rngZelle.AddComment strComment
Else
rngZelle.Comment.Delete
rngZelle.AddComment strComment
End If
Next
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("P:Q") Is Nothing _
Then Exit Sub
KommentareEinfügen
End Sub
Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Claus Busch
2007-09-04 12:37:04 UTC
Permalink
Hallo Johnny,
Post by Johnny Hartmannsgruber
bin wie beschreiben vorgegangen....
wenn ich ejtzt eine zelle ändere, dann wird der code ja ausgrführt...
allerdings kommt dann ein fehler und er stoppt in zeile
"rngZelle.AddComment strComment"
hast du die Prozedur KommentareEinfügen in ein Standardmodul und die
Ereignisprozedur im Codemodul des entsprechenden Blattes?
In welchem Bereich änderst du etwas in einer Zelle? Ich hatte es probiert
mit der Formel =MIN(P2:R2) in F2 und heruntergezogen. Wenn ich nun im
Bereich P:R etwas ändere, passiert das Gewünschte. Falls du aber in F statt
der Formel einen Wert eingibst und dieser nicht mit einem Wert in P:R
übereinstimmt, kommt der Fehler.Aber aus deinem ersten Posting hatte ich
geschlossen, dass in F eine Formel steht und keine Werte händisch
eingetragen werden.
Hab ich dich falsch verstanden?


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Johnny Hartmannsgruber
2007-09-04 12:52:06 UTC
Permalink
Hi Claus,

ja der Code steht im Modul und das Worksheet_Change steht in dem Blatt...
meine Formel in F sieht folgendermaßen aus:
=WENN(P29>0;MIN(P29:Q29);Q29) => hier jetzt nur bis Q

wenn ich dann in dem blatt rumspiele bzw. was ändere startet das makro auch
- jedoch eben mit der fehlermeldung 1004 "anwendung oder objektdef. fehler"

keine ahnung wieso...?
vielleicht kann ich dir die datei mal mailen?
Johnny
Post by Claus Busch
Hallo Johnny,
Post by Johnny Hartmannsgruber
bin wie beschreiben vorgegangen....
wenn ich ejtzt eine zelle ändere, dann wird der code ja ausgrführt...
allerdings kommt dann ein fehler und er stoppt in zeile
"rngZelle.AddComment strComment"
hast du die Prozedur KommentareEinfügen in ein Standardmodul und die
Ereignisprozedur im Codemodul des entsprechenden Blattes?
In welchem Bereich änderst du etwas in einer Zelle? Ich hatte es probiert
mit der Formel =MIN(P2:R2) in F2 und heruntergezogen. Wenn ich nun im
Bereich P:R etwas ändere, passiert das Gewünschte. Falls du aber in F statt
der Formel einen Wert eingibst und dieser nicht mit einem Wert in P:R
übereinstimmt, kommt der Fehler.Aber aus deinem ersten Posting hatte ich
geschlossen, dass in F eine Formel steht und keine Werte händisch
eingetragen werden.
Hab ich dich falsch verstanden?
Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Claus Busch
2007-09-04 12:55:03 UTC
Permalink
Hallo Johnny,
Post by Johnny Hartmannsgruber
ja der Code steht im Modul und das Worksheet_Change steht in dem Blatt...
=WENN(P29>0;MIN(P29:Q29);Q29) => hier jetzt nur bis Q
wenn ich dann in dem blatt rumspiele bzw. was ändere startet das makro auch
- jedoch eben mit der fehlermeldung 1004 "anwendung oder objektdef. fehler"
keine ahnung wieso...?
vielleicht kann ich dir die datei mal mailen?
ja, kannst du machen. Meine Adresse ist reply-fähig.

Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Eberhard Funke
2007-09-04 16:59:54 UTC
Permalink
Post by Johnny Hartmannsgruber
=WENN(P29>0;MIN(P29:Q29);Q29) => hier jetzt nur bis Q
Hallo Johnny,

könntest Du uns mal verraten, wie Deine ursprüngliche Formel aussieht?
Da Du Werte aus den Spalten P, Q oder R zurückerhalten willst, muss es sich
in Spalte F um eine verschachtelte Formel handeln vom Typ:
=wenn(Eingabezelle=x;Dies;wenn(Eingabezelle=y;Das;Jenes))
Wo befindet sich die Eingabezelle, deren Wert geprüft werden soll?
Wird der Wert in der Eingabezelle über die Tastatur eingetippt, oder steht
dort eine Formel?
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Claus Busch
2007-09-04 17:17:30 UTC
Permalink
Hallo Eberhard,
Post by Eberhard Funke
könntest Du uns mal verraten, wie Deine ursprüngliche Formel aussieht?
Da Du Werte aus den Spalten P, Q oder R zurückerhalten willst, muss es sich
=wenn(Eingabezelle=x;Dies;wenn(Eingabezelle=y;Das;Jenes))
Wo befindet sich die Eingabezelle, deren Wert geprüft werden soll?
Wird der Wert in der Eingabezelle über die Tastatur eingetippt, oder steht
dort eine Formel?
in den Spalten P bis R *können* Einkaufspreise aus 3 verschiedenen Quellen
stehen. In Spalte F soll dann der niedrigste Preis reinkommen. Da die
Spalten P:R nicht immer komplett ausgefüllt sein müssen, habe ich Johnny
geraten statt einer verschachtelten WENN-Formel in F4 die Matrixformel
=MIN(WENN(P4:R4;P4:R4)) zu verwenden.

Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Eberhard Funke
2007-09-04 17:47:28 UTC
Permalink
Post by Claus Busch
in den Spalten P bis R *können* Einkaufspreise aus 3 verschiedenen Quellen
stehen. In Spalte F soll dann der niedrigste Preis reinkommen. Da die
Spalten P:R nicht immer komplett ausgefüllt sein müssen, habe ich Johnny
geraten statt einer verschachtelten WENN-Formel in F4 die Matrixformel
=MIN(WENN(P4:R4;P4:R4)) zu verwenden.
Danke Claus,

jetzt habe ich verstanden, was er vorhat: Eingaben in Spalten P:R,
Min-Ausgabe in Spalte F.

Dann sollte es auch so gehen:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Me.Columns("P:R")) Is Nothing _
Then Exit Sub
Dim rngSuch As Range
Dim rngTmp As Range
Set rngSuch = Range("P" & Target.Row & ":R" & Target.Row)
Set rngTmp = rngSuch.Find(what:=Range("F" & Target.Row).Value, _
lookat:=xlWhole, searchorder:=xlByColumns)
Range("F" & Target.Row).AddComment (rngTmp.Address)
End Sub
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Eberhard Funke
2007-09-04 18:08:33 UTC
Permalink
Post by Eberhard Funke
Set rngTmp = rngSuch.Find(what:=Range("F" & Target.Row).Value, _
lookat:=xlWhole, searchorder:=xlByColumns)
hier einfügen:
Range("F" & Target.Row).ClearComments
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Loading...