String Excel VBA:函数如何返回带有各种颜色字符的字符串?

String Excel VBA:函数如何返回带有各种颜色字符的字符串?,string,vba,colors,String,Vba,Colors,下面的代码应该生成一个字符串,比如 XXXXX | XXXXX | XXXXX | XXXXX | XXXXX | XXXXX。 这代表了我正在构建的6周内的5个工作日。 我还希望前几个X是黑色的,其余的是红色的。例如,我们可能在第二周进行了一部分,我希望前7个X是黑色的,其余的都是红色的 我的代码可以生成这个字符串。然而,我不知道如何使颜色发生变化。我不知道如何给函数返回的实际字符串着色。因此,我尝试在TargetCell参数中添加一个自单元格引用,以便在构建字符串时,可以为结果着色 在我的电

下面的代码应该生成一个字符串,比如 XXXXX | XXXXX | XXXXX | XXXXX | XXXXX | XXXXX。 这代表了我正在构建的6周内的5个工作日。 我还希望前几个X是黑色的,其余的是红色的。例如,我们可能在第二周进行了一部分,我希望前7个X是黑色的,其余的都是红色的

我的代码可以生成这个字符串。然而,我不知道如何使颜色发生变化。我不知道如何给函数返回的实际字符串着色。因此,我尝试在TargetCell参数中添加一个自单元格引用,以便在构建字符串时,可以为结果着色

在我的电子表格单元格D3中,我有一个公式 =BuildColorStringA3、A4、A5、C2、C3、D3、B41:B45 不要太担心前5个参数或最后一个参数。关注第六个参数,即D3的自参考

无论如何,如果我将第5个参数设为完全不同的单元格,那么该单元格中的文本将正确着色。但是,如果我尝试给我生成的结果着色,它就不起作用了

我意识到我这里有鸡和蛋的问题。我想不出怎么过去

我还尝试从着色中分离字符串生成。我把颜色放在我按下的按钮后面。它不起作用。我似乎无法对函数的字符串构建结果着色

下面是我的代码:

Function BuildColorString(BeginDate As Date, EndDate As Date, Holidays As Integer, AsOfDate As Date, HolidaysPassed As Integer, TargetCell As Range, rColors As Range)
Dim iDayCount As Integer
Dim iPosition As Integer
Dim iColor As Integer
Dim WIPDate As Date
Dim iWeekDay As Integer

' BUILD STRING
BuildColorString = ""
WIPDate = BeginDate
While WIPDate <= EndDate
    iWeekDay = Weekday(WIPDate)
    If (iWeekDay = 1) Then
        'Sunday
    Else
        If (iWeekDay = 7) Then
            'Saturday
            If (WIPDate <> BeginDate) Then
                BuildColorString = BuildColorString & "|"
            End If
        Else
            'Weekday
            BuildColorString = BuildColorString & "X"
        End If
    End If
    WIPDate = WIPDate + 1
Wend

' COLORIZE STRING
WIPDate = BeginDate
iDayCount = 1
iPosition = 1
While WIPDate <= EndDate
    iWeekDay = Weekday(WIPDate)
    If (iWeekDay = 1) Then
        'Sunday
    Else
        If (iWeekDay = 7) Then
            'Saturday
            If (WIPDate <> BeginDate) Then
                iPosition = iPosition + 1
            End If
        Else
            'Weekday
            If (iPosition <= 5) Then
                ' BLACK, Prior Completed
                iColor = rColors(1, 1).Characters(1, 1).Font.ColorIndex
            Else
                ' GREEN, Recent Completed
                iColor = rColors(3, 1).Characters(1, 1).Font.ColorIndex
            End If

            TargetCell(1, 1).Characters(iPosition, 1).Font.ColorIndex = iColor

            ' BuildColorString.Characters(iPosition, 1).Font.ColorIndex = vbRed 'rColor.Font.ColorIndex
            iDayCount = iDayCount + 1
            iPosition = iPosition + 1
        End If
    End If
    WIPDate = WIPDate + 1
Wend


End Function

用作工作表单元格自定义项的VBA函数通常只能向调用单元格返回值:它们不能直接修改工作表,包括更改格式。