Как кодировать VBA для вставки значений или формул на основе цвета шрифта? - PullRequest
0 голосов
/ 29 января 2020

Все еще новичок в VBA и нуждается в помощи для изменения некоторого существующего кода.

В новом коде должно быть несколько операторов IF: Если скопированный шрифт имеет зеленый цвет, вставьте в качестве значений и измените цвет шрифта с зеленого на синий. Если скопированный шрифт отличается от зеленого, вставьте его как формулы.

Sub InvestorModelMacro()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
DisplayGridlines = False

Dim r As Range, ws As Worksheet

For Each r In Worksheets("Asset Dashboard").Range("C6:C9")   'go through each cell in DV list
    If Len(r) > 0 Then                                       'only do something if cell not empty
       Worksheets("Live").Range("D3").Value = r.Value        'transfer value to cell D3 of 'Live' tab
       Application.Calculate
       Set ws = Worksheets.Add                               'add new sheet
       ws.Name = Worksheets("Investor Model").Range("D3")    'renames new sheet after selected asset
       Worksheets("Investor Model").Cells.Copy
       ws.Range("A1").PasteSpecial xlValues                   'copy values only from Investor Model to new sheet
       ws.Range("A1").PasteSpecial xlFormats                 'copy formats only from Investor Model to new sheet
       ActiveWindow.DisplayGridlines = False                 'turns off gridlines

End If
Next r

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True


End Sub

К сожалению, приведенный ниже код по-прежнему возвращает формулы для всех ячеек, вставленных в новые рабочие листы. Мне нужно, чтобы зеленый шрифт вставлялся как значения, а все остальные цвета шрифта оставались в виде формул ...

Sub InvestorModelMacro()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
DisplayGridlines = False

Dim r As Range, ws As Worksheet

For Each r In Worksheets("Asset Dashboard").Range("C6:C9")   'go through each cell in DV list
    If Len(r) > 0 Then                                       'only do something if cell not empty
       Worksheets("Live").Range("D3").Value = r.Value        'transfer value to cell D3 of 'Live' tab
       Application.Calculate
       Set ws = Worksheets.Add                               'add new sheet
       ws.Name = Worksheets("Investor Model").Range("D3")    'renames new sheet after selected asset
    If r.Font.Color = RGB(0, 153, 0) Then
        r.Copy
        Range("A1").PasteSpecial xlPasteValues
        Range("A1").Font.Color = RGB(0, 153, 0)
    Else
        r.Copy
        Range("A1").PasteSpecial xlPasteFormulas
        Range("A1").Font.Color = RGB(0, 0, 255)
    End If
       Worksheets("Investor Model").Cells.Copy
       ws.Range("A1").PasteSpecial xlFormulas                'copy values only from Investor Model to new sheet
       ws.Range("A1").PasteSpecial xlFormats                 'copy formats only from Investor Model to new sheet
       ActiveWindow.DisplayGridlines = False                 'turns off gridlines

End If
Next r

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True


End Sub

1 Ответ

0 голосов
/ 29 января 2020

Чтобы сделать это с цветами, вы хотите получить доступ к свойству Font.ColorIndex.

Вам нужно будет выяснить, какой индекс цвета относится к тому, какой оттенок зеленого используется на вашем листе, а также к любому оттенку синего, который вы хотите использовать, и подпишите их в приведенном ниже коде


Псевдокод:

For Each R in xRange
    If Len(R) > 0 Then
        If R.Font.Color = [Green Font Index #] Then
            R.Copy
            Range("?").PasteSpecial xlPasteValues
            Range("?").Font.Color = [Blue Font Index #]
        Else
            R.Copy
            Range("?").PasteSpecial xlPasteFormulas
            Range("?").Font.Color = [What color do you want here?]
        End If
    End If
Next R

Лично я бы предпочел не использовать цвета в качестве драйвера logi c здесь. Если на листе существует какая-то логика c, которая определяет, какие цвета шрифтов ячеек являются пред-макро (что-то вроде условного форматирования) , вам, возможно, будет лучше воссоздать эту логику c здесь

...