sylvia123
Goto Top

Optionsfeld als Pflichtfeld - Excel - VBA

Hallo zusammen,

ich bin gerade dabei meinen ersten Makro zu schreiben und komme leider nicht weiter.
Die Aufgabe ist, denke ich zumindest, gar nicht so schwer, ich weiß nur nicht wie man es in eine Programmiersprache umwandelt.

Aufgabe ist Folgendes:
Ich habe 6 Optionsbuttons eingefügt von denen einer ausgewählt werden soll (es lässt sich auch nur einer auswählen). Falls keine Option gewählt wird kann das Dokument nicht gespeichert werden.
Weiter oben im Dokument hatte ich das Gleiche schon für bestimmte Pflichtfelder vorgenommen.
Ich denke mein Problem ist es, die Optionen zu definieren.

Ich wage es jetzt mal euch meinen Anfängercode zu präsentieren face-smile Es geht also nur um den letzten Teil, das Obere funktioniert.


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

If Not ActiveWorkbook.BuiltinDocumentProperties.Item("Content Status") = "Entwurfsmodus" Then
For Each cell In Range("mandatory_field")
If cell.Value = "" Then
MsgBox "Det obligatoriska fältet måste fyllas i!", vbCritical
Cancel = True
Exit For
End If
Next
End If
If Not (OptionButton8.Value = True Or OptionButton9.Value = True Or OptionButton10.Value = True Or OptionButton11.Value = True Or OptionButton12.Value = True Or OptionButton13.Value = True) Then
MsgBox "Välj krediteringskod!", vbCritical
End If
End Sub


Fehler: Laufzeitfehler 424
Objekt erforderlich


Vielen lieben Dank schon mal!!
Beste Grüße,
Sylvia

Content-Key: 265708

Url: https://administrator.de/contentid/265708

Printed on: April 26, 2024 at 06:04 o'clock

Member: emeriks
emeriks Mar 09, 2015 updated at 13:26:48 (UTC)
Goto Top
Hi,
verwende bitte Code-Tags.

Ich denke, Du musst Cancel unten auch noch auf True setzen, wenn nicht alle Bedingungen zum Speichern erfüllt sind. (Zeile 14)

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 
  If Not ActiveWorkbook.BuiltinDocumentProperties.Item("Content Status") = "Entwurfsmodus" Then  
    For Each cell In Range("mandatory_field")  
      If cell.Value = "" Then  
        MsgBox "Det obligatoriska fältet måste fyllas i!", vbCritical  
        Cancel = True
        Exit For
      End If
    Next
  End If
  If Not (OptionButton8.Value Or OptionButton9.Value Or OptionButton10.Value Or OptionButton11.Value Or OptionButton12.Value Or OptionButton13.Value) Then
    MsgBox "Välj krediteringskod!", vbCritical  
    Cancel = True
  End If
End Sub

E.

Edit: Ach ja .... Wo kommt denn der Laufzeitfehler? Welche Zeile?

E.
Mitglied: 116301
116301 Mar 09, 2015 at 13:35:51 (UTC)
Goto Top
Hallo Sylvia123!

Fehler: Laufzeitfehler 424
Ich vermute mal, dass mindestens ein OptionButton nicht existiert oder Du hast Formular-Buttons anstatt ActiveX-Buttons verwendet?

Ansonsten macht es Sinn, einen OptionsButton in den Eigentschaften mit 'Value=True ' als Standard zu definieren...

Grüße Dieter
Member: Sylvia123
Sylvia123 Mar 09, 2015 at 13:39:01 (UTC)
Goto Top
Alles klar, wusste ich nicht face-smile

Der Fehler ist in Zeile 12. Stimmt wohl etwas mit der Bezeichnung nicht, aber wenn ich auf Eigenschaften gehe, steht unter Name "OptionButton8" usw.

Merci!
Member: Sylvia123
Sylvia123 Mar 09, 2015 at 13:50:38 (UTC)
Goto Top
Hallo Dieter,

diese "klassischen Fehler" habe ich bereits alle abgeklappert. Es handelt sich um ActiveX-Buttons und auch die Namen sind richtig.

Was meinst du mit
"einen OptionsButton in den Eigentschaften mit 'Value=True ' als Standard zu definieren..."?
klingt so als wäre das der richtige Ansatz aber ich weiß leider nicht genau was darunter zu verstehen ist. Alle Buttons haben unter Eigenschaften den Value TRUE.

Vielen lieben Dank!
Sylvi
Member: emeriks
Solution emeriks Mar 09, 2015 updated at 14:02:13 (UTC)
Goto Top
Versuche mal, die Controls zu spezifizieren.

also statt nur "OptionButton8.Value" den vollen Namen á la "ActiveWorkbook.ActiveSheet.OptionButton8.Value"

E.
Mitglied: 116301
116301 Mar 09, 2015 updated at 14:02:19 (UTC)
Goto Top
Hallo Sylvia123!

Was meinst du mit "einen OptionsButton in den Eigentschaften mit 'Value=True ' als Standard zu definieren..."?
Es kein eigentlich nur ein OptionButton mit True definiert werden, zumindest wenn sie ein und denselben 'GroupName' haben...

Das andere Problem habe ich vorhin leider übersehen. Da der Code sich nicht im Sheet befindet, musst Du es so machen:

With Sheets("Tabellenname")  
    If Not (.OptionButton8.Value Or .OptionButton9.Value Or .OptionButton10.Value Or .OptionButton11.Value Or .OptionButton12.Value Or .OptionButton13.Value) Then
    MsgBox "Välj krediteringskod!", vbCritical  
    Cancel = True
   End If
End With


Grüße Dieter
Member: Sylvia123
Sylvia123 Mar 09, 2015 at 14:06:37 (UTC)
Goto Top
Jetzt funktioniert es!!

Vielen lieben Dank an euch Beide für die Zeit und Hilfe!


Wie vermutlich zu erkennen war arbeite ich gerade im Ausland. Deshalb habe ich mich gerade gefragt ob solche Dinge wie: "Entwurfmodus" automatisch übersetzt werden, wenn man an einem ausländischen PC arbeitet? (So wie es auch mit Excel Formeln wie SVERWEIS usw. passiert)
Danke auch hier schon mal face-smile

Liebe Grüße
Sylvia
Member: emeriks
Solution emeriks Mar 09, 2015 updated at 14:35:28 (UTC)
Goto Top
Wie vermutlich zu erkennen war arbeite ich gerade im Ausland. Deshalb habe ich mich gerade gefragt ob solche Dinge wie:
"Entwurfmodus" automatisch übersetzt werden, wenn man an einem ausländischen PC arbeitet? (So wie es auch mit
Excel Formeln wie SVERWEIS usw. passiert)
Danke auch hier schon mal face-smile

Unwahrscheinlich. Du vergleichst hier mit einem fixen String. Das musst irgendwie variabel gestalten.
Vielleicht so

...
  If Not IstEntwurfsModus Then
    ...

  end if

...


function IstEntwurfsModus as boolean
  Select Case ActiveWorkbook.BuiltinDocumentProperties.Item("Content Status")   
    case "Entwurfsmodus", "BlaBlaBla", "SoSoSo"   'Hier ein paar "gängige" Sprachen berücksichtigen.  
      IstEntwurfsModus = true
    else
      IstEntwurfsModus = false
  end select
end function

E.
Member: Sylvia123
Sylvia123 Mar 09, 2015 at 14:35:25 (UTC)
Goto Top
Ok danke!

Vielleicht ist es dann in dem Fall einfacher kurz bei einem Kollegen zu schauen wie dieser Modus auf schwedisch heißt...

Hab's mir leider schon fast gedacht wegen den Anführungsstrichen....

Ich versuche deinen Code mal unterzubringen.

Vielen lieben Dank nochmal!
Sylvi