Microsoft Excel

Herbers Excel/VBA-Archiv

Wer weiß Rat ? VBA

Betrifft: Wer weiß Rat ? VBA von: Paul
Geschrieben am: 01.09.2004 19:02:43

Hallo Forum,
ich hätte nochmal ein Anliegen,


in untenstehendem VBA-Skript habe ich das Problem, dass der wert in Zelle F18, bei Überschreitung des Schwellenwertes von 100 in Zelle F16, bestehen bleibt.

Ich hätte es eigentlich gerne, dass in F18 erst ein Wert eingesetzt wird, wenn in F16 ein Wert steht (Summe in F16 wird erst gebildet wenn in den darüberliegenden Zellen Werte eingetragen sind (Summenbildung über "Wenn-Istzahl-dann....")) Übersteigt die Summe in F16 den Wert 100, dann soll der Wert 1,75 in F18 gelöscht werden, um vom Anwender den enstsprechenden Wert eintragen zu lassen.
Geht sowas ??

Private Sub Worksheet_Calculate()
	    If [f16] < 100 Then
        	[f18] = 1.75
	    End If
	End Sub




Desweiteren habe ich noch bei nachfolgendem Skript ein Problem:
Bei Eintrag des Schlüsselwortes "luft" in bspw. A1 das VBA-Skript ausgeführt. Allerdings muss das Schlüsselwort genau so in die Zelle eingetragen werden. Läßt sich auch realsieren, dass das Schlüsselwort "luft" ein Fragment des Eintrages in der Zelle sein kann (also bspw. "Luftkissen" o.ä.) und das Skript, unabhängig von Groß- oder Kleinschreibung, auch ausgeführt wird ?

Wenn der Anwender das Formular zurücksetzen möchte und dabei alle Einträge wieder löscht, dann meldet sich der Debugger. Offensichtlich macht es Probleme wenn ein Zelleintrag über die "Entf-Taste" gelöscht wird. Lässt sich sowas auch abstellen ?

Private Sub Worksheet_Change(ByVal Target As Range)
	Dim intRow As Integer
	intRow = Target.Row
	If Target.Column = 1 Then _
	    If Target = "luft" Then	<== Diese Zeile markiert der Debugger
		...
		....
		.....


Ihr habt mir bisher schon erfolgreich helfen können. Würde mioch freuen, wenn es
für die letzten Probleme auch eine Lösung gäbe.

Gruß Paul


  


Betrifft: zu Frage 2 von: Nepumuk
Geschrieben am: 01.09.2004 19:44:44

Hallo Paul,

1. intRow = Target.Row erzeugt einen Fehler wenn der User in Zeile 32.768 einen Wert ändert.

2. Wenn der User mehr als eine Zelle auf einmal ändert erzeugt die abfrage von Target.Value einen Fehler, da keine einzelne Cellsobjekt sondern ein Rangeobjekt abgefragt wird.

3. Wenn du also abgefragt hast, ob Traget.Count = 1 ist, dann kannst du den Vergleich wie folgt machen: If LCase(Target.Value) Like "*luft*" Then

Gruß
Nepumuk


  


Betrifft: Frage 2 besteht weiterhin von: Paul
Geschrieben am: 02.09.2004 21:04:48

Hallo Nepomuk und all die anderen,

das erste Problem konnte ich lösen, aber beim zweiten Teil meiner Frage bin ich nicht weiter gekommen.
Was muss ich an meinem Skript ändern, damit das Rücksetzen des Formulars ohne Fehlermeldung von statten geht?
Wie schaff ich es , dass das Schlüsselwort "Luft" auch als Fragment in einem Zelleintrag gefunden wird ? (und die entsprechende Aktion ausgeführt wird)


Gruß Paul


  


Betrifft: AW: Frage 2 besteht weiterhin von: Nepumuk
Geschrieben am: 02.09.2004 21:17:36

Hallo Paul,
wie schon gestern geschrieben, so:


Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lngRow As Long
    lngRow = Target.Row
    If Target.Column = 1 And Target.Count = 1 Then
        If LCase(Target.Value) Like "*luft*" Then
'            dein Code
        End If
    End If
End Sub


Gruß
Nepumuk


  


Betrifft: zu frage 1 von: harry
Geschrieben am: 02.09.2004 10:14:15

hi paul,
meinst du das so in der art?

If [f16] = 0 Then
[f18].Clear
ElseIf [f16] < 100 Then
[f18] = 1.75
ElseIf [f16] > 100 Then
[f18].Clear
End If

liebe grüße,
harry