Mit VBA die RGB Werte der Farbtabelle in eine Textdatei exportieren


  
 Bezieht sich auf 
  
 Produkt(e):MicroStation
 Version(en):08.11.09.578
 Umgebung: Windows 7 32 bit,Windows 7 64 bit
 Produktbereich: Programmierung
 Produktunterbereich: VBA
 Ursprünglicher Autor:Artur Goldsweer, Bentley Technical Support Group
  

 

Hintergrundinformation

Die in einer Zeichnunge verwendeten Farben lassen sich über die Farbtabelle darstellen oder auch verändern. Oftmals besteht aber der Wunsch eine Übersicht in Textform aller RGB Werte der Farben zu erhalten.

 

Erforderliche Schritte

Einen solchen Export der Farbwerte in eine Textdatei kann man mit VBA Mitteln generieren. Damit die Ausgabedatei leichter ausgewertet werden kann, werde ich in dem folgenden Beispiel die Ausgabe in eine CSV Datei leiten, wobei eine solche  CSV Datei auch eigentlich  nur eine Textdatei ist, deren einzelnen Werte einer Zeile durch ein Symbol getrennt sind, dieses Symbol variiert jedoch je nach Ländereinstellung, das häufigste Symbol dafür ist ein Semikolon bzw. Komma.

Hier nun ein Beispiel einer Subroutine tbl2txt.

Declare Function GetLocaleInfo Lib "kernel32" Alias _
"GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, _
ByVal lpLCData As String, ByVal cchData As Long) As Long

Declare Function GetUserDefaultLCID% Lib "kernel32" ()

Public Const LOCALE_SLIST = &HC

' Diese Funktion liest aus, welcher Listenseperator für CSV Dateien verwendet werden muss
Function GetListSeparator() As String
Dim ListSeparator As String
Dim iRetVal1 As Long
Dim iRetVal2 As Long
Dim lpLCDataVar As String

Dim Position As Integer
Dim Locale As Long
GetListSeparator = ";"
Locale = GetUserDefaultLCID()

iRetVal1 = GetLocaleInfo(Locale, LOCALE_SLIST, lpLCDataVar, 0)

ListSeparator = String$(iRetVal1, 0)

iRetVal2 = GetLocaleInfo(Locale, LOCALE_SLIST, ListSeparator, iRetVal1)

Position = InStr(ListSeparator, Chr$(0))
If Position > 0 Then
ListSeparator = Left$(ListSeparator, Position - 1)
GetListSeparator = ListSeparator
End If

End Function
' Zerlegt einen Long Wert in die RGB Anteile
Private Sub ExtractRGB(ByVal longColor As Long, intRed As Byte, intGreen As Byte, intBlue As Byte)
    Dim lngColor As Long

    lngColor = longColor
    intRed = lngColor Mod &H100
    lngColor = lngColor \ &H100
    intGreen = lngColor Mod &H100
    lngColor = lngColor \ &H100
    intBlue = lngColor Mod &H100
End Sub

' Extrahiert Farben aus der aktuellen Farbtabelle
Sub tbl2txt()
Dim tbl As ColorTable
Dim col() As Long
Dim r As Byte, g As Byte, b As Byte
Dim bg As Long
Dim Sep As String
    ' das Trennzeichen bei .CSV Dateien auslesen
    Sep = GetListSeparator
    
    ' Farbtabelle der aktiven Zeichznunsgdatei auslesen
    Set tbl = ActiveDesignFile.ExtractColorTable
    col = tbl.GetColors

    ' Öffnen der SCV Datei für die Ausgabe
    Open ActiveDesignFile.FullName + "-rgb values.csv" For Output As #1
    Print #1, "Number" + Sep + "Red" + Sep + "Green" + Sep + "Blue"
    
    ' Extrahiere jede Farbe der Farbtabelle und schreibe sie in die CSV Datei
    For i = LBound(col) To UBound(col)
        Call ExtractRGB(col(i), r, g, b)
        Print #1, Str(i) + Sep + Str(r) + Sep + Str(g) + Sep + Str(b)
    Next
    
    ' zuletzt die Hintergrundfarbe:
    bg = tbl.BackColor
    Call ExtractRGB(bg, r, g, b)
    Print #1, "BG" + Sep + Str(r) + Sep + Str(g) + Sep + Str(b)

    Close #1
End Sub


Die zusätzlichen Deklationen von Funktionen bzw. weiteren Subroutinen dienen zum Auslesen des Trennzeichens für CSV Dateien bzw. zum Zerlegen eine Long Wertes in die RGB Bestandteile in Byte.

Für die Standardfarbtabelle von MicroStation:

ergibt sich bei dieser VBA Routine folgende Ausgabe:

  Number          Red      Green         Blue
0255255255
100255
202550
325500
42552550
52550255
62551270
70255255
8646464
9192192192
10254096
111602240
120254160
131280160
14176176176
150240240
16240240240
1700240
1802400
1924000
202402400
212400240
222401220
230240240
24240240240
2500240
2602400
2724000
282402400
292400240
302401220
310225225
32225225225
3300225
3402250
3522500
362252250
372250225
382251170
390225225
40225225225
4100225
4202250
4322500
442252250
452250225
462251170
470210210
48210210210
4900210
5002100
5121000
522102100
532100210
542101120
550210210
56210210210
5700210
5802100
5921000
602102100
612100210
622101120
630195195
64195195195
6500195
6601950
6719500
681951950
691950195
701951070
710195195
72195195195
7300195
7401950
7519500
761951950
771950195
781951070
790180180
80180180180
8100180
8201800
8318000
841801800
851800180
861801020
870180180
88180180180
8900180
9001800
9118000
921801800
931800180
941801020
950165165
96165165165
9700165
9801650
9916500
1001651650
1011650165
102165970
1030165165
104165165165
10500165
10601650
10716500
1081651650
1091650165
110165970
1110150150
112150150150
11300150
11401500
11515000
1161501500
1171500150
118150920
1190150150
120150150150
12100150
12201500
12315000
1241501500
1251500150
126150920
1270135135
128135135135
12900135
13001350
13113500
1321351350
1331350135
134135870
1350135135
136135135135
13700135
13801350
13913500
1401351350
1411350135
142135870
1430120120
144120120120
14500120
14601200
14712000
1481201200
1491200120
150120820
1510120120
152120120120
15300120
15401200
15512000
1561201200
1571200120
158120820
1590105105
160105105105
16100105
16201050
16310500
1641051050
1651050105
166105770
1670105105
168105105105
16900105
17001050
17110500
1721051050
1731050105
174105770
17509090
176909090
1770090
1780900
1799000
18090900
18190090
18290720
18309090
184909090
1850090
1860900
1879000
18890900
18990090
19090720
19107575
192757575
1930075
1940750
1957500
19675750
19775075
19875670
19907575
200757575
2010075
2020750
2037500
20475750
20575075
20675670
20706060
208606060
2090060
2100600
2116000
21260600
21360060
21460620
21506060
216606060
2170060
2180600
2196000
22060600
22160060
22260620
22304545
224454545
2250045
2260450
2274500
22845450
22945045
23045570
23104545
232454545
2330045
2340450
2354500
23645450
23745045
23845570
23903030
240303030
2410030
2420300
2433000
24430300
24530030
24630520
24703030
248303030
2490030
2500300
2513000
25230300
25330030
254192192192
BG000

Sehen Sie hierzu auch