Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1436to1440
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA OpitonsButton

VBA OpitonsButton
29.07.2015 12:40:16
Nicolai
Hallo zusammen,
ich stehe vor einem Problem. Ich habe eine Userform mit mehreren OptionButtons.
Angehängtes Makro funktioniert auch, allerdings möchte ich den unteren Code auslagern.

Dim TextKommentar As String
Dim AktZeile As Integer
Dim AktSpalte As Integer
AktZeile = ActiveCell.Row
AktSpalte = ActiveCell.Column
Dim wert1 As Double 'Typendeklaration wichtig für dezimale Stundenangaben, z.B. 1,5!
Dim wert2 As Double
wert1 = ActiveCell.Value
wert2 = UserForm2.TextBox2.Value
Kommentartext = UserForm2.TextBox3.Value
akennz = -1
For i = 1 To 32
If i = 19 Then
'ignorieren
ElseIf Controls("OptionButton" & CStr(i)).Value Then
akennz = i
TextKommentar = Controls("OptionButton" & CStr(i)).Caption
Exit For
End If
Next

Diesen Teil möchte ich auslagern:

If akennz = 1 Then
If ActiveSheet.Cells(AktZeile + 1, AktSpalte).Value = "" Then
Cells(AktZeile + 1, AktSpalte).Value = " | " & Format(Date, "DD.MM.") & " - _
_
_
" & Application.UserName & ": " & wert2 & " Stunde(n) " & TextKommentar & Chr(34) &  _
Kommentartext & Chr(34) & "  " & "|" & "  "
Else
vorhandener_Kommentar = Cells(AktZeile + 1, AktSpalte).Value
Cells(AktZeile + 1, AktSpalte).Value = ""
Cells(AktZeile + 1, AktSpalte).Value = vorhandener_Kommentar & " | " & Format(   _
_
_
Date, "DD.MM.") & " - " & Application.UserName & ": " & wert2 & " Stunde(n) " & TextKommentar &  _
_
Chr(34) & Kommentartext & Chr(34) & "  " & "|" & "  "
End If
'Fallunterscheidung für negative Stundenanzahl / Schichtunterscheidung, z.B. -7,5
If wert1 

Neuer Code:

If akennz = 1 Then
Call Auswahl
Cells(331, ActiveCell.Column) = Cells(331, ActiveCell.Column) + wert2
End If

In dieser Zeile TextKommentar = Controls("OptionButton" & CStr(i)).Caption bringt er nun bei Controls immer eine Fehlermeldung. "Sub oder Function nicht definiert" Lasse ich die Zeile ganz weg funktioniert es nur im unteren Teil wo ich "TextKommentar" aufrufe schreibt er mir den die Caption des Optionsbutton.

Sub Auswahl()
Dim TextKommentar As String
Dim AktZeile As Integer
Dim AktSpalte As Integer
AktZeile = ActiveCell.Row
AktSpalte = ActiveCell.Column
Dim wert1 As Double
Dim wert2 As Double
Dim com As Comment
Dim akennz As Integer
TextKommentar = Controls("OptionButton" & CStr(i)).Caption
wert1 = ActiveCell.Value
wert2 = UserForm2.TextBox2.Value
Kommentartext = UserForm2.TextBox3.Value
'Kommentar hinzufügen
If ActiveSheet.Cells(AktZeile + 1, AktSpalte).Value = "" Then
Cells(AktZeile + 1, AktSpalte).Value = " | " & Format(Date, "DD.MM.") & " - _
_
_
" & Application.UserName & ": " & wert2 & " Stunde(n) " & TextKommentar & Chr(34) &  _
Kommentartext & Chr(34) & "  " & "|" & "  "
Else
vorhandener_Kommentar = Cells(AktZeile + 1, AktSpalte).Value
Cells(AktZeile + 1, AktSpalte).Value = ""
Cells(AktZeile + 1, AktSpalte).Value = vorhandener_Kommentar & " | " & Format(   _
_
_
Date, "DD.MM.") & " - " & Application.UserName & ": " & wert2 & " Stunde(n) " & TextKommentar &  _
_
Chr(34) & Kommentartext & Chr(34) & "  " & "|" & "  "
End If
'Fallunterscheidung für negative Stundenanzahl / Schichtunterscheidung, z.B. -7,5
If wert1 

Ich hoffe, ich habe es einigermaßen verständlich geschrieben und mir kann jemand weiterhelfen.
Vielen Dank & Grüße,
Nicolai

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA OpitonsButton
29.07.2015 12:54:40
Daniel
Hi
wenn du die Steuerelemente einer Userform ansprechen willst und der Code befindet sich nicht im Modul dieser Userform sondern beispielsweise in einem allgemeinen Modul (ausgelager), dann musst du auch immer den Userformnamen vor das Steuerelement setzen
TextKommentar = Userform1.Controls("OptionButton" & CStr(i)).Caption
den allgemeines Modul kennt die Userform ja nicht, ausserdm könnte es sein, dass noch weitere Userforms genöffnet sind, und dann muss ja eindeutig sein, welche du ansprechen willst.
Gruß Daniel

AW: VBA OpitonsButton
29.07.2015 13:19:32
Nicolai
Hallo Daniel,
vielen Dank für deine schnelle Antwort.
ich habe es nun in:
TextKommentar = UserForm2.Controls("OptionButton" & CStr(i)).Caption

angepasst. Leider bringt er nun die Laufzeitfehlermeldung "Das angegebene Objekt konnte nicht gefunden werden"

Anzeige
AW: VBA OpitonsButton
29.07.2015 13:28:04
Daniel
Hi
das könnte daran liegen, dass es in der Userform ein Steuerelement mit diesen Namen: "OptionButton" & CStr(i) gibt.
da ich deine Datei nicht kenne, musst du die korrekte Schreibweise selbst prüfen.
Gruß Daniel

AW: VBA OpitonsButton
29.07.2015 13:36:10
Nicolai
Hi,
ich habe gerade mal alles um das was es jetzt gerade geht in eine separate Datei geworfen um mit dieser besser zu testen.
Ich habe sie mal angehängt. Wäre echt super wenn du sie dir mal anschauen könntest.
http://www.file-upload.net/download-10803232/Test_neu.xlsm.html
Vielen Dank & Grüße,
Nicolai

Anzeige
AW: VBA OpitonsButton
29.07.2015 13:39:55
Daniel
Hi
warum nutzt du nicht den UploadService des Forums?
da gibts keine Wartezeiten, Werbung oder lästige Hinweise auf kostenpflichte Premiumservices.
Gruß Daniel

AW: VBA OpitonsButton
29.07.2015 13:42:10
Nicolai
Hey,
hier kam die Fehlermeldung das die Dateiendung .xlsm nicht gültig ist, sondern nur .xl
Viele Grüße,
Nicolai

AW: VBA OpitonsButton
29.07.2015 13:55:18
Daniel
xlsm kannst du hochladen, nur xlsb geht nicht.
Gruß Daniel

AW: VBA OpitonsButton
29.07.2015 14:03:18
Nicolai
Hallo Daniel,
beim hochladen einer Datei mit der .xlsm Endung, kommt diese Fehlermeldung:
Userbild

Anzeige
AW: VBA OpitonsButton
29.07.2015 14:08:05
Daniel
Hi
im Hinweistext steht auch, dass der Name und Pfad kein Leerzeichen enthalten darf.
hast du das beachtet?
aber ich habs mir inzwischen mal angeschaut.
check einfach mal deine Variablen, ob die überhaupt deklariert sind und welchen Wert sie haben.
da du nur die die drei Optionbuttons Optionbutton1, Optionbutton2 und Optionbutton3 hast, darf i nur 1, 2 oder 3 sein.
Ich dir die Verwendung von Option Explict (nur deklarierte Variablen dürfen verwendet werden)
Gruß Daniel

AW: VBA OpitonsButton
29.07.2015 14:48:36
Nicolai
Hallo Daniel,
sorry, die Hinweise hatte ich überlesen.
Ich habe jetzt nochmal die Variablen gelöscht die ich nicht benötige. Leider finde ich den Fehler trotzdem nicht.
https://www.herber.de/bbs/user/99154.xlsm
Mit Option Explicit habe ich leider noch nicht viel gemacht.
Viele Grüße,

Anzeige
AW: VBA OpitonsButton
29.07.2015 14:58:35
Daniel
Hi
viel wichtiger wäre, dass du dich um die Variablen kümmerst, die du benötigst, und schaust, ddass die einen Wert bekommen.
in der Sub Auswahl verwendest du i in
TextKommentar = UserForm2.Controls("OptionButton" & CStr(i)).Caption

zum ersten mal in diesem Makro und daher hat die Variable i noch keinen Wert.
Dh. du versuchst den Optionbutton "Optionbutton" anzusprechen, weil i keinen Wert hat und diesen Optionbutton gibt es nicht in der Userform.
Welchen Optionbutton möchtest du denn an dieser Stelle auslesen?
zum Thema Option Explicit: http://www.online-excel.de/excel/singsel_vba.php?f=4
Gruß Daniel

Anzeige
AW: VBA OpitonsButton
29.07.2015 15:11:48
Nicolai
Hallo Daniel,
das mit den Option Explicit habe ich mit mittlerweile mal durchgelesen.
Ich möchte im Sub den ausgewählten OptionButton auslesen. Sprich wenn der OptionButton 1 ausgewählt dann soll er mir die Caption des Buttons ausgeben.
Ja genau des versuch ich die ganze Zeit zu lösen, aber ich weiß eben leider nicht wie ich von der Userform an das Sub Auswahl das i mitgeben kann.
Vielen Vielen Dank,
Nicolai

AW: VBA OpitonsButton
29.07.2015 15:46:15
Daniel
Hi
gibt zwei möglichkeiten:
a) gemeinsam genutze Variablen.
diese sog. "globalen" oder "prozedurweit gültigen" Variablen können von allen Makros in der Datei genutzt werden. Sie behalten daher auch ihren Wert, wenn das Makro durchgelaufen ist.
hierzu muss man diese Variablen in einem allgemeinen Modul oberhalb der Makros (unter Option Explicit) mit dem Vorsatz: Public deklarieren:
Option Explicit
Public x as Long

damit kannst du die Variable x in allen Subs verwenden, wenn sie in Sub1 den Wert 99 bekommt, hat sie diesen auch in der danach laufenden Sub2.
b)Parameterübergabe
du kannst auch eine Parameterübergabe bei Subs programmiern (wie bei Functions) das sieht dann in etwa so aus:
Sub1
dim txt as string
txt = Inputbox("Eingabe")
Call Sub2(txt)
End Sub
Sub2(AusgabeText as String)
Msgbox AusgabeText
end Sub
hierbei wird dann der Wert, den du in der Sub1 in die Inputbox eingegben hast, an die Sub2 übergeben und dort weiterverarbeitet.
Gruß Daniel
ps: warum arbeitest du nicht mit einer Listbox anstelle der drei Optionbuttons?
dann kannst den ausgewählten Text einfach mit userform2.Listbox1.Value ermitteln.

Anzeige
AW: VBA OpitonsButton
29.07.2015 16:30:41
Nicolai
Also Variante a finde ich gut.
Ich habe es versucht, allerdings funktioniert es nicht:

Option Explicit
Public i As Long
Sub Auswahl()
Ich glaube ich steh heute irgendwie auf dem Schlauch, ich probiere morgen mal weiter.
Also ich habe eigentlich 25 Optionbuttons. Mit einer Listbox habe ich noch nicht gearbeitet. Das Makro besteht bereits, aber ich versuche es gerade umzubauen, damit es übersichtlicher und kürzer ist.
Ursprungsmakro (Nur ein Teil):

Private Sub CommandButton1_Click()
Dim index As Long
Dim Mitarbeiter
Dim Tage As Integer
Dim dat As Date
Dim datmon As String
Dim Zeile, spalte As Integer
Dim TextKommentar As String
Dim akennz As Integer
'Dim d2 As UserForm2
akennz = -1
For i = 1 To 32
If i = 19 Then
'ignorieren
ElseIf Controls("OptionButton" & CStr(i)).Value Then
akennz = i
TextKommentar = Controls("OptionButton" & CStr(i)).Caption
Exit For
End If
Next
If akennz = -1 Then
Call MsgBox("Bitte Grund für Eintragung auswählen")
Exit Sub
End If
Dim AktZeile As Integer
Dim AktSpalte As Integer
AktZeile = ActiveCell.Row
AktSpalte = ActiveCell.Column
' If IsNumeric(ActiveCell.Value) = False Then
'  MsgBox ("Falsche Zelle - abbrechen")
'  Exit Sub
' End If
If akennz = 29 And TextBox2.Value = "" And Not (ActiveCell.Value = "") Then
Dim wert1_29 As Double 'Typendeklaration wichtig für dezimale Stundenangaben, z.B. 1, _
5!
Dim wert2_29 As Double
'wert1_29 = ActiveCell.Value
'wert2_29 = UserForm2.TextBox2.Value
Kommentartext = UserForm2.TextBox3.Value
'Kommentar hinzufügen
If ActiveSheet.Cells(AktZeile + 1, AktSpalte).Value = "" Then
Cells(AktZeile + 1, AktSpalte).Value = " | " & Format(Date, "DD.MM.") & " - _
" & Application.UserName & ": " & Chr(34) & Kommentartext & Chr(34) & "  " & "|" & "  "
Else
vorhandener_Kommentar = Cells(AktZeile + 1, AktSpalte).Value
Cells(AktZeile + 1, AktSpalte).Value = ""
Cells(AktZeile + 1, AktSpalte).Value = vorhandener_Kommentar & " | " & Format( _
Date, "DD.MM.") & " - " & Application.UserName & ": " & Chr(34) & Kommentartext & Chr(34) & "  " & "|" & "  "
End If
ElseIf akennz = 29 And Not (TextBox2.Value = "") Then
MsgBox ("ungültiger Wert2")
Exit Sub
ElseIf IsNumeric(TextBox2.Value) = False Or TextBox2.Value  50 Then
MsgBox ("ungültiger Wert")
Exit Sub
ElseIf IsNumeric(ActiveCell.Value) = False Then
MsgBox ("Falsche Zelle - abbrechen")
Exit Sub
End If
'Arbeitsvorbereitung
If akennz = 1 Then
Dim wert1_1 As Double 'Typendeklaration wichtig für dezimale Stundenangaben, z.B. 1,5!
Dim wert2_1 As Double
Dim com As Comment
wert1_1 = ActiveCell.Value
wert2_1 = UserForm2.TextBox2.Value
Kommentartext = UserForm2.TextBox3.Value
'Kommentar hinzufügen
If ActiveSheet.Cells(AktZeile + 1, AktSpalte).Value = "" Then
Cells(AktZeile + 1, AktSpalte).Value = " | " & Format(Date, "DD.MM.") & " - _
" & Application.UserName & ": " & wert2_1 & " Stunde(n) " & TextKommentar & Chr(34) & Kommentartext & Chr(34) & "  " & "|" & "  "
Else
vorhandener_Kommentar = Cells(AktZeile + 1, AktSpalte).Value
Cells(AktZeile + 1, AktSpalte).Value = ""
Cells(AktZeile + 1, AktSpalte).Value = vorhandener_Kommentar & " | " & Format( _
Date, "DD.MM.") & " - " & Application.UserName & ": " & wert2_1 & " Stunde(n) " & TextKommentar & Chr(34) & Kommentartext & Chr(34) & "  " & "|" & "  "
End If
'Fallunterscheidung für negative Stundenanzahl / Schichtunterscheidung, z.B. -7,5
If wert1_1 
Ich bin offen für neues und Hilfreiche Tipps, bin noch im Lernprozess.
VG und Danke Nicolai

Anzeige
AW: VBA OpitonsButton
29.07.2015 16:37:49
Daniel
Hi
jetzt musst du prüfen, welchen Wert du i gegeben hast, bevor du das Makro Auswahl aufrufst.
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige