Проверьте, содержит ли каждый лист определенный цвет, и вставьте его в целевой лист. - PullRequest
0 голосов
/ 12 июня 2019

Для каждого листа в моей книге я хотел бы:
- Проверьте, содержат ли строки ячейки с индексом цвета -4142 (желтый)
- Если да, скопируйте и вставьте значения строк в список задач.

Я пробовал:
1) Для каждой петли, как указано ниже.
2) Дим я, как долго

For i = 1 To ThisWorkbook.Worksheets.Count
Set Sh1 = Worksheets(i)
Sub Macro1()

Dim wrk As Workbook
Dim colCount As Integer
Dim ws As Worksheet
Dim Sh1 As Worksheet, Sh2 As Worksheet
Dim r As Range, r1 As Range, cell As Range
Dim iResponse As Integer
Dim LastRow As Long

iResponse = MsgBox("Do you want to COPY your 'Current List' (Hi-lighted rows) to the 'Select List' sheet?", vbYesNoCancel + vbQuestion + vbDefaultButton3, "Copy Selected Results To View In Select List")

Select Case iResponse

Case vbCancel
    MsgBox "Cancelled", vbOKOnly + vbExclamation, "Cancelled copy"

Case vbNo: 'do Nothing
    MsgBox "Doing nothing", vbOKOnly + vbInformation, "Doing nothing"

Case vbYes

For Each ws In ActiveWorkbook.Worksheets ' For each worksheet in workbook
    Set Sh1 = Worksheets(ws.Index) ' Sh1 will be first, second, etc. worksheet
    Set Sh2 = Worksheets("ToDo")  ' sheet to copy to

    Set wrk = ActiveWorkbook ' to get header as first row
    colCount = Sh1.Cells(1, 255).End(xlToLeft).Column
    With Sh2.Cells(1, 1).Resize(1, colCount)
        .Value = Sh1.Cells(1, 1).Resize(1, colCount).Value
        .Font.Bold = True
    End With

    Set r1 = Sh1.Range(Sh1.Cells(2, "D"), Sh1.Cells(Rows.Count, "C").End(xlUp))

    For Each cell In r1
        If cell.Interior.ColorIndex = 6 Then
            If r Is Nothing Then
                Set r = cell
            Else
                Set r = Union(r, cell)
            End If
        End If
    Next

    If Not r Is Nothing Then
        LastRow = Sh2.Cells(Rows.Count, "C").End(xlUp).Row
        With Sh2
            r.EntireRow.Copy Destination:=.Range("A" & LastRow + 1)
            .UsedRange.Offset(1).Interior.ColorIndex = -4142
            Range("A1").Select
        End With

    Else
        MsgBox "No info obtained", vbExclamation, "Nothing copied."

    End If

    Exit For ' Exit For loop
Next ws ' Next worksheet

End Select

End Sub

Ожидаемый результат:
Если в листе 1 есть 3 строки - строка 1: желтая, строка 2: зеленая, строка 3: желтая
и лист 2 имеет 2 строки - строка 1: желтый, строка 2: синий
тогда на листе ToDo будут отображены значения Лист 1, строка 1, Лист 1, строка 3, Лист 2, строка 2

В настоящее время выводится сообщение «Информация не получена».

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

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

Option Explicit

Sub Test()

    Dim oToDo As Worksheet
    Set oToDo = Worksheets("ToDo")
    Dim oToDoRow As Long
    oToDoRow = 2        ' Whatever row your "todo" data starts on

    Dim oCell As Range
    Dim oCurWS As Worksheet
    Dim oPrevRow As String

    For Each oCurWS In ThisWorkbook.Worksheets
        If oCurWS.Name <> "ToDo" Then
            For Each oCell In oCurWS.UsedRange
                ' I used Interior Color you should be able to use colorindex in the same way
                If oCell.Interior.Color = 65535 Then
                    If oPrevRow <> oCurWS.Index & "_" & oCell.Row Then
                        oToDo.Rows(oToDoRow).Value = oCurWS.Rows(oCell.Row).Value
                        oPrevRow = oCurWS.Index & "_" & oCell.Row
                        oToDoRow = oToDoRow + 1
                    End If
                End If
            Next
        End If
    Next

    ' Match oToDoRow with whatever is set as default at the top
    If oToDoRow = 2 Then MsgBox "No info obtained"

End Sub

Обновление, чтобы строка не отображалась несколько раз, если выделено несколько ячеек в строке.

0 голосов
/ 12 июня 2019

Вам нужен целый ряд, чтобы быть "желтым"?или всегда есть одна ячейка в каждой строке?.

Я спрашиваю, что если A1 желтый, B1 синий, C1 красный, D1 желтый, вы хотите скопировать из этой строки только A1 и D1 вЛист "ToDo" - в A1 и B1 или копировать / вставить всю строку?

Хорошего дня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...