Menü
An- und Abmelden
Partner / Links
|
Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.
Nachrichten - Cobrus
Seiten: [1]
1
« am: November 20, 2016, 11:58:15 Vormittag »
Die Lösung für das Problem wurde gefunden und sieht wie folgt aus:
Die Zeile
Cells(13, 29).Value = ObfTy.Value * 490 wurde ersetzt durch
If Len(Trim(CStr(ObfTy.Value))) > 0 Then Cells(13, 29).Value = CDbl(ObfTy.Value) * 490 Else Cells(13, 29).Value = "" End If Vielen Dank für die Hilfe.
2
« am: November 15, 2016, 18:08:14 Nachmittag »
Okay, dann machen wir das so.
3
« am: November 15, 2016, 15:42:35 Nachmittag »
Hallo,
es sind positive ganzzahlige Werte von 1 bis 5, je nachdem, wie groß der Zellinhalt (2, 30) ist. Über den Code in meinem ersten Post habe ich definiert, dass das Programm negative Werte ausschließen soll. Dabei tauchen auch weder 0 noch ein leeres Feld bei den Werten auf.
Gruß, Cobrus
4
« am: November 15, 2016, 13:35:34 Nachmittag »
Hallo,
ist kein Problem. Das nachzuarbeiten würde wahrscheinlich zu lange dauern.
So wie es aussieht, habe ich mich aber bzgl. der Folgeroutine geirrt. Das Problem wird scheinbar immer noch von ObfTy verursacht. Immer wieder mal, beschwert sich das Programm bei der Zeile
Cells(13, 29).Value = ObfTy.Value * 490 über eine Typenunverträglichkeit (Laufzeitfehler 13). CDbl hat dabei auch leider nichts weiter bewirkt, als dass es von vornherein den Fehler ausgibt, nicht nur gelegentlich. Soweit ich das feststellen konnte, tritt das Problem immer dann auf, wenn ich den Inhalt von Zelle (2, 30) ändere, während ein Wert in ObfTy steht. Wenn ich die Veränderung erst vornehme und anschließend einen Wert in ObfTy auswähle, dann berechnet er das Ergebnis in Zelle (13, 29) richtig.
Gruß, Cobrus
5
« am: November 14, 2016, 19:17:16 Nachmittag »
Hallo maninweb, ObfW ist ein Kontrollkästchensteuerelement. Generell habe ich noch keine Variablen definiert. Bisher arbeite ich nur mit drei Kontrollkästchen und einer Reihe von Comboboxen. Den kompletten Code für ObfW habe ich einmal angehängt. Die wichtigen Teile sind aber vermutlich nur die letzten beiden IF-Schleife, da sie direkt mit ObfTy zu tun haben. Private Sub ObfW_Click() If ObfW = True And Cells(11, 12).Text = "" Then Cells(11, 12).Interior.ColorIndex = 36 Else Cells(11, 12).Interior.ColorIndex = 2 End If If ObfW = True And AtIm.Enabled = True And AtIm.Value = "Sm" Then Cells(13, 12) = "SmO" Cells(13, 29) = 50 Cells(17, 12) = "" Cells(17, 29) = "" ObfChmCsm.Enabled = False ObfChmCsm.Visible = False ObfImmSm.Enabled = False ObfImmSm.Visible = False ObfImoSm.Enabled = False ObfImoSm.Visible = False ObfEl1.Enabled = False ObfEl1.Visible = False ObfEl2.Enabled = False ObfEl2.Visible = False ObfEl2Aufr.Enabled = False ObfEl2Aufr.Visible = False ObfTy.Enabled = False ObfTy.Visible = False Else If ObfW = True And AtIm.Enabled = True And AtIm.Value = "Sm, IA" Or ObfW = True And _ ObfImmSm.Enabled = True And AtIm.Enabled = True And AtIm.Value = "Sm, T" Or ObfW = True And _ AtIm.Enabled = True And AtIm.Value = "Sm, IA, T" Then Cells(13, 12) = "" Cells(17, 12) = "" Cells(17, 12) = "" Cells(17, 29) = "" ObfChmCsm.Enabled = False ObfChmCsm.Visible = False ObfImmSm.Enabled = True ObfImmSm.Visible = True ObfImoSm.Enabled = False ObfImoSm.Visible = False ObfEl1.Enabled = False ObfEl1.Visible = False ObfEl2.Enabled = False ObfEl2.Visible = False ObfEl2Aufr.Enabled = False ObfEl2Aufr.Visible = False ObfTy.Enabled = False ObfTy.Visible = False Else If ObfW = True And AtIm.Enabled = True And AtIm.Value = "IA" Or ObfW = True And _ AtIm.Enabled = True And AtIm.Value = "T" Or ObfW = True And AtIm.Enabled = True And AtIm.Value = "IA, T" Then Cells(13, 12) = "" Cells(17, 12) = "" Cells(17, 12) = "" Cells(17, 29) = "" ObfChmCsm.Enabled = False ObfChmCsm.Visible = False ObfImmSm.Enabled = False ObfImmSm.Visible = False ObfImoSm.Enabled = True ObfImoSm.Visible = True ObfEl1.Enabled = False ObfEl1.Visible = False ObfEl2.Enabled = False ObfEl2.Visible = False ObfEl2Aufr.Enabled = False ObfEl2Aufr.Visible = False ObfTy.Enabled = False ObfTy.Visible = False Else If ObfW = True And AtCh.Enabled = True And AtCh.Value = "Csm" Or ObfW = True And _ AtCh.Enabled = True And AtCh.Value = "Csm, K" Or ObfW = True And AtCh.Enabled = True And _ AtCh.Value = "Csm, D" Or ObfW = True And AtCh.Enabled = True And AtCh.Value = "Csm, K, D" Then Cells(13, 12) = "" Cells(17, 12) = "" Cells(17, 12) = "" Cells(17, 29) = "" ObfChmCsm.Enabled = True ObfChmCsm.Visible = True ObfImmSm.Enabled = False ObfImmSm.Visible = False ObfImoSm.Enabled = False ObfImoSm.Visible = False ObfEl1.Enabled = False ObfEl1.Visible = False ObfEl2.Enabled = False ObfEl2.Visible = False ObfEl2Aufr.Enabled = False ObfEl2Aufr.Visible = False ObfTy.Enabled = False ObfTy.Visible = False Else If ObfW = True And AtCh.Enabled = True And AtCh.Value = "K" Or ObfW = True And _ AtCh.Enabled = True And AtCh.Value = "D" Or ObfW = True And AtCh.Enabled = True And AtCh.Value = "K, D" Then Cells(13, 12) = "Dp" Cells(13, 29) = 45 Cells(17, 12) = "" Cells(17, 29) = "" ObfChmCsm.Enabled = True ObfChmCsm.Visible = True ObfImmSm.Enabled = False ObfImmSm.Visible = False ObfImoSm.Enabled = False ObfImoSm.Visible = False ObfEl1.Enabled = False ObfEl1.Visible = False ObfEl2.Enabled = False ObfEl2.Visible = False ObfEl2Aufr.Enabled = False ObfEl2Aufr.Visible = False ObfTy.Enabled = False ObfTy.Visible = False Else If ObfW = True And V.Value = "O" Then Cells(13, 12) = "Mb" Cells(13, 29) = 50 Cells(17, 12) = "" Cells(17, 29) = "" ObfChmCsm.Enabled = False ObfChmCsm.Visible = False ObfImmSm.Enabled = False ObfImmSm.Visible = False ObfImoSm.Enabled = False ObfImoSm.Visible = False ObfEl1.Enabled = False ObfEl1.Visible = False ObfEl2.Enabled = False ObfEl2.Visible = False ObfEl2Aufr.Enabled = False ObfEl2Aufr.Visible = False ObfTy.Enabled = False ObfTy.Visible = False Else If ObfW = True And V.Value = "El" Then Cells(13, 12) = "Rp" Cells(17, 12) = "Av " ObfChmCsm.Enabled = False ObfChmCsm.Visible = False ObfImmSm.Enabled = False ObfImmSm.Visible = False ObfImoSm.Enabled = False ObfImoSm.Visible = False ObfEl1.Enabled = True ObfEl1.Visible = True ObfEl2.Enabled = True ObfEl2.Visible = True ObfEl2Aufr.Enabled = True ObfEl2Aufr.Visible = True ObfTy.Enabled = False ObfTy.Visible = False Else If ObfW = True And V.Value = "Ty" Then Cells(13, 12) = "Do" Cells(13, 29).Value = ObfTy.Value * 490 Cells(17, 12) = "" Cells(17, 29) = "" ObfChmCsm.Enabled = False ObfChmCsm.Visible = False ObfImmSm.Enabled = False ObfImmSm.Visible = False ObfImoSm.Enabled = False ObfImoSm.Visible = False ObfEl1.Enabled = False ObfEl1.Visible = False ObfEl2.Enabled = False ObfEl2.Visible = False ObfEl2Aufr.Enabled = False ObfEl2Aufr.Visible = False ObfTy.Enabled = True ObfTy.Visible = True Else Cells(13, 12) = "" Cells(13, 29) = "" Cells(17, 12) = "" Cells(17, 29) = "" ObfChmCsm.Enabled = False ObfChmCsm.Visible = False ObfImmSm.Enabled = False ObfImmSm.Visible = False ObfImoSm.Enabled = False ObfImoSm.Visible = False ObfEl1.Enabled = False ObfEl1.Visible = False ObfEl2.Enabled = False ObfEl2.Visible = False ObfEl2Aufr.Enabled = False ObfEl2Aufr.Visible = False ObfTy.Enabled = False ObfTy.Visible = False End If End If End If End If End If End If End If End If End Sub
6
« am: November 08, 2016, 21:44:27 Nachmittag »
Hallo maninweb,
vielen Dank. Das Problem mit der Aktualisierung ist gelöst. Es ergibt sich jetzt aber eine Schwierigkeit mit einer Folgeroutine.
Private Sub ObfTy_Change() If ObfTy.Enabled = True And ObfW = True Then Cells(13, 29).Value = ObfTy.Value * 490 End If End Sub Jetzt kommt die Meldung: "Laufzeitfehler '13': Typen unverträglich". Ich vermute mal, dass ObfTy das Problem verursacht, verstehe aber nicht, wie es zustande kommt. Eigentlich werden in der Combobox Zahlenwerte erhalten, die über .Value ausgelesen werden sollten. Vor deiner vorgeschlagenen Änderung hat es funktioniert. An welcher Stelle wurde da die Variable wie verändert?
7
« am: November 08, 2016, 16:03:35 Nachmittag »
Hallo,
ich bitte umn Entschuldigung für die späte Rückmeldung. Aber andere Projekte bekamen eine höhere Priorität und sollten vorher abgearbeitet werden.
Ich habe mal versucht, deinen Vorschlag nachzuvollziehen. So, wie ich es gemacht habe, kann es aber noch nicht richtig sein. Das Programm beschwert sich, dass ObfTy nicht definiert wurde. Wenn ich eine Zeile "Private Sub ObfTy As Double" hinzufüge, erhalte ich die Fehlermeldung "with-Objekt muß einen benutzerdefinierten Typ oder den Typ Object oder Variant haben". Leider weiß ich nicht so recht, wie ich den Fehler beheben kann. Der derzeitige Code ist unten angehängt.
Private Sub Workbook_Open() Tabelle4.ObfTy_Initialize End Sub
Public ObfTy As Double
Public Sub ObfTy_Initialize() End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Not Target.Row <> 2 And Not Target.Column <> 30 Then With ObfTy Ty .Clear If Cells(2, 30).Value \ 2000 - 5 > 0 Then Cells(15, 29).Value = Cells(2, 30).Value \ 2000 .AddItem Cells(2, 30).Value \ 2000 - 5 .AddItem Cells(2, 30).Value \ 2000 - 4 .AddItem Cells(2, 30).Value \ 2000 - 3 .AddItem Cells(2, 30).Value \ 2000 - 2 .AddItem Cells(2, 30).Value \ 2000 - 1 .AddItem Cells(2, 30).Value \ 2000 Else If Cells(2, 30).Value \ 2000 - 4 > 0 Then Cells(15, 29).Value = Cells(2, 30).Value \ 2000 .AddItem Cells(2, 30).Value \ 2000 - 4 .AddItem Cells(2, 30).Value \ 2000 - 3 .AddItem Cells(2, 30).Value \ 2000 - 2 .AddItem Cells(2, 30).Value \ 2000 - 1 .AddItem Cells(2, 30).Value \ 2000 Else If Cells(2, 30).Value \ 2000 - 3 > 0 Then Cells(15, 29).Value = Cells(2, 30).Value \ 2000 .AddItem Cells(2, 30).Value \ 2000 - 3 .AddItem Cells(2, 30).Value \ 2000 - 2 .AddItem Cells(2, 30).Value \ 2000 - 1 .AddItem Cells(2, 30).Value \ 2000 Else If Cells(2, 30).Value \ 2000 - 2 > 0 Then Cells(15, 29).Value = Cells(2, 30).Value \ 2000 .AddItem Cells(2, 30).Value \ 2000 - 2 .AddItem Cells(2, 30).Value \ 2000 - 1 .AddItem Cells(2, 30).Value \ 2000 Else If Cells(2, 30).Value \ 2000 - 1 > 0 Then Cells(15, 29).Value = Cells(2, 30).Value \ 2000 .AddItem Cells(2, 30).Value \ 2000 - 1 .AddItem Cells(2, 30).Value \ 2000 Else If Cells(2, 30).Value \ 2000 > 0 Then Cells(15, 29).Value = Cells(2, 30).Value \ 2000 .AddItem Cells(2, 30).Value \ 2000 End If End If End If End If End If End If End With ObfTy.Width = 30 End If End Sub
8
« am: September 27, 2016, 20:53:35 Nachmittag »
Hallo,
derzeit grübele ich an folgendem Problem. Ich möchte gern, dass die Werte der Combobox sich sofort mit Eingabe eines Wertes in Zelle (2, 30) ändern und nicht erst, wenn der Ausführen-Button in der Projektansicht betätigt wird. Gibt es da eine sinnvolle Möglichkeit? Ich habe im Internet vieles mit "requery" gefunden. Allerdings bekomme ich mit der Ergänzung um "me.ObfTy.requery" nur die Fehlermeldung, dass das Objekt die Eigenschaft oder Methode nicht unterstützt.
Der bisherige Code sieht wie folgt aus:
Private Sub Workbook_Open() Tabelle4.ObfTy_Initialize End Sub
Public Sub ObfTy_Initialize() With ObfTy Ty .Clear If Cells(2, 30).Value \ 2000 - 5 > 0 Then Cells(15, 29).Value = Cells(2, 30).Value \ 2000 .AddItem Cells(2, 30).Value \ 2000 - 5 .AddItem Cells(2, 30).Value \ 2000 - 4 .AddItem Cells(2, 30).Value \ 2000 - 3 .AddItem Cells(2, 30).Value \ 2000 - 2 .AddItem Cells(2, 30).Value \ 2000 - 1 .AddItem Cells(2, 30).Value \ 2000 Else If Cells(2, 30).Value \ 2000 - 4 > 0 Then Cells(15, 29).Value = Cells(2, 30).Value \ 2000 .AddItem Cells(2, 30).Value \ 2000 - 4 .AddItem Cells(2, 30).Value \ 2000 - 3 .AddItem Cells(2, 30).Value \ 2000 - 2 .AddItem Cells(2, 30).Value \ 2000 - 1 .AddItem Cells(2, 30).Value \ 2000 Else If Cells(2, 30).Value \ 2000 - 3 > 0 Then Cells(15, 29).Value = Cells(2, 30).Value \ 2000 .AddItem Cells(2, 30).Value \ 2000 - 3 .AddItem Cells(2, 30).Value \ 2000 - 2 .AddItem Cells(2, 30).Value \ 2000 - 1 .AddItem Cells(2, 30).Value \ 2000 Else If Cells(2, 30).Value \ 2000 - 2 > 0 Then Cells(15, 29).Value = Cells(2, 30).Value \ 2000 .AddItem Cells(2, 30).Value \ 2000 - 2 .AddItem Cells(2, 30).Value \ 2000 - 1 .AddItem Cells(2, 30).Value \ 2000 Else If Cells(2, 30).Value \ 2000 - 1 > 0 Then Cells(15, 29).Value = Cells(2, 30).Value \ 2000 .AddItem Cells(2, 30).Value \ 2000 - 1 .AddItem Cells(2, 30).Value \ 2000 Else If Cells(2, 30).Value \ 2000 > 0 Then Cells(15, 29).Value = Cells(2, 30).Value \ 2000 .AddItem Cells(2, 30).Value \ 2000 End If End If End If End If End If End If End With ObfTy.Width = 30 End Sub
9
« am: September 20, 2016, 14:56:16 Nachmittag »
Ich habe das Problem selbst gelöst. Anstatt einer großen Wenn-Schleife, habe ich die einzelnen Bedingungen auf die auslösenden Ereignisse aufgeteilt.
Beispiel:
Private Sub TypIm_Change() If TypIm.Enabled = True and TypIm = "SM" Then Cells(3, 27).Value = 5 Else If TypIm.Enabled = True and TypIm = "SM, IA" Or TypIm.Enabled = True and TypIm = "SM, TL" Or TypIm.Enabled = True and TypIm = "SM, IA, TL" Then Cells(3, 27).Value = 4 Else Cells(3, 27).Value = 2 EndIF EndIF EndSub
Das erfolgt analog für die zweite Combobox und das Feld.
10
« am: September 20, 2016, 09:49:08 Vormittag »
Hallo,
ich versuche momentan ein Formblatt zu erstellen und mich dabei in VBA einzuarbeiten. Derzeit stoße ich auf ein Problem mit einer Wenn-Abfrage. Den dazu gehörenden Code habe ich unten angefügt.
Ich versuche einen Wert festzulegen, der in Abhängigkeit vom Inhalt eines Feldes oder einer von zwei Comboboxen definiert ist. Dabei habe ich bereits festgelegt, dass nur eines der drei Ereignisse, also eine Combobox oder das Feld, eintreten kann. Die Definition der Zielwerte habe ich über eine multiple Wenn-Abfrage bereits erstellt. Allerdings weiß ich noch nicht wie ich es erreiche, dass das Ergebnis auch mit jeder Änderung neu bestimmt wird. Ich vermute, dass eine Kombination aus Schleife und Wenn-Abfrage das Ergebnis liefern könnte, habe aber keine Ahnung welcher Schleifen-Typ geeignet wäre.
Ich hoffe ihr könnt mir weiterhelfen.
Private Sub SW_Change() Range(Cells(3, 27), Cells(4, 28)).ClearContents If TypIm.Value = "SM" Or TypCh.Value = "CSM" Or Cells(5, 12) = "El" Then Cells(3, 27) = 5 Else If TypIm.Value = "SM, IA" Or TypIm.Value = "SM, TL" Or TypIm.Value = "SM, IA, TL" Then Cells(3, 27) = 4 Else If TypCh.Value = "CSM, KU" Or TypCh.Value = "CSM, DÄ" Or TypCh.Value = "CSM, KU, DÄ" Or Cells(5, 12) = "Or" Then Cells(3, 27) = 3 Else If TypIm.Value = "IA" Or TypIm.Value = "TL" Or TypIm.Value = "IA, TL" Or TypCh.Value = "KU" Or TypCh.Value = "DÄ" Or TypCh.Value = "KU, DÄ" Then Cells(3, 27) = 2 Else Cells(3, 27) = 1 End If End If End If End If End Sub
Seiten: [1]
|