Форматирование цвета при поиске в excel - PullRequest
0 голосов
/ 20 февраля 2019

В настоящее время у меня есть макрос, который ищет таблицу Excel и помещает результаты в другой лист.Единственная проблема заключается в том, что он не будет копировать форматирование цвета при передаче результатов.Вот кодЯ пробовал вставлять специальные, но это не работает для всех результатов.

Sub Searchcustomer()    
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet
    Set ws = wb.Sheets("Search")

    If ws.Range("B3").Value = "" And ws.Range("B4").Value = "" And ws.Range("B5").Value = "" And ws.Range("B6").Value = "" And ws.Range("B7").Value = "" And ws.Range("B8").Value = "" Then
                MsgBox "Please Enter Data into Table"
                Exit Sub
    End If

    Dim msheet As Worksheet
    Dim ssheet As Worksheet
    Dim stand  As String
    Dim number As String
    Dim customer As String
    Dim states As String
    Dim find As String
    Dim audit As String
    Dim saudit As String
    Dim est As String
    Dim pub As String
    Dim finalrow As Integer
    Dim finalrow2 As Integer
    Dim i As Integer

    Set msheet = Sheet4
    Set ssheet = Sheet5

    number = ssheet.Range("B3").Value
    customer = ssheet.Range("B4").Value
    states = ssheet.Range("B5").Value
    find = ssheet.Range("B6").Value
    audit = ssheet.Range("B7").Value
    saudit = ssheet.Range("B8").Value

    msheet.Select
    finalrow = msheet.Cells(Rows.Count, 1).End(xlUp).Row

    For i = 1 To finalrow
        If IIf(stand <> "", msheet.Cells(i, 1) = number, True) And IIf(number <> "", msheet.Cells(i, 2) = number, True) And IIf(customer <> "", msheet.Cells(i, 3) = customer, True) And IIf(states <> "", Cells(i, 4) = states, True) And IIf(find <> "", Cells(i, 5) = find, True) And IIf(audit <> "", Cells(i, 6) = audit, True) And IIf(saudit <> "", Cells(i, 7) = saudit, True) And IIf(est <> "", msheet.Cells(i, 8) = number, True) And IIf(pub <> "", msheet.Cells(i, 9) = number, True) Then
            msheet.Range(msheet.Cells(i, 1), msheet.Cells(i, 9)).Copy
            ssheet.Range("A100").End(xlUp).Offset(1, 0).Resize(1, 9).Value = msheet.Range(msheet.Cells(i, 1), msheet.Cells(i, 9)).Value

        End If
    Next i

    ssheet.Select
    ssheet.Range("B3").Select
End Sub

1 Ответ

0 голосов
/ 20 февраля 2019

Обратите внимание, что если вы используете

ssheet.Range("A100").End(xlUp).Offset(1, 0).Resize(1, 9).Value = msheet.Range(msheet.Cells(i, 1), msheet.Cells(i, 9)).Value

, оно передает только значение, но не форматирует.

А если вы используете .Copy, вам нужно указать пункт назначения.Вы этого не сделали, и поэтому ваша линия .Copy вообще ничего не делает.* См. Комментарий Матье ниже.

Вычеркните строку .Value и замените строку .Copy следующим текстом:

msheet.Range(msheet.Cells(i, 1), msheet.Cells(i, 9)).Copy Destination:=ssheet.Range("A100").End(xlUp).Offset(1, 0).Resize(1, 9)

Обратите внимание, чтоПеременные для подсчета строк должны иметь тип Long В Excel больше строк, чем Integer может обработать!

Dim finalrow As Long
Dim finalrow2 As Long
Dim i As Long
...