Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1512to1516
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

Excel Code vereinfachen und ergänzen

Excel Code vereinfachen und ergänzen
19.09.2016 13:14:04
Lutz
Hallo Zusammen,
ich versuche weiter VBA zu erlernen und stehe mal wieder vor einer Herausforderug in der ich meinen Code vereinfachen möchte.
Zum lernen habe ich mal in einem Formular einen DISG-Persönlichkeitstest umgesetzt.
Der funktioniert auch mit folgendem Code:

Private Sub CommandButton5_Click()
If DISGA1 = DISGA2 Or DISGA1 = DISGA3 Or DISGA1 = DISGA4 Or DISGA2 = DISGA3 Or DISGA2 = DISGA4   _
_
_
Or DISGA3 = DISGA4 Then
MsgBox "Die eingegebenen Daten in Block A sind nicht korrekt!", vbCritical, Title:="-  _
Intelligence Center"
Else
If DISGB1 = DISGB2 Or DISGB1 = DISGB3 Or DISGB1 = DISGB4 Or DISGB2 = DISGB3 Or DISGB2 = DISGB4   _
_
_
Or DISGB3 = DISGB4 Then
MsgBox "Die eingegebenen Daten in Block B sind nicht korrekt!", vbCritical, Title:="-  _
Intelligence Center"
Else
If DISGC1 = DISGC2 Or DISGC1 = DISGC3 Or DISGC1 = DISGC4 Or DISGC2 = DISGC3 Or DISGC2 = DISGC4   _
_
_
Or DISGC3 = DISGC4 Then
MsgBox "Die eingegebenen Daten in Block C sind nicht korrekt!", vbCritical, Title:="-  _
Intelligence Center"
Else
If DISGD1 = DISGD2 Or DISGD1 = DISGD3 Or DISGD1 = DISGD4 Or DISGD2 = DISGD3 Or DISGD2 = DISGD4   _
_
_
Or DISGD3 = DISGD4 Then
MsgBox "Die eingegebenen Daten in Block D sind nicht korrekt!", vbCritical, Title:="-  _
Intelligence Center"
Else
If DISGE1 = DISGE2 Or DISGE1 = DISGE3 Or DISGE1 = DISGE4 Or DISGE2 = DISGE3 Or DISGE2 = DISGE4   _
_
_
Or DISGE3 = DISGE4 Then
MsgBox "Die eingegebenen Daten in Block E sind nicht korrekt!", vbCritical, Title:="-  _
Intelligence Center"
Else
If DISGF1 = DISGF2 Or DISGF1 = DISGF3 Or DISGF1 = DISGF4 Or DISGF2 = DISGF3 Or DISGF2 = DISGF4   _
_
_
Or DISGF3 = DISGF4 Then
MsgBox "Die eingegebenen Daten in Block F sind nicht korrekt!", vbCritical, Title:="-  _
Intelligence Center"
Else
If DISGG1 = DISGG2 Or DISGG1 = DISGG3 Or DISGG1 = DISGG4 Or DISGG2 = DISGG3 Or DISGG2 = DISGG4   _
_
_
Or DISGG3 = DISGG4 Then
MsgBox "Die eingegebenen Daten in Block G sind nicht korrekt!", vbCritical, Title:="-  _
Intelligence Center"
Else
If DISGH1 = DISGH2 Or DISGH1 = DISGH3 Or DISGH1 = DISGH4 Or DISGH2 = DISGH3 Or DISGH2 = DISGH4   _
_
_
Or DISGH3 = DISGH4 Then
MsgBox "Die eingegebenen Daten in Block H sind nicht korrekt!", vbCritical, Title:="-  _
Intelligence Center"
Else
If DISGI1 = DISGI2 Or DISGI1 = DISGI3 Or DISGI1 = DISGI4 Or DISGI2 = DISGI3 Or DISGI2 = DISGI4   _
_
_
Or DISGI3 = DISGI4 Then
MsgBox "Die eingegebenen Daten in Block I sind nicht korrekt!", vbCritical, Title:="-  _
Intelligence Center"
Else
If DISGJ1 = DISGJ2 Or DISGJ1 = DISGJ3 Or DISGJ1 = DISGJ4 Or DISGJ2 = DISGJ3 Or DISGJ2 = DISGJ4   _
_
_
Or DISGJ3 = DISGJ4 Then
MsgBox "Die eingegebenen Daten in Block J sind nicht korrekt!", vbCritical, Title:="-  _
Intelligence Center"
Else
MsgBox "Die eingegebenen Daten im DISG Test sind korrekt", vbOKOnly, Title:="- Intelligence  _
Center"
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub

Userbild
Als Antwortmöglichkeiten sind immer Zahlen von 1 - 4 erlaubt. Wobei jede Zahl nur 1 x vorkommen darf.
Bis jetzt wird geprüft das kein Wert doppelt vorkommt.
Gerne würde ich noch eine Beschränkung auf Zahlen von 1-4 vornehmen.
Vielen Dank für eure/Ihre Hilfe im Vorraus gerne auch mit Verweis auf vlt. passende Literatur.
Lutz

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel Code vereinfachen und ergänzen
19.09.2016 13:39:45
Rudi
Hallo,
ungetestet und ohne Prüfung auf 1-4.
Private Sub CommandButton5_Click()
Dim bolErrA As Boolean, bolErrB As Boolean, arrBlock, x As Integer, y As Integer, z As  _
Integer
arrBlock = Split("A B C D E F G H I J")
For x = 0 To 9
bolErrA = False
For y = 1 To 3
For z = y + 1 To 4
If Controls("DISG" & arrBlock(x) & y) = Controls("DISG" & arrBlock(x) & z) Then
bolErrA = True
bolErrB = True
End If
Next z
Next y
If bolErrA Then
MsgBox "Die eingegebenen Daten in Block " & arrBlock(x) & " sind nicht korrekt!", _
vbCritical, Title:="- Intelligence Center"
End If
Next x
If Not bolErrB Then
MsgBox "Die eingegebenen Daten im DISG Test sind korrekt", _
vbOKOnly, Title:="- Intelligence Center "
End If
End Sub

Ich bau das nicht nach.
Gruß
Rudi
Anzeige
AW: Excel Code vereinfachen und ergänzen
19.09.2016 13:52:26
Lutz
Hallo,
das funktioniert perfekt.
Anhand des Codes konnte ich auch gleich durch versuchen noch ein ähnliches Problem lösen.
Vielen lieben Dank.
Grüße Lutz Hoffmann
AW: Excel Code vereinfachen und ergänzen
19.09.2016 14:02:23
ChrisL
Hi Lutz
Hier noch ein Vorschlag:

Sub Plausi()
Dim iZeile As Long, iSpalte As Long, iiSpalte As Long
Dim CharZeile As String
With UserForm1
.weiter.Enabled = True
For iZeile = 1 To 10
CharZeile = Chr(iZeile + 64)
For iSpalte = 1 To 4
' Prüfung Ganzahl 1-4 alle Felder
With .Controls("DISG" & CharZeile & iSpalte)
Select Case .Text
Case 1, 2, 3, 4: .BackColor = vbWhite
Case Else
.BackColor = vbRed
UserForm1.weiter.Enabled = False
End Select
End With
' Prüfung doppelte Werte
For iiSpalte = 1 To 4
If iSpalte  iiSpalte Then
If .Controls("DISG" & CharZeile & iSpalte) = .Controls("DISG" & CharZeile &  _
iiSpalte) Then
.Controls("DISG" & CharZeile & iSpalte).BackColor = vbRed
.weiter.Enabled = False
End If
End If
Next iiSpalte
Next iSpalte
Next iZeile
End With
End Sub

Die Idee wäre gleich bei Eingabe eine Plausibilisierung durchzuführen. Wenn etwas nicht stimmt, wird die Zelle rot und der Button "weiter" deaktiviert. D.h. du müsstest für alle TextBoxen ein Aufruf der Plausi machen...
Private Sub DISGA1_Change()
Call Plausi
End Sub
Private Sub DISGA2_Change()
Call Plausi
End Sub
Private Sub DISGA3_Change()
Call Plausi
End Sub
Private Sub DISGA4_Change()
Call Plausi
End Sub
Private Sub DISGB1_Change()
Call Plausi
End Sub
usw.
cu
Chris
Anzeige
AW: Excel Code vereinfachen und ergänzen
19.09.2016 14:45:42
Lutz
Hallo Chris,
ich wollte auch gerne noch deine Idee testen.
So ganz verstehe ich aber nicht was ich wo hinschreiben muss.
Und vorallem was das weiter bedeutet
.weiter.Enabled = True
´
Vielleicht kannst du mir da noch ein bisschen Input geben?! *bitte*
VG Lutz Hoffmann
AW: Excel Code vereinfachen und ergänzen
19.09.2016 14:51:34
ChrisL
Hi Lutz
Button "Eingabe kontrollieren" braucht es nicht mehr, weil bereits bei Eingabe überprüft wird.
Dein Button "Speichern" = mein Button "weiter"
Der Speichern Button ist somit nur aktiv, wenn die Plausibilitätsprüfung fehlerfrei ist.
cu
Chris
Anzeige
AW: Excel Code vereinfachen und ergänzen
19.09.2016 15:05:35
Lutz
Hallo Chris,
phänomenal.
Ich wäre nicht mal auf die Idee gekommen - das dies geht.
Klappt und ich Depp, das mit deinem "weiter" Button hatte ich mir schon so gedacht.
Hätte ich einfach mal probieren sollen.
Vielen Dank euch beiden für die Ansätze.
VG Lutz Hoffmann
AW: Excel Code vereinfachen und ergänzen
19.09.2016 15:28:14
Lutz
Hallo Chris,
ich habe mal versucht deinen Code auseinander zu nehmen um ihn zu verstehen.
Kannst du mir vielleicht noch erklären / kommentieren wie es sich mit

If .Controls("DISG" & CharZeile & iSpalte) = .Controls("DISG" & CharZeile & _
iiSpalte) Then
.Controls("DISG" & CharZeile & iSpalte).BackColor = vbRed
verhält. Sprich was bedeutet denn CharZeile & ISpalte?
Ich denke du setzt damit meine Feldbezeichnung DISGA A 1 zusammen. Verstehe aber nicht so ganz wo es herkommt.
Danke und VG Lutz
Anzeige
AW: Excel Code vereinfachen und ergänzen
19.09.2016 15:49:58
ChrisL
Hi Lutz
Grundsätzlich werden Zeilen und Spalten (deine Ansammlung von TextBoxen kann man quasi als Tabelle verstehen) in For-Next Schleifen durchlaufen.
For iZeile = 1 To 10 ' Buchstaben A-J
For iSpalte = 1 To 4 ' je 4
For-Next arbeitet aber nur mit Zahlen, weshalb iZeile in einen Buchstaben umgewandelt werden muss, was mit folgender Zeile geschieht:
CharZeile = Chr(iZeile + 64)
Chr macht aus einem ASCII Code einen Charakter (ASCII Codetabellen findest im Netz, 65 = A, 66 = B usw.).
Ein etwas anderer Ansatz wie von Rudi, der die Charakter in einem Datenfeld/Array hinterlegt hat.
Übrigens fürs nächst mal... wäre einfacher, wenn du die Zeile ebenfalls mittels Zahl im Namen definiert hättest, dann wäre die Übersetzung hinfällig gewesen ;)
cu
Chris
Anzeige
AW: Excel Code vereinfachen ... // Danke o.w.T.
19.09.2016 16:08:28
Lutz

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige