从单元格中具有多种颜色的单元格中提取字体颜色

时间:2015-09-23 13:35:44

标签: excel excel-vba vba

我有一张Excel工作表,我试图进入MySQL数据库。

  • 我正在使用VBA将数据作为文本写入文件,然后将其上传到数据库。
  • 在工作表的单元格中,有一些颜色编码的字符串。
  • 颜色具有一定的含义,所以当我将值移动到数据库中时,我想保留它们(我在数据库中有一个特殊的列,我列举了颜色)。

问题是某些单元格的字符串用逗号分隔,逗号的一边是字符串是黑色,另一边是蓝色(反之亦然,单元格中可以有更多的逗号和字符串)。

我尝试了什么

我可以使用VBA中的Split函数提取字符串,但会丢失字符串的格式。

我可以使用Range("mycell").Font.ColorIndex获取单元格的颜色,但如果字符串中有多个颜色,则返回NULL

是否可以获得字符串的所有颜色?

示例:一个单元格可以包含以下字符串

  

" W345,PO3244,12309"
   1.(W345)为黑色(colorindex -4105),
   2.(PO3244)为蓝色(colorindex 47)
   3.(12309)为红色(colorindex 3)。

3 个答案:

答案 0 :(得分:1)

您可以使用以下内容然后创建字典/集合/数组来存储颜色,并且只保留唯一值或适合您情况的任何解决方案。这只是展示了如何访问所有颜色。

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

答案 1 :(得分:1)

我使用.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

答案 2 :(得分:0)

在Excel Hero的答案之后,我设法编写了满足我需求的代码,这是一个返回Collection中颜色的函数(也可能是一个数组):

interrupt()