PDA

Vollständige Version anzeigen : Wenn dann mit VBA


DTaler
22.08.2017, 06:49
guten morgen

ich benötige bitte mal wieder Hilfe.
Im Namensmanager habe ich Zelle H24:H41 als "SummeNetto" gekennzeichnet. Ich möchte dass in dem Datenbereich "SummeNetto"
die Formel
"=WENN(G24="""";"""";E24*G24/WENN($H$19=brutto;1,19;1))"
erscheint .


Jetzt habe ich folgenden Code erfasst :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
Dim SummeNetto As Long
For Each Zelle In ActiveSheet.Range("SummeNetto")
SummeNetto = Zelle.Row
Zelle.FormulaLocal = ("=WENN(G24="""";"""";E24*G24/WENN($H$19=brutto;1,19;1))")
NextZelle

End Sub

Nun kommt die Fehlermeldung :
Fehler beim Kompilieren : Sub oder Function nicht definiert.

Kann mir jemand weiterhelfen ?
Angelika

hary
22.08.2017, 07:04
Moin

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
For Each Zelle In Range("SummeNetto")
Zelle.FormulaLocal = ("=WENN(G24="""";"""";E24*G24/WENN($H$19=brutto;1,19;1))")
Next Zelle
End Sub
Probier mal ob diese eine Codezeile reicht.
Range("SummeNetto").FormulaLocal = ("=WENN(G24="""";"""";E24*G24/WENN($H$19=brutto;1,19;1))")

So wird die Formel in den Bereich gesetzt
gruss hary

DTaler
22.08.2017, 07:13
Hallo hary,

danke für die schnelle Antwort. Ich habe Deine Codezeile eingefügt, aber es kommt die gleiche Meldung, und die Zeile "NextZelle" ist gelb markiert.

Vielleich kannst Du ( oder jemand anders ) mir nochmal behilflich sein.

DANKE im voraus Angelika

hary
22.08.2017, 07:19
Moin
NextZelle wird mit Leerzeichen geschrieben;-))

Next Zelle
gruss hary

hary
22.08.2017, 07:32
Moin nochmal
Hier jetzt mal uebersichtlicher.
Entweder
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
For Each Zelle In Range("SummeNetto")
Zelle.FormulaLocal = ("=WENN(G24="""";"""";E24*G24/WENN($H$19=brutto;1,19;1))")
Next Zelle
End Sub
oder
Private Sub Worksheet_Change(ByVal Target As Range)
Range("SummeNetto").FormulaLocal = ("=WENN(G24="""";"""";E24*G24/WENN($H$19=brutto;1,19;1))")
End Sub
Warum du das Change Ereigniss nimmst, muesstest du mal erklaeren.
gruss hary

DTaler
22.08.2017, 07:39
Hallo hary,

ich habs in meinem Code richtig geschrieben, nur leider im Beitrag falsch- sorry.

So aber jetzt kommt die nächste Fehlermeldung :
Laufzeitfehler '9':
Index ausserhalb des gültigen Bereichs.

Und meine Tabelle bleibt hängen.

was mach ich nur falsch ?

Gruss Angelika

hary
22.08.2017, 07:41
Moin
Lad mal eine Bsp.-Mappe hoch. Mit Dummydaten.
gruss hary

DTaler
22.08.2017, 07:49
hallo hary,
das Change Ereignis habe ich genommen, weil ich Select_Change schon einmal für einen anderen Code genommen habe, und weil ich es so übersichtlicher fand. Aber ich bin für Vorschläge jederzeit zu haben, da ich kein VBA Experte bin.
Jetzt funktionierts aber mit der Fehlermeldung :
Die Methode 'Range' für das Objekt'_Worksheet' ist fehlgeschlagen
gelb markiert wird dieses mal die Zeile
For Each Zelle In Range("SummeNetto")

Gruss Angelika

hary
22.08.2017, 07:53
Moin
Nochmal:Lad mal eine Bsp.-Mappe hoch
Beschreib mal genau was/wann/ wo passieren soll.
Bin erst heute Abend online.
gruss hary

DTaler
22.08.2017, 07:53
Noch ne Meldung
wenn ich in die nächste Zeile "G25" einen Wert eingebe kommt die Meldung :
Der eingegebene Wert ist ungültig. Ein anderer Benutzer hat die Wert begrenzt, die in diese Zelle eingegeben werden können.

Ob wir das jemals hinbekommen ?

Gruss Angelika

DTaler
22.08.2017, 07:56
so jetzt meine Tabelle,

ich habe in der Tabelle beschrieben was ich machen möchte.

Ich danke dir nochmal herzlich, dass Du dich meines Problems annimmst.

Angelika

hary
23.08.2017, 12:25
Moin
Sry, kam erst jetzt dazu.
Sollte jetzt alles klappen. Einziges was man noch aendern koennte ist:
Du hast ja das einfuegen, der neuen Zellen, abhaengig von der aktiven Zelle gemacht. ist das so gewollt????? Eigentlich fuegt man neue Zellen immer unter an. das weisst aber nur du.
Teste mal trotzdem den Anhang ob derAnsatz passt.
gruss hary

DTaler
23.08.2017, 12:53
Hallo Hary

kein Problem bzgl. der Antwort. ich weiss man hat auch noch andere Arbeit.
Ich muss diese Tabelle auch neben meiner normalen Arbeitszeit machen.
Ich habe die Tabelle nochmal hochgeladen.
Klappt irgendwie nicht so richtig.
Wenn du dazu kommst, kannst du ja noch mal drüber schauen

´Zu der Frage mit den Zellen einfügen. Es war eigentlich bisher so, dass wenn man Zeilen einfügen will, kam die Frage wieviel Zeilen und dann die Frage ab welcher Zeile. Es kann natürlich sein, dass durch das viele rumprobieren in meinen Codes dieser Vorgang nicht mehr funktioniert, aber das ist im Moment nicht zu tragisch, dass bekomme ich wieder hin.(Hab hierfür eine Datensicherung)

Gruss vom Bodensee
Angelika

DTaler
23.08.2017, 12:55
Hallo Hary

kein Problem bzgl. der Antwort. ich weiss man hat auch noch andere Arbeit.
Ich muss diese Tabelle auch neben meiner normalen Arbeitszeit machen.
Ich habe die Tabelle nochmal hochgeladen.
Klappt irgendwie nicht so richtig.
Wenn du dazu kommst, kannst du ja noch mal drüber schauen

´Zu der Frage mit den Zellen einfügen. Es war eigentlich bisher so, dass wenn man Zeilen einfügen will, kam die Frage wieviel Zeilen und dann die Frage ab welcher Zeile. Es kann natürlich sein, dass durch das viele rumprobieren in meinen Codes dieser Vorgang nicht mehr funktioniert, aber das ist im Moment nicht zu tragisch, dass bekomme ich wieder hin.(Hab hierfür eine Datensicherung)

Gruss vom Bodensee
Angelika

DTaler
23.08.2017, 13:06
Hallo Hary,

Kommando zurück es geht . Perfekt
Ich danke Dir

Angelika

hary
23.08.2017, 13:08
Moin
Es war eigentlich bisher so, dass wenn man Zeilen einfügen will, kam die Frage wieviel Zeilen und dann die Frage ab welcher Zeile
Aber nicht beim einfuegen!!!
Du hast es abhaengig gemacht von der selectierten Zelle
Original Codezeile:
Zeile = Selection.Row
Selection.Row ist die Zeilennummer von der aktiven Zelle.
Machen wir es mal mit Mappe"DTaler"
Klick mal in die Zelle C24
Dann klickst du "Zeilen einfügen"
In die Inputbox gibst du eine Zahl ein und was ist jetzt passiert!? ;-))
Mit
Klappt irgendwie nicht so richtig.
Kann man nicht viel anfangen.
gruss hary

hary
23.08.2017, 13:26
Moin
Mit dem Warenwert >1000 auch? Gilt fuer jeden € Eintrag oder fuer die Gesamtsumme. Das hab ich nur geraten.
Sperren klappt auch so wie gewuenscht?
gruss hary

DTaler
23.08.2017, 13:51
Hallo Hary,

dass mit den 1000 Euro wäre schön wenn die Meldung erst bei der NettoSumme (1000,00 ) erscheinen würde.
Könntes Du mir hier nochmal weiterhelfen ?

Das mit dem Blattschutz setzen ist raffiniert
Ich habe diesen nicht eingesetzt, weil man ihn relativ einfach knacken kann.
Hierfür gibt es einen VBA Code.

Aber ich bin dir dankbar für diese Lösung und werde sie auch einsetzen.
Langsam möchte ich dieses Formular zu Ende bringen.

Es ist halt immer schwer ein Formular für viele Anwender zu erstellten welches auch leicht zu handhaben ist und trotzdem sicher.

Aber dank solchen Excel Experten wie Dir kommt man auf immer neue Ideen und es wird einem super geholfen.:)


Danke Angelika

hary
24.08.2017, 06:52
Moin
weil man ihn relativ einfach knacken kann
Eins ist sicher: In Excel ist nichts sicher.;-))
Habe den Schutz mal dringelassen. Passwort ist: hallo
Gehe davon aus du weisst wo du ihn aendern kannst.
Teste jetz mal die Mappe.
Musste den Schutzbereich D27:H29 bennen(Schutz). Dieser rutscht ja, beim einfuegen von Zeillen immer, nach unten und dann passte es beim oeffnen nicht mehr.
Pruefung groesser 1000:
Wenn du jetzt Anzahl oder Einzelpreis(haendisch) eintraegst/aenderst, wird geprueft ob die "SummeNetto" groesser 1000 ist.
Das einfuegen von Zeilen ist so geblieben wie in der anderen Mappe.
gruss hary

DTaler
24.08.2017, 07:36
guten morgen Hary,
das funktioniert wunderbar . ich habe allerdings die Zeilen
'Application.EnableEvents = False
'Target = ""
deaktiviert, da der Mitarbeiter nicht immer eine Freigabe einholen muss, es gibt wie überall "Ausnahmen".
vielen lieben DANK Angelika

DTaler
24.08.2017, 07:41
Hallo Hary
ich bin Dir noch eine Erklärung schuldig.
Hier der richtige Code zu Zeile einfügen
Sub Zeile_einfügen()
Dim eingabe As Long
Dim zeilenr As Long
eingabe = Val(InputBox("Wieviele Zeilen möchten Sie einfügen?"))
zeilenr = Val(InputBox("Vor welcher Zeile (Nummer angeben)?"))
For x = 1 To eingabe
Rows(zeilenr).Select
Selection.Insert Shift:=xlDown
Next
End Sub

Gruss Angelika

hary
24.08.2017, 07:42
Moin
Na dann, viel Spass beim weiterbauen.
gruss hary

hary
24.08.2017, 08:10
Moin
Zum einfuegen ohne Schleife
Private Sub CommandButton1_Click()
Dim Zeile As Long, eingabe As Long
eingabe = Val(InputBox("Wieviele Zeilen möchten Sie einfügen?")) - 1 'wieviel Zeilen einfügen
Zeile = Val(InputBox("Vor welcher Zeile (Nummer angeben)?")) + 1
Rows(Zeile & ":" & Zeile + eingabe).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("H24:H" & Range("Schutz").Row - 3).Name = "SummeNetto"
Range("SummeNetto").FormulaLocal = ("=WENN(G24="""";"""";E24*G24/WENN($H$19=""brutto"";1,19;1))")
Range("SummeNetto").Locked = True
End Sub
gruss hary