#.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