Форматирование ячеек на основе других ячеек

#.net #excel #vb.net

#.net #excel #vb.net

Вопрос:

У меня есть список клиентов, импортированных в Excel, с 4 столбцами. Единственные, которые меня интересуют, это Column1, который представляет имена клиентов, и Column4, который указывает, есть ли у них долги, которые нужно оплатить, просто сказав «Y» и «N». Я хочу написать небольшую функцию, которая, когда в четвертом столбце определенной строки указано «N», имя клиента будет выделено красным. Если это «Y», оно будет выделено зеленым цветом. Я писал это до сих пор

 For i = 1 To 15
        Dim pay = oSheet.Range("D" amp; i).Find(What:="Y")
        If Not pay Is Nothing Then
            oSheet.Range("A" amp; i).Interior.ColorIndex = 4
        End If
    Next
    For i = 1 To 15
        Dim pay = oSheet.Range("D" amp; i).Find(What:="N")
        If pay Is Nothing Then
            oSheet.Range("A" amp; i).Interior.ColorIndex = 3
        End If
    Next
 

Проблема, с которой я сталкиваюсь, заключается в том, что, похоже, мой второй for в основном полностью перезаписывает первый и просто меняет цвета всех моих 15 строк. Первый также изменит все мои строки независимо от того, что написано в соответствующем столбце. Я думаю, что одна из строк кода, которую я использую, фактически выполняет поиск по всем ячейкам, если в них есть «Y» или «N», а не только по одному. Не могли бы вы, ребята, разъяснить мне, что я делаю не так, пожалуйста?

Комментарии:

1. Возможно, используйте отладчик и проверьте, какое значение ‘Dim pay = oSheet. Диапазон («D» и i). Возвращает Find(What:=»N»)’ . Я не эксперт по vba, но ваш код выглядит немного иначе, чем образцы, найденные в Интернете, так что, может быть, просто перепроверьте это? docs.microsoft.com/en-us/office/vba/api/excel.range.find

2. Вы не можете этого сделать, dim как ввести переменную в одной строке, а затем выполнить find в другой строке.

3. Как насчет проблемы? Разрешил ли приведенный ниже ответ ваш вопрос, если да, вы могли бы принять его как ответ, чтобы он мог помочь другим членам сообщества, у которых возникают те же проблемы, и мы могли бы заархивировать эту тему, спасибо.

Ответ №1:

Я думаю, вы забыли Not во втором операторе If. это должно быть:

 For i = 1 To 15
    Dim pay = oSheet.Range("D" amp; i).Find(What:="Y")
    If Not pay Is Nothing Then
        oSheet.Range("A" amp; i).Interior.ColorIndex = 4
    End If
Next
For i = 1 To 15
    Dim pay = oSheet.Range("D" amp; i).Find(What:="N")
    If Not pay Is Nothing Then
        oSheet.Range("A" amp; i).Interior.ColorIndex = 3
    End If
Next