我有一个Excel表,我正试图进入MySQL数据库。
- 我使用VBA将数据作为文本写入文件,然后将其上传到数据库。
- 在工作表的单元格中有颜色编码的字符串。
- 颜色有一定的含义,所以我想保留他们,当我移动到数据库中的值(我有一个特殊的列在数据库中,我枚举的颜色)。
问题是,一些单元格有逗号分隔的字符串,逗号的一边是黑色的,另一边是蓝色的(反之亦然,单元格中可以有更多的逗号和字符串)。
what I have try
我可以通过使用VBA中的Split
函数来提取字符串,但这会失去字符串的格式。
我可以使用Range("mycell").Font.ColorIndex
获得单元格的颜色,但如果字符串中有多个颜色,则返回NULL
。
有可能得到字符串的所有颜色吗?
示例:一个单元格可以包含以下字符串
"W345, PO3244, 12309"
1. (W345)将是黑色(colorindex -4105),
2. (PO3244)将是蓝色(colorindex 47)
3.(12309)将是红色(colorindex 3)。
您可以使用以下代码,然后创建一个字典/集合/数组来存储颜色,并且只保留唯一值或任何适合您情况的解决方案。这只是展示了如何访问所有的颜色。
Sub AllColors()
Dim r As Range
Dim x As Integer
Set r = Selection
For x = 1 To Len(r.Value)
Debug.Print r.Characters(x, 1).Font.ColorIndex
Next x
End Sub
我会使用.Font.Color
来剔除RGB值,但如果您喜欢,您可以将其更改为ColorIndex。
你可以采用这个策略:
Sub CellColors2CSV()
Dim j&, k&, c$, r As Range
Set r = ActiveSheet.Cells(1, 1)
Do
j = Len(r)
k = InStr(k + 1, r, ",")
If k Then j = k - 1
c = c & "," & r.Characters(j, 1).Font.Color
Loop Until k = 0
c = Mid$(c, 2)
MsgBox c
End Sub
在Excel Hero的答案之后,我设法编造了这段代码,满足了我的需求,这是一个返回集合中颜色的函数(也可以是一个数组):
Function GetColors(i, j) As Collection
Dim l&, k&, r As Range
Dim c As Collection
Set c = New Collection
Set r = ActiveSheet.Cells(i, j)
Do
l = Len(r)
If Not InStr(r, ",") Then
k = InStr(k + 1, r, ",")
ElseIf Not InStr(r, " / ") Then
k = InStr(k + 1, r, " / ")
End If
If k Then l = k - 1
c.Add r.Characters(l, 1).Font.ColorIndex
Loop Until k = 0
Set GetColors = c
End Function