Check Boxen zusammenfassen ?

Hallo,
ich habe ca 12 Checkboxen also theoretisch auch 12 x eine Private Sub.
Da bei allen 12 Checkboxen der Quelltext gleich ist, frage ich mich ob ich nicht du Private sub wie folgt gestalten kann :

Private Sub Check1-12_Click()
msgbox „Klick!“
End Sub

thx mfg joe

Hi Joe,

reden wir über VB6 oder VBA?

Gruß, Rainer

Ich hasse VBA. Wir reden über VB6.

mfg joe

Hi Joe,

reden wir über VB6 oder VBA?

Gruß, Rainer

Hi Joe,

Ich hasse VBA. Wir reden über VB6.

*gg* schön, dann ist es leicht.

Tauf Deine Textboxen um.

Die erste heißt ‚Text‘, in die Eigenschaft ‚Index‘ schreibst Du ‚0‘.
Die zweite heißt ebenfalls ‚Text‘, nur der Index ist 1 …

Die haben dann gemeinsame Prozeduren …

Private Sub Text\_Click(Index As Integer)

End Sub

… und unterscheiden sich durch den Index.
Um alle Textfelder zu beschriften, mal folgender Code als Beispiel:

Private Sub Text\_Click(Index As Integer)
 Dim i As Integer
 For i = Text.LBound To Text.UBound
 Text(i).Text = "Das ist die " + Str(i) + ". Textbox"
 Next
End Sub

.Lbound ist der kleinste, .Ubound der größte Index, Der Code ist also auch noch richtig, wenn Du ein Textfeld hinzufügst.

Kopierst Du ein Textfeld und fügst eines hinzu, wenn Du schon einen Index angegeben hast, übernimmt VB für Dich das Numerieren. Das sind die Steuerelementefelder, die ich seit Monaten versuche einzureden. :smile:

Gruß, Rainer

Hi Joe,

sorry, es ging ja um Checkboxen.

Der Anfang gilt hier natürlich ebenso. Ich habe als Beispiel mal etwas geschrieben, das den Index dazu verwendet, in einem einzigen Byte zu sichern, welche der Boxen an sind und welche nicht.

Option Explicit

Dim Status As Byte

Private Sub Check1\_Click(Index As Integer)
 If Check1(Index).Value = Checked Then
 Status = Status Or (2 ^ Index)
 Else
 Status = Status And (&HFF Xor 2 ^ Index)
 End If
 Label1.Caption = Status
End Sub

Dazu sind das natürlich 8 Boxen, für jedes Bit eine. :smile: Bei 16 Boxen passt das in ein Long …

Gruß, Rainer

OT Vb und Vba

Ich hasse VBA. Wir reden über VB6.

*gg* schön, dann ist es leicht.

Hallo ihr zwei VBAHassfanclubmitglieder,
Hass ist grundsätzlich nicht sehr gut, bei Bill Gates, naja, ausnahmsweise berechtigt:smile:
Und selbst da zeigt sich, Hass bringt gar nix, es bringt einem was wenn man andere Wege sucht, und Joe hat sich den anderen Weg, VB, gesucht.
@Joe Es wäre grundsätzlich besser sich mal die Brettbeschreibung durchzulesen, dementsprechend auch die Basicversion anzugeben, dann passieren keine Irretationen welches Basic gemeint ist.
Und ich, der Bill Gates garantiert nicht mag, muß dann auch noch Vba verteidigen und Joe dezent durch den Hinweis auf die Brettbeschreibung eine reinwürgen ob seines Angriffs auf Vba :smile:
Thats Live, c’est la vie *gg*
Gruß
Reinhard

Hallo Reinhard,

Ich hasse VBA. Wir reden über VB6.

*gg* schön, dann ist es leicht.

Hallo ihr zwei VBAHassfanclubmitglieder,

*gg* nein, nicht schön, daß Joe VBA hasst, sondern schön, daß er eine Lösung für VB6 sucht, denn da hatte ich die einfache Lösung. Bei VBA hätte ich geschrieben, Joe soll auf Dich warten. :smile:

VBA ist schon in Ordnung, sonst wäre Office nur noch die Hälfte wert.

Gruß, Rainer

Nabend,

  1. Danke Rainer, habe mich gerade gewundert das immer nur eine Checkbox „gecheckt“ war … da las ich deinen nächsten eintrag. Baue das gerade ein.

  2. Ich hasse Bill G. nicht direkt. Er hat die richtig Chance genutzt, auch wenn nicht ganz ehrlich. Er hat es geschafft! Ok deswegen hasse ich ihn doch ein wenig. Aber ich nutze M$!

  3. Vba ist ne feine sache. habe es bis heute erst einmal gebraucht und bin kläglich gescheitert. ( Das war das Word dokument mit 30 Combo-boxen. alle hatten einen eigenen Index. Ladezeit in Word ca 2 min.

Soweit so gut. DANKE !!!

Hi Joe,

  1. Danke Rainer, habe mich gerade gewundert das immer nur eine
    Checkbox „gecheckt“ war …

um in einer Schleife alle Checkboxen auf ‚Checked‘ zu stellen …

Option Explicit

Private Sub Form\_Load()
 Dim i As Integer
 For i = Check1.LBound To Check1.UBound
 Check1(i).Value = Checked
 Next
End Sub

… klar?

Gruß, Rainer
PS. In VBA war es das Problem, daß genau das hier nicht geht. :frowning: In VBA kennen die Steuerelemente keine Eigenschaft ‚Index‘.
Man kann zwar auch da alle Boxen in einer Schleife setzen, aber ein Klickereignis für alle Checkboxen gemeinsam … soll gehen, ich habe aber keine Ahnung wie und wir sind ja in VB6. da müssen wir das jetzt nicht lösen.

Gruß, Rainer

Hallo Rainer,

wenn ich auch nur den entfertesten Verdacht du oder jetzt Joe wären böse, hätte ich gar nicht geantwortet :smile:)

Nachfolgend ist ein Thread aus einem anderen Forum, schau mal bitte kurz drüber, dann sage bitte ob es auch nicht mit Vb geht oder doch eventuell mit viel Aufwand.

So richtig kapiert habe ich die Anfrage nicht. Und, Renee ist in Vba Spitze, wenn die das sagt glaube ich ihr blind.

Gruß
Reinhard

Betrifft: Logfile bei Programmabsturz ?
von: Roland Hochhäuser
Geschrieben am: 27.08.2007 15:20:52

Hallo zusammen,
ist es möglich, per VBA ein Logfile (Textdatei) bei einem Programmabsturz erzeugen zu lassen? Mich würde schon interessieren, wo genau die Absturzursachen sind, die beim Debuggen der Anwendung unerkannt durchgerutscht sind. Mir schwebt vor, z.B. den Versuch von Excel, eine Datei nach einem Absturz wiederherzustellen, mit den Fehlerursachen zu protokollieren. In VB scheint das im Prinzip zu gehen, für VBA habe ich noch nichts gefunden (auch nicht in der Recherche).

Auf die Antworten bin ich gespannt.

Freundliche Grüße aus Berlin von
Roland Hochhäuser

Betrifft: Just forget it… owT
von: Renee
Geschrieben am: 27.08.2007 15:23:48

Betrifft: AW: Logfile bei Programmabsturz ?
von: Reinhard
Geschrieben am: 27.08.2007 16:04:25

Hi Roland,

in den Vba-Code vor jede Anweisung in ein Logfile zu schreiben und das auch jeweils korrekt zu schließen nach jedem Schreiben, ich führe jetzt Zeile 1 aus, ich führe jetzt Zeile 2 aus usw
ist sicher nicht das was du meinst.

Tja, dann bin ich schon überfragt *gg*, deshalb Frage noch auf offen.

Was eventuell mehr in deine Richtung geht, es gibt da die kostenlosen Programme regmon.exe und filemon.exe, wie der Name schon andeutet, zeichnen sie auf, welcher Prozess was in den Dateien oder in der Registry ändert.

Da sie auch alles von Windows selbst aufzeichnen, hast du aber ruckzuck ein riesenlanges Protokoll.

Aber da es in Textform vorliegt, kann man es leicht mit Vba nach „Excel.exe“ o.ä. filtern
Gruß
Reinhard

Betrifft: AW: Logfile bei Programmabsturz ?
von: Roland Hochhäuser
Geschrieben am: 27.08.2007 16:38:45

Hallo Reinhard,

ich dachte eher an das Abfangen der Wiederherstellungsprozedur, die Excel selber vorrnimmt, (nur) per VBA, aber da scheine ich wohl auf dem Holzweg zu sein.

Gruß
Roland

Hi Joe,

ein’s noch …

Leg mal nur eine Checkbox auf die Form, mit rechts anklicken, ‚kopieren‘, auf die Form rechts klicken -> ‚einfügen‘.
Nun fragt Dich VB ob Du das Steuerelementefeld möchtest, mit dem Du ja gerade arbeiten willst. ‚Ja‘ klicken und so viele einfügen, wie Du brauchst.

Gruß, Rainer

Frage zu Code.
Ich speicher die Var. framecheck1-22 aber irgendwie wird der inhalt nicht übergeben. bzw nur von einer Checkbox

Public Status As Long 'Checkbox
---
Private Sub Check\_Click(Index As Integer)

If Check(Index).Value = Checked Then
Status = Status Or (2 ^ Index)
Else
Status = Status And (&HFF Xor 2 ^ Index)
End If

framecheck1 = Check(0).Value
framecheck2 = Check(1).Value
framecheck3 = Check(2).Value
framecheck4 = Check(3).Value
framecheck5 = Check(4).Value

Hallo,

Ich speicher die Var. framecheck1-22

Warum? Das gehört dann in ein Array

Dim Framecheck(1 to 22) As Boolean

aber irgendwie wird der
inhalt nicht übergeben. bzw nur von einer Checkbox

framecheck1 = Check(0).Value
framecheck2 = Check(1).Value
framecheck3 = Check(2).Value
framecheck4 = Check(3).Value
framecheck5 = Check(4).Value

das ist zwar ‚schlechter Code‘, funktioniert aber auch. Der Fehler liegt wo anders.

Gruß, Rainer

Hallo reinhard,

wenn ich auch nur den entfertesten Verdacht du oder jetzt Joe
wären böse, hätte ich gar nicht geantwortet :smile:)

ach was, vergiss es. :smile:

Nachfolgend ist ein Thread aus einem anderen Forum, schau mal
bitte kurz drüber, dann sage bitte ob es auch nicht mit Vb
geht oder doch eventuell mit viel Aufwand.

So richtig kapiert habe ich die Anfrage nicht. Und, Renee ist
in Vba Spitze, wenn die das sagt glaube ich ihr blind.

Gruß
Reinhard

Betrifft: Logfile bei Programmabsturz ?
von: Roland Hochhäuser
Geschrieben am: 27.08.2007 15:20:52

Hallo zusammen,
ist es möglich, per VBA ein Logfile (Textdatei) bei einem
Programmabsturz erzeugen zu lassen? Mich würde schon
interessieren, wo genau die Absturzursachen sind, die beim
Debuggen der Anwendung unerkannt durchgerutscht sind. Mir
schwebt vor, z.B. den Versuch von Excel, eine Datei nach einem
Absturz wiederherzustellen, mit den Fehlerursachen zu
protokollieren. In VB scheint das im Prinzip zu gehen, für VBA
habe ich noch nichts gefunden (auch nicht in der Recherche).

Auf die Antworten bin ich gespannt.

Freundliche Grüße aus Berlin von
Roland Hochhäuser

Betrifft: Just forget it… owT
von: Renee
Geschrieben am: 27.08.2007 15:23:48

Betrifft: AW: Logfile bei Programmabsturz ?
von: Reinhard
Geschrieben am: 27.08.2007 16:04:25

Hi Roland,

in den Vba-Code vor jede Anweisung in ein Logfile zu schreiben
und das auch jeweils korrekt zu schließen nach jedem
Schreiben, ich führe jetzt Zeile 1 aus, ich führe jetzt Zeile
2 aus usw
ist sicher nicht das was du meinst.

Tja, dann bin ich schon überfragt *gg*, deshalb Frage noch auf
offen.

Was eventuell mehr in deine Richtung geht, es gibt da die
kostenlosen Programme regmon.exe und filemon.exe, wie der Name
schon andeutet, zeichnen sie auf, welcher Prozess was in den
Dateien oder in der Registry ändert.

Da sie auch alles von Windows selbst aufzeichnen, hast du aber
ruckzuck ein riesenlanges Protokoll.

Aber da es in Textform vorliegt, kann man es leicht mit Vba
nach „Excel.exe“ o.ä. filtern
Gruß
Reinhard

Betrifft: AW: Logfile bei Programmabsturz ?
von: Roland Hochhäuser
Geschrieben am: 27.08.2007 16:38:45

Hallo Reinhard,

ich dachte eher an das Abfangen der
Wiederherstellungsprozedur, die Excel selber vorrnimmt, (nur)
per VBA, aber da scheine ich wohl auf dem Holzweg zu sein.

Gruß
Roland

hmmm. Außer den Prozess von außen zu überwachen fällt mir da auch nichts ein. Allerdings, selbst dann … ohne Handles? Über die Wiederherstellungsprozedur von Excel weiß ich nichts, noch nie davon gehört. :frowning:

Nein, ich hätte keine Ahnung, wie ich so etwas realisieren sollte wenn ich es brauchen würde. Sorry.

Gruß, Rainer

Hallo Rainer,
da Renee sehr fit ist *um Klasssen besser*, in Vba, habe ich mir ds schon gedacht daß es nicht geht, wenn sie das sagt, aber Roland sprach von evtlm. VB, deshalb fragte ich nach.
Danke daß du dir nen Kopp gemacht hast.
Gruß
Reinhard

Hallo,

noch mal, Dein Programm, leicht ‚umgebaut‘. :smile:

Option Explicit
Dim Framecheck() As Boolean

Private Sub Form\_Load()
 Dim i As Integer
 ReDim Framecheck(Check1.LBound To Check1.UBound)
 For i = Check1.LBound To Check1.UBound
 Check1(i).Value = Checked
 Framecheck(i) = Check1(i).Value
 Next
End Sub

Noch eine Kleinigkeit. Wenn Du Code postest, dann möglichst so, daß man den kopieren kann und er läuft so. Wenn Du unvollständige Prozeduren postest, liegt der Fehler dann zu oft in dem Bereich, den du nicht mit gepostet hast. Ich sehe bei Dir z.B. die Deklaration nicht und die ist schon wichtig. Wenn Du die z.B. weg lässt, kann das Fehler auslösen!

Gruß, Rainer

Ja, ich bin bekannt für meinen „schlechten Code“

problem ist:
sobald die erste Checkbox ihren wert bekommt greift
die sub Private Sub Check_Click(Index As Integer)
und weil ich dort nach jeder änderung alle boxen speicher …
ist immer nur eine gecheckt … argh.
ich schaue mir das morgen nochma in ruhe an . soweit aber danke.

'Dim i As Integer
'For i = Check.LBound To Check.UBound
'Check(i).Value = Checked
'Next

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo reinhard,

da Renee sehr fit ist *um Klasssen besser*, in Vba, habe ich
mir ds schon gedacht daß es nicht geht, wenn sie das sagt,
aber Roland sprach von evtlm. VB, deshalb fragte ich nach.

das war ja auch richtig, mal sehen, ob Alex (Anno) dazu etwas weiß, der ist da viel besser als ich.

Gruß, Rainer

Hi Joe,

sobald die erste Checkbox ihren wert bekommt greift
die sub Private Sub Check_Click(Index As Integer)
und weil ich dort nach jeder änderung alle boxen speicher

ist immer nur eine gecheckt … argh.

??? Ja setzt Du das denn per Code? Das machst Du doch schon mit der Maus …

Dim i As Integer
 For i = Check.LBound To Check.UBound
 Check(i).Value = Checked 
 Next

das setzt alle Häkchen. Willst Du das? Bei mir war’s nur ein Beispiel. Bei Dir sollte …
Check(i).Value = …
… gar nicht vorkommen. Nur …
If Check(i).Value = … Then

Gruß, Rainer

das war ja auch richtig, mal sehen, ob Alex (Anno) dazu etwas
weiß, der ist da viel besser als ich.

Hallo Rainer,
der Junge hat kein Pflichtgefühl, anstatt hier sofort zu antworten treibt er sich sonstwo rum *skandalös*
Aber mir egal, ich gehe jetzt in die Heia, Schöns Nächtle für dich
Gruß
Reinhard