PDA

Vollständige Version anzeigen : VBA Visualisierung in Userform


Lilalauneandreas
02.10.2016, 12:03
Hallo,

würde in meiner Userform1 eine Visualisierung mit Kontroll- Kästchen einarbeiten, das nach Prüfung von Zellinhalten in meiner activen Zeile den IST Wert von den Zellinhalten überprüft.

Z.B Wenn in der activen Zeile 26 in den Spalten F und H und J und N etwas eingetragen ist- also wenn diese Spalten nicht leer sind, soll das Kontrollkästchen 1 in der Userform grün werden, das Kontrollkästchen 2 rot.- So etwas wie eine Visualisierung.

Steht dagegen etwas in den Salten F und G und H und N soll das Kontrollkästchen 2
grün werden das erste rot.

Geht sowas überhaupt?


Grüße Andreas

R J
02.10.2016, 12:53
Hi Andreas,

klar geht das.

Deklariere in einem allgemeinen Modul eine boolsche Variable:
Public frmIsActiv As Boolean


Setzte die Eigenschaft ShowModal der Form auf False

In das Modul der Form :

Private Sub UserForm_Activate()
frmIsActiv = True
End Sub

Private Sub UserForm_Deactivate()
frmIsActiv = False
End Sub


Im Beispiel habe ich ein Label auf die Form gesetzt. Name: lblWahr
Die Form heißt, oh welch Wunder: UserForm1

In das Modul der Tabelle, die ausgewertet werden soll, folgenden Code:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column > 5 And Target.Column < 9 Then
If frmIsActiv Then
UserForm1.lblWahr.BackColor = IIf(Cells(Target.Row, "F") = "" Or Cells(Target.Row, "G") = "" Or Cells(Target.Row, "H") = "", vbRed, vbGreen)
UserForm1.lblWahr.Caption = "Betrifft Zeile " & target.row
End If

End If
End Sub


Wie Du siehst, werte ich hier nur die Spalten F, G und H aus. Das heißt, Du musst das natürlich an Deine Bedürfnisse anpassen. Das sollte aber jetzt kein Problem mehr sein.

Lilalauneandreas
02.10.2016, 12:57
Danke Ralf,
muss erst mal ins Krankenhaus- probiere es nachher aus.

Danke erst mal für den Lösungsansatz.

Grüße Andreas

R J
02.10.2016, 13:00
Gute Besserung!

Beverly
02.10.2016, 14:44
Hi Andreas,

eine andere Möglichkeit (hier beim Aktivieren des UserForms - das Ereignis, bei dem der Code ausgeführt werden soll musst du anpassen):

Private Sub UserForm_Activate()
If Application.CountA(Union(Cells(ActiveCell.Row, 6), Cells(ActiveCell.Row, 8), Cells(ActiveCell.Row, 14))) = 3 Then
Me.CheckBox1.BackColor = IIf(Cells(ActiveCell.Row, 10) <> "", &HFF00&, &HFF&)
Me.CheckBox2.BackColor = IIf(Cells(ActiveCell.Row, 7) <> "", &HFF00&, &HFF&)
End If
End Sub



Da unklar ist, was passieren soll wenn sowohl Spalte G also auch Spalte J leer sind bzw. beide etwas enthalten, werden mit diesem Code beide ComboBoxen rot bei leer, enthalten beide etwas werden beide beide ComboBoxen grün.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Lilalauneandreas
02.10.2016, 21:16
:) Hallo, ich noch mal:)
Danke erst mal für eure Hilfe- Aber mein Anliegen scheint etwas größeres zu werden.

Ich beschreib noch mal mein Anliegen.

Habe mal ne Excel Datei mit angehangen. Ist schwer zu beschreiben.

Habe nun leider keinen Plan - wie ich drei größere farbliche Anzeigen in meine Userform1 bekomme- vor allem die Auswertung und das zu verwendende Tool für die Anzeige.

Die Tabelle hat bis zu 3000 Geräte. Wenn eine Überarbeitung vorgenommen wird, dann wird reihenweise nach unten abgearbeitet .
Sind bestimmte Daten in den Zellen F-N , dann soll in meiner Userform 3 einzelne Zellen ihre Farbe ändern. Also eine Live-Visualisierung nach den IST Werten in den Zellen.

Glaube hier brauch ich länger Hilfe.

Bekomm ich es hin?:boah:


Grüße Andreas

R J
02.10.2016, 23:06
...nur zur Info:

Du stellst zwar eine Datei bereit, allerdings weicht die offensichtlich von der von Dir gewünschten Vorlage ab. Außerdem ist die Problembeschreibung bzw. Lösungsanweisung unvollständig.

Ich hab Dir jetzt mal einen Lösungsansatz erstellt, gedenke aber, wegen erwartungsmäßig sich ständig ändernder Bedingungen, nicht weiter daran zu arbeiten. Gewöhne Dir für die Zukunft besser an, gleich alles so bereitzustellen, wie Du es auch wünschst.
Unter diesen Bedingungen musst Du Dir die Ableitungen selbst herleiten....

Diesen Code in ein allg. Modul:

Option Explicit

Public Const rot As Long = 255
Public Const grün As Long = 65280
Public Const weiß As Long = 16777215
Public Const schwarz As Long = 0

Function Check(zeile As Long) As Long
Dim Sicht As Byte
Dim RSL As Byte
Dim RISO As Byte
Dim IEA As Byte
Dim IBL As Byte
Dim Plakette As Byte
With Tabelle1
'sind diese Angaben immer identisch?
Sicht = IIf(.Cells(zeile, 6) = "i.O.", 1, 0)
RSL = IIf(.Cells(zeile, 7) = "< 0,3", 2, 0)
RISO = IIf(.Cells(zeile, 8) = "> 1,0", 4, 0)
IEA = IIf(.Cells(zeile, 9) = "< 0,5", 8, 0)
'in L steht nur leider nix....
' IBL = IIf(LCase(.Cells(zeile, 12)) <> "", 16, 0) '???
'und M wird ja wohl nicht wirklich ausgewertet?
Plakette = IIf(LCase(.Cells(zeile, 14)) = "nein", 32, 0)
End With

Check = Sicht + RSL + RISO + IEA + IBL + Plakette
End Function


und diesen in das Tabellenmodul:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
'evtl noch den zulässigen Bereich eingrenzen...
Btn1 Target.Row
End Sub


Sub Btn1(zeile As Long)
Dim zustand As Byte, farbe As Long

zustand = Check(zeile)

Dim l As Long
Debug.Print RGB(255, 255, 255)

Select Case (zustand)
Case 0: farbe = schwarz
Case 1: farbe = rot 'sicht + Plakette
Case 7: farbe = grün 'sicht (1) + rsl (2) + riso (4) + plakette (0)
Case 13: farbe = rot 'sicht (1) + riso (4) + iea (8) + plakette (0)
Case Else: farbe = weiß
End Select

Tabelle1.Cells(16, "T").Interior.Color = farbe
End Sub


Die Auswahlk des Zustandes für den Btn2 und 3 dann entsprechend anpassen...

Lilalauneandreas
02.10.2016, 23:46
:) :) :) Danke Ralf- jetzt habe ich einige Vorlagen- und es ändert sich sogar die Zellenfarbe.

Werde die beiden Btn 2 und 3 noch anpassen.
Nun kann ich weiter.

Schönen Abend noch