Код доступа VBA для условного форматирования в Excel - PullRequest
0 голосов
/ 09 октября 2018

У меня есть база данных, которая экспортирует таблицу в Excel, и мне нужно, чтобы форматы ячеек в столбце Z были либо в валюте, либо в процентах на основе значения в столбце Y. Я знаю, что могу сделать это в Excel с условным форматированием, но яя нахожусь в тупике о том, как это сделать в Access.

Я попробовал это

Sub GetExcel_INV_Hist(File_Path_Name)

Dim MyXL As Object

Set MyXL = CreateObject("Excel.Application")
    MyXL.Workbooks.Open (File_Path_Name)

    MyXL.Visible = True

' IHFormat Macro

MyXL.Application.Columns("Z:AC").Select
MyXL.Application.Selection.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"

MyXL.Application.Range("Z:Z").Select
MyXL.Application.Selection.NumberFormat = "0.00%"
MyXL.Application.Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=$Y3 = ""GM"""
MyXL.Application.Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
MyXL.Application.ExecuteExcel4Macro "File_Path_Name!(2,1,""0.00%"")"
MyXL.Application.Selection.FormatConditions(1).StopIfTrue = False
MyXL.Application.Selection.Copy
MyXL.Application.Range("Z4").Select
MyXL.Application.Range(Selection, Selection.End(xlDown)).Select
MyXL.Application.Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

, который сначала изменил формат Z на валюту, затем я выбрал первую ячейку, Z3, проверил, чтобы увидетьесли Y3 = GM, и если это так, измените формат на проценты.Затем выберите оставшуюся часть Z и сделайте Специальную вставку / Формат.Выдает ошибку в строке ExecuteExcel4Macro.Я предполагаю, потому что условное форматирование не было выполнено в рабочей книге, которую создает процесс.

Заранее спасибо за любую помощь.

Редактировать: макрос записан в excel, поэтому строкавопрос был создан как часть макроса Excel.Я расширил свой код, и это ошибка:

Errorsnip

Остальное форматирование работает отлично.

Еще раз спасибо

1 Ответ

0 голосов
/ 10 октября 2018

Я полагаю, у вас проблемы с отслеживанием того, что выбрано, а Доступ не имеет ни малейшего представления о том, что xlExpression (2) , xlPasteFormats (-4122) или xlNone (- 4142) среднее.Вам нужно будет использовать числовой эквивалент вместо этого.

Я был удивлен строкой MyXL.Application.ExecuteExcel4Macro "File_Path_Name!(2,1,""0.00%"")", но это то, что я получил, когда записал макрос для этого.Я по-прежнему выбрасываю эту строку и использую NumberFormat = "£#,##0.00".

Попробуйте этот код:

Sub Test()

    GetExcel_INV_Hist "C:\Path_To_My_Workbook\Book1.xlsx"

End Sub

Public Sub GetExcel_INV_Hist(File_Path_Name As String)

    Dim MyXL As Object
    Dim MyWB As Object

    Set MyXL = CreateXL

    Set MyWB = MyXL.Workbooks.Open(File_Path_Name)

    With MyWB.worksheets("Sheet1")
        .Columns("AA:AC").NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"
        .Columns("Z:Z").NumberFormat = "0.00%"

        With .Columns("Z:Z")
            .FormatConditions.Add Type:=2, Formula1:="=$Y1=""GM""" '2 = xlExpression
            .FormatConditions(.FormatConditions.Count).SetFirstPriority
            With .FormatConditions(1)
                .NumberFormat = "$#,##0.00"
            End With
        End With

    End With

End Sub

Public Function CreateXL(Optional bVisible As Boolean = True) As Object

    Dim oTmpXL As Object

    On Error Resume Next
    Set oTmpXL = GetObject(, "Excel.Application")

    If Err.Number <> 0 Then
        Err.Clear
        On Error GoTo ERROR_HANDLER
        Set oTmpXL = CreateObject("Excel.Application")
    End If

    oTmpXL.Visible = bVisible
    Set CreateXL = oTmpXL

    On Error GoTo 0
    Exit Function

ERROR_HANDLER:
        MsgBox "Error " & Err.Number & vbCr & _
            " (" & Err.Description & ") in procedure CreateXL."
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...