Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
412to416
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
412to416
412to416
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Hilfe mit CheckBoxes

Hilfe mit CheckBoxes
Martin
Hallo liebe Forums-Besucher,
ich benötige ein wenig Hilfe für einen Lösungsansatz meines Problems.
Ziel: Ich will eine UserForm mit 7 CheckBoxes. Jeder CheckBox ist eine Person uns somit auch eine Adresse zugeteilt.
Nun möchte ich, wenn ich die CheckBoxes 1, 2 und 5 aktiviere und einen CommandButton betätige, dass ein Exceltabellenblatt an Person 1, 2 und 5 geschickt wird, bei 2, 4 und 7 selbstverständlich nur an 2, 4 und 7, usw....!
Wie kann ich dies am besten angehen?
Bin über jede Hilfe dankbar.
Gruß,
Martin

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

Betreff
Benutzer
Anzeige
AW: Hilfe mit CheckBoxes
harry
hi martin,
checkbox.caption hat ja den namen der person, daher so in der art:
if checkbox1.value=true then
for each acell in sheets("BLATTNAME").range(sheets("BLATTNAME").cells(ANFANG,ANFANG), _
sheets("BLATTNAME").cells(ENDE,ENDE))
if cstr(acell.value)=checkbox1.caption then
VERSCHICKEN
end if
next
end if
du kannst das ganze natürlich noch in eine zusätzliche schleife für alle checkboxes setzen, damit du nicht alles 7 mal programmieren musst.
liebe grüße,
harry
AW: Hilfe mit CheckBoxes
Martin
Hallo Harry,
bisher funktioniert es noch nicht so richtig.
Allerdings möchte ich das Makro in jeder Excel-Datei haben, daher passt das mit den "Cells" uns so nicht. Hast Du vielleicht noch eine andere Idee?
Wahrscheinlich habe ich mich nur falsch ausgedrückt.
Die den Personen zugeteilten Adressen befinden sich in Outlook. Jede Caption einer Checkbox hat in ihr den Namen. Bsp. mein Name: Halberstadt, Martin!!!
Diesen Namen soll Excel dann in Outlook ansteuern.
Meine erste Idee war folgende:

Private Sub cmdSenden_Click()
Dim wks As Worksheet
Dim Empfänger As String
Empfänger = ActiveWorkbook.CheckBoxes("opt" & i).Caption
For i = 1 To 7
On Error Resume Next
If wks.CheckBoxes("opt" & i).Value = True Then
ActiveWorkbook.ActiveSheet.Copy
ActiveSheet.Name = Trim(Range("A3")) & " " & Trim(Range("F3"))
ActiveWorkbook.SaveAs Range("A3").Text & " " & Range("F3").Text
ActiveWorkbook.SendMail Recipients:=Empfänger, Subject:=Trim(Range("A3")) & " " & Trim(Range("F3"))
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill ActiveWorkbook.FullName
ActiveWorkbook.Close savechanges:=False
End If
Next i
If chb1.Value = False And chb2.Value = False And chb3.Value = False And chb4.Value = False And chb5.Value = False And chb6.Value = False And chb7.Value = False Then
MsgBox ("Bitte wählen Sie zuerst einen oder mehrere Empfänger aus!")
End If
End Sub

Aber erstens funzt es nicht ("Objekt unterstützt diese Eigenschaft oder Variable nicht!", kommt bei "Empfänger = usw."!!!), und zweitens ist dies wahrscheinlich eh Mist, oder? Oder kann Excel beispielsweise sehen: Aha, drei CheckBoxes sind aktiviert, also wird die Variable "Empfänger" mit drei verschiedenen Adressen gespickt.
Wahrscheinlich nicht, oder?
Vielleicht hast Du ja einen anderern Ansatz. Die Namen bzw. Adressen sollten, wenn möglich aus der Caption einer jeden Checkbox genommen werden.
Mit besten Grüßen
Martin
Anzeige
Ergänzung
Martin
Sorry, das war ein alter Code. Der neue sieht so aus:

Private Sub cmdSenden_Click()
Dim wks As Worksheet
Dim Empfänger As String
Empfänger = wks.CheckBoxes("chb" & i).Caption
For i = 1 To 7
On Error Resume Next
If wks.CheckBoxes("chb" & i).Value = True Then
ActiveWorkbook.ActiveSheet.Copy
ActiveSheet.Name = Trim(Range("A3")) & " " & Trim(Range("F3"))
ActiveWorkbook.SaveAs Range("A3").Text & " " & Range("F3").Text
ActiveWorkbook.SendMail Recipients:=Empfänger, Subject:=Trim(Range("A3")) & " " & Trim(Range("F3"))
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill ActiveWorkbook.FullName
ActiveWorkbook.Close savechanges:=False
End If
Next i
If chb1.Value = False And chb2.Value = False And chb3.Value = False And chb4.Value = False And chb5.Value = False And chb6.Value = False And chb7.Value = False Then
MsgBox ("Bitte wählen Sie zuerst einen oder mehrere Empfänger aus!")
End If
End Sub

Er funzt aber trotzdem nicht.
Anzeige
AW: Ergänzung
harry
obs prinzipiell geht oder niczt, kann ich so auch nicht sagen, hab soetwas noch nie probiert.
aber: der erste fehler ist
Empfänger = wks.CheckBoxes("chb" & i).Caption
gehört als erste zeile in die darunterliegende schleife, sondt fehler, weil i leer ist.
AW: Ergänzung
Martin
Huch,
stimmt. Hmm, wie gesagt...fange gerade erst an mit VBA.
Wenn man sich aus den Recherchen Bausteine zusammen sucht und versucht daraus ein lauffähiges Makro zu basteln, dann übersieht man schon mal Fehler, selbst so logische.
Jo, dann werd ich mal weiterprobieren. Vielleicht lässt sich da ja nochwas machen.
Und wenn sich so nichts regeln lässt, dann bau ich aus den 7 CheckBoxen einfach 128 If-Abfragen. :-)
Aber wahrscheinlich ist auch mein Ansatz falsch.
Hab trotzdem vielen Dank für die Hilfe.
Gruß,
Martin
Anzeige
AW: Ergänzung
harry
ne ne ne, so war's nicht gemeint. ist nur mühsam, deine datei nachzubauen, um den code zu checken. kannst ruhig den nächsten fehler posten!
übrigens:
wenn du vo
For i = 1 To 7
eine varible einführst (zb. a=0)
und nach
For i = 1 To 7
hochzählst (z.b. a= a+1)
sparst du dir
If chb1.Value = False And chb2.Value = False And chb3.Value = False And chb4.Value = False And chb5.Value = False And chb6.Value = False And chb7.Value = False Then
MsgBox ("Bitte wählen Sie zuerst einen oder mehrere Empfänger aus!")
End If
die if bedingung trönt fehleranfällig. nimm dann einfach
if a = 0 then ....
und:
überleg dir, ob du
On Error Resume Next
nicht rausnimmst. wenn fehler ignoriert werden, kommen falsche ergebnisse raus oder es entstehen neue fehler.
muss mich gerade etwas korrigieren:
wenn ich in zelle a1 einen empfänger eingebe, funktioniert das ganze, habs gerade probiert. das heisst: wenns probleme gibt, geh die schleife mit f8 schritt für schritt durch und schau dir die werte der variablen an (= einfach mit der maus auf z.b. empfänger gehen, dann wird angezeigt, welchen wert empfänger hat)
fazit: dein makro funktioniert vom prinzip her (mit oder ohne den vorgeschlagenen änderungen), die schleife muss man noch hinkriegen.
Anzeige
Nochmal gucken bitte!
15.04.2004 13:17:26
Martin
Hallo Harry,
ich brauche doch nochmal Deine Hilfe.
Nun funktioniert es...naja, fast. Ich habe statt "CheckBoxes" "Controls" genommen.
Hab ich in der Recherche gefunden. Allerdings will das Makro nun die Emails verschicken, obwohl KEINE CheckBox aktiviert ist.
Vielleicht bist Du so nett und schaust Dir den Quellcode nochmal an.
Vier Augen sehen mehr als zwei. Außerdem sind Deine Augen geschulter.
CODE:

Private Sub cmdSenden_Click()
Dim wks As Workbook
Dim USF2 As VBAProject.UserForm2
Dim Empfänger As String
For i = 1 To 7
Empfänger = UserForm2.Controls("chb" & i).Caption
On Error Resume Next
If Workbook.Controls("chb" & i).Value = True Then
ActiveWorkbook.ActiveSheet.Copy
ActiveSheet.Name = Trim(Range("A3")) & " " & Trim(Range("F3"))
ActiveWorkbook.SaveAs Range("A3").Text & " " & Range("F3").Text
ActiveWorkbook.SendMail Recipients:=Empfänger, Subject:=Trim(Range("A3")) & " " & Trim(Range("F3"))
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill ActiveWorkbook.FullName
ActiveWorkbook.Close savechanges:=False
End If
Next i
If chb1.Value = False And chb2.Value = False And chb3.Value = False And chb4.Value = False And chb5.Value = False And chb6.Value = False And chb7.Value = False Then
MsgBox ("Bitte wählen Sie zuerst einen oder mehrere Empfänger aus!")
End If
End Sub

Gruß,
Martin
Anzeige
AW: Ergänzung
Martin
Hallo Harry,
ich brauche doch nochmal Deine Hilfe.
Nun funktioniert es...naja, fast. Ich habe statt "CheckBoxes" "Controls" genommen.
Hab ich in der Recherche gefunden. Allerdings will das Makro nun die Emails verschicken, obwohl KEINE CheckBox aktiviert ist.
Vielleicht bist Du so nett und schaust Dir den Quellcode nochmal an.
Vier Augen sehen mehr als zwei. Außerdem sind Deine Augen geschulter.
CODE:

Private Sub cmdSenden_Click()
Dim wks As Workbook
Dim USF2 As VBAProject.UserForm2
Dim Empfänger As String
For i = 1 To 7
Empfänger = UserForm2.Controls("chb" & i).Caption
On Error Resume Next
If Workbook.Controls("chb" & i).Value = True Then
ActiveWorkbook.ActiveSheet.Copy
ActiveSheet.Name = Trim(Range("A3")) & " " & Trim(Range("F3"))
ActiveWorkbook.SaveAs Range("A3").Text & " " & Range("F3").Text
ActiveWorkbook.SendMail Recipients:=Empfänger, Subject:=Trim(Range("A3")) & " " & Trim(Range("F3"))
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill ActiveWorkbook.FullName
ActiveWorkbook.Close savechanges:=False
End If
Next i
If chb1.Value = False And chb2.Value = False And chb3.Value = False And chb4.Value = False And chb5.Value = False And chb6.Value = False And chb7.Value = False Then
MsgBox ("Bitte wählen Sie zuerst einen oder mehrere Empfänger aus!")
End If
End Sub

Gruß,
Martin
Anzeige
guckst du auch ? *gggg*
harry
steht schon in der antwort vorher, wie du das prob mit der if bedingung lösen solltest.
nachdem du in der hilfe schon geschaut hast, noch ein tip: alle controls können bei der eigenschaft Tag mit einer info gefüllt werden, mit der du sie dann zb in einer schleife ganz klar ansprechen kannst.
zb checkbox1.Tag = "Vollidiot"
for i = 1 to wks.Controls.Count
if controls(i).Tag ="Vollidiot" a then
....
end if
OW
Martin
Ja, es steht zwar drin, aber selbst, wenn ich das Makro mit F8 durchlaufen lassen, weiß ich trotz alledem nicht, warum ALLE Emails verschickt werden, obwohl keine CheckBox aktiviert ist. DAS ist das Problem.
Die If-Bedingung, die checkt, ob KEINE Box aktiviert ist, funktioniert so, wie sie ist. Von daher sehe ich keinen Grund sie zu ersetzen. Sicherlich ist es nicht der komfortabelste Weg, aber im Moment der einfachste Weg.
Und über die Art der Sprache, bzw. Etikette, die in einem Forum gewahrt werden sollte, brauchen wir uns glaub ich nicht zu unterhalten, oder?
siehe: zb checkbox1.Tag = "Vollidiot"
Anzeige
AW: OW
harry
sorry, war echt ohne jeden hintergedanken!!!! sollte nur zeigen, dass du mit der tag eigenschaft alles zuweisen kannst! war nicht auf dich bezogen!!!
if schleife:
If chb1.Value = False And chb2.Value = False And chb3.Value = False And chb4.Value = False And chb5.Value = False And chb6.Value = False And chb7.Value = False Then
MsgBox ("Bitte wählen Sie zuerst einen oder mehrere Empfänger aus!")
exit sub
else:
Empfänger = UserForm2.Controls("chb" & i).Caption
ActiveWorkbook.ActiveSheet.Copy
.....
End If
so sollte es funken.
sorry nochmals, war echt nicht persönlich gemeint. würde das nie auf jemanden beziehen, der sich selbst um sein prob kümmert und nachliest und herumtüftelt. so haben wir alle angefangen, du machst das schon richtig so.
harry
Anzeige
nachtrag
harry
bei if bedingungen immer zuerst das abfragen, was die ausführung des makros verhindern soll (=wenn keine box angeklickt) und die sub verlassen (=exit sub). nur wenn die ausschliessende bedingung nicht zutrifft (=zum. eine box angeklickt) mit else: das makro zuende arbeiten lassen.
liebe grüße,
harry
ps: hab das wirklich nicht auf dich bezogen, hoffe du glaubst mirs jetzt!
Funktioniert jetzt.
Martin
Hallo Harry,
ja, ich glaube Dir. Entschuldigung ist angenommen. Allerdings so, wie es geschrieben war, musste es in den falschen Hals gehen. Aber ist ja auch egal.
Das Makro funktioniert jetzt auf jeden Fall tadellos.
Hab es mit der Tag-Eigenschaft gelöst. Nun werden auch komischerweise nicht mehr die Checkboxes angesprochen, die nicht aktiviert sind, was ja vorher der Fall war.
Hab vielen Dank für Deine Hilfe und Gruß zurück.
Martin
Anzeige
AW: Funktioniert jetzt.
harry
da geb ich dir recht, hab mir aber beim schreiben nichts gedacht. bin mit einem auge im forum, mit dem anderen bei der arbeit.
hauptsache es funkt!
over and out
Dito
15.04.2004 15:26:59
Martin
So auch bei mir. Ich schiele auch parallel ins Forum bzw. Recherche zur Lösungssuche und nebenbei gehe ich meiner anderen Arbeit nach.
Mach's gut.
Martin

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige