Hallo,
wie bekommt man es hin, dass wenn man in einem Textfeld einen HTML-Farbcode hinterlegt hat (z.B. #FFF200) sich diese Farbe dann in einem Feld daneben anzeigen zu lassen? In HTML ginge das relativ schnell und einfach zu integrieren. Wer kann mir dazu einen Tip geben?
Gruß Andreas
Hallo,
nimm ein passendes Steuerelement und setze die Farbe.
Beispiel:
Nimm ein Rechteck. Setze den Hintergrund auf normal (Standard ist transparent) und nutze folgenden Code:Me.recColor.BackColor = &HFFF200
Private Sub txtFarbe_AfterUpdate()
Me.recColor.BackColor = Val("&H" & Mid(me.txtFarbe, 2))
End Sub
Hi.
danke erst mal für die schnelle Antwort.
Zitat von: steffen0815 am Dezember 17, 2017, 14:54:40
nimm ein passendes Steuerelement und setze die Farbe.........
Setze den Hintergrund auf normal (Standard ist transparent) und nutze folgenden Code:Me.recColor.BackColor = &HFFF200
Private Sub txtFarbe_AfterUpdate()
Me.recColor.BackColor = Val("&H" & Mid(txtFarbe, 2))
End Sub
Ich habe da schon ein kleines Prob mit. Ich habe ein Textfeld erstellt, Hintergrund normal. Dort habe ich den 1. Codeteil als Ereignis vor Aktualisierung setzen wollen, den 2. Teil wollte ich dann nach Aktualisierung machen.
Private Sub txtKRsfHTML_AfterUpdate()
Me.recColor.BackColor = Val("&H" & Mid(txtKRsfHTML, 2))
End Sub
Private Sub txtKRsfHTML_BeforeUpdate(Cancel As Integer)
recColor.BackColor = &HFFF200
End SubAber me. funzt nicht, weil er sich an recColor stört, meckert, dass die Variable nicht definiert sei :(. Was mache ich falsch?
Gruß Andreas
Hallo,
der erste Code war ein allgemeines Beispiel, der 2. auf dein Problem zugeschnitten.
Du brauchst also nur den 2. Code.
Private Sub txtKRsfHTML_AfterUpdate()
Me.recColor.BackColor = Val("&H" & Mid(me.txtKRsfHTML, 2))
End SubBtw:
Du hast aber schon ein Rechteck in deinem Formular erstellt!!!
ZitatAber me. funzt nicht, weil er sich an recColor stört
Das liegt dann wohl daran, dess dein Rechteck nicht "recColor" benannt ist.
Hi,
Zitat von: steffen0815 am Dezember 17, 2017, 18:00:28
Du brauchst also nur den 2. Code.
Private Sub txtKRsfHTML_AfterUpdate()
Me.recColor.BackColor = Val("&H" & Mid(me.txtKRsfHTML, 2))
End Sub
Danke für den Hinweis, aber auch da bringt er noch den Fehler. Er markiert .recColor blau und bringt
Fehler beim kompilieren. Methode oder Datenobjekt nicht gefunden.
Gruß Andreas
Hallo,
du hast aber schon ein Rechteck(-steuerelement) mit diesem Namen in deinem Formular erstellt!!!
Hi,
sorry, da hab ich mal wieder gepennt. Funktioniert, danke.
Gruß Andreas
Hallo Steffen,
eben ist mir aufgefallen, dass der VBA-Code einen Teil der Hexacodes ganz anders interpretiert als erwartet. Ich habe natürlich unterschiedliche Codes, welche ich mit Gimp "auslese". Z.B. zeigt mir Gimp für ein Blauton die HTML Notation 10a4d2 an (siehe bild1). Wenn ich das nun im Textfeld eingebe, dann macht er irgendein Ocker daraus (bild2). Hat er ein Problem damit, dass hier kein Buchstabe wie bei fff200 als Anfang dabei ist?
Gruß Andreas
Hallo,
ok, da hab ich es mir zu einfach gemacht ;)
Nun dann erstelle eine Funktion:Public Function fncHexColor2RGB(HexColor As String) As String
Dim cHtml As String
Dim Red As integer,Green As integer,Blue As integer
cHtml = Replace(HexColor, "#", "")
Red = Val("&H" & Mid(cHtml, 1, 2))
Green = Val("&H" & Mid(cHtml, 3, 2))
Blue = Val("&H" & Mid(cHtml, 5, 2))
fncHexColor2RGB = RGB(Red, Green, Blue)
End Function
Private Sub txtKRsfHTML_AfterUpdate()
Me.recColor.BackColor = fncHexColor2RGB(me.txtKRsfHTML)
End Sub
Hi,
Zitat von: steffen0815 am Dezember 17, 2017, 19:41:02
Nun dann erstelle eine Funktion:Public Function fncHexColor2RGB(HexColor As String) As String
Dim cHtml As String
Dim Red As integer,Green As integer,Blue As integer
cHtml = Replace(HexColor, "#", "")
Red = Val("&H" & Mid(cHtml, 1, 2))
Green = Val("&H" & Mid(cHtml, 3, 2))
Blue = Val("&H" & Mid(cHtml, 5, 2))
fncHexColor2RGB = RGB(Red, Green, Blue)
End Function
Private Sub txtKRsfHTML_AfterUpdate()
Me.recColor.BackColor = fncHexColor2RGB(me.txtKRsfHTML)
End Sub
Das funktioniert jetzt, vielen Dank. Da ich ja rund 2600 Datensätze habe, wo ich das nutze, habe ich jetzt noch das Problem, dass wenn ich die Farbe eingebe, das Rechteck die Farbe in allen Datensätzen setzt und ändert. Ergo muss sich es binden. Macht man das auch über ein weiteres Zusatzfeld (Textfeld) in der Tabelle oder löst man das anders?
Gruß Andreas
Hallo,
ich weiß nicht ob ich dich richtig verstehe.
Du hast ein Endlosformular und willst in jedem DS eine andere Farbe angezeigt bekommen!?
Dafür hätte ich keine Idee.
Hallo,
das ist ein Endlosformular, wo ich das jetzt integriert habe. Da kann dann auch in jedem Datensatz der HTML-FarbCode sich ändern. Das kommt eben auf die Rückseite der Karte an. Die Farbe des Rechteck müsste ich also pro Datensatz "speichern".
Hmmm, da gibt es keinen Lösungsansatz dafür? Ärgerlich.
Gruß Andreas
Hallo,
was funktionieren würde ist das Farbfeld nur beim aktuellen Datensatz anzuzeigen:
Nutze ein ungebundenes Textfeld "txtAnzColor" statt dem Rechteck. Der nachfolgende Code setzt voraus, dass es in der Tabelle eine eindeutige ID namens "id" gibt: Private Sub Form_Current()
Me.txtAnzColor = Me.id
SetzeBed
End Sub
Sub SetzeBed()
Me.txtAnzColor.FormatConditions.Delete
Me.txtAnzColor.FormatConditions.Add acExpression, , "id = txtAnzColor"
Me.txtAnzColor.FormatConditions(0).BackColor = fncHexColor2RGB(Nz(Me.txtKRsfHTML, "#FFFFFF"))
Me.txtAnzColor.FormatConditions(0).ForeColor = fncHexColor2RGB(Nz(Me.txtKRsfHTML, "#FFFFFF"))
End Sub
Private Sub txtKRsfHTML_AfterUpdate()
SetzeBed
End Sub
Du kannst das Paint-Ereignis des Detailbereichs verwenden und den Hintergrund einfärben (Alternative Farbe im Entwurf auf keine stellen). Flächen, die ungefärbt bleiben sollen, kannst Du mit einem Steuerelement im Hintergrund hinterlegen.Private Sub Detail_Paint()
'num enthält den Farbwert
Me.Detail.BackColor = Nz(Me.num, vbWhite)
End Sub
@Lachtaube:
sehr gute Idee :)
Hi Steffen,
diese Lösung funktioniert sehr gut, danke. Den Vorschlag von Lachtaube muss ich mir leider noch mal durchlesen, da ich mir mal wieder schwer tue das zu verstehen. Ich weiss also aktuell nicht, ob ich dadurch etwas "gewinne" in Form von geschmeidiger etc.
Gruß Andreas
Hi,
Zitat von: Lachtaube am Dezember 18, 2017, 09:10:57
Du kannst das Paint-Ereignis des Detailbereichs verwenden und den Hintergrund einfärben (Alternative Farbe im Entwurf auf keine stellen).
Flächen, die ungefärbt bleiben sollen, kannst Du mit einem Steuerelement im Hintergrund hinterlegen.Private Sub Detail_Paint()
'num enthält den Farbwert
Me.Detail.BackColor = Nz(Me.num, vbWhite)
End Sub
Ich kann das jetzt nicht wirklich verarbeiten, ich verstehe es nicht. Dein Vorschlag bezieht sich noch auf die Lösung mit dem Rechteck, oder? Hat man dadurch nicht mehr Aufwand, da man ja unter Umständen viele Flächen hat, die unbelegt sein sollen/müssen? Flächen sind dann auch z.B. Textfelder etc?
Aktuell habe ich in diesem Endlosformular im Detailbereich als Hintergrund #FFD39B und Alternativ steht auf Keine Farbe. Sorry, ich bekomme es mal wieder nicht auf die Kette :(.
Gruß Andreas
Hallo,
ich habe mal ein (neues) Beispiel angehängt.