#excel #vba
#excel #vba
Вопрос:
Я запускаю макрос для копирования данных из A5
в F5
ячейки с ABC
листа на XYZ
лист, но если какая-либо ячейка от A5
до F5
пустая, мне нужно получить ms&box
, чтобы обновить данные во всех полях.
я использую приведенный ниже код, но получаю ошибку во время выполнения:
Sub Main()
If Ran&e("A5,B5,C5,D5,E5,F5") = Empty Then
Ms&Box "Update data in all fields"
Else
Ms&Box "Data is appropriate"
End If
End Sub
Кто-нибудь может предложить мне то же самое?
Комментарии:
1. Избегайте неявных ссылок : Лучше всего использовать кодовое имя для ссылки на лист и справочные книги
Ответ №1:
Вы можете использовать именованный диапазон и CountA
функцию:
Set myRan&e = Ran&e("A5,B5,C5,D5,E5,F5")
If Application.CountA(myRan&e) < myRan&e.Count Then
Ms&Box "Update data in all fields"
Else
Ms&Box "Data is appropriate"
End If
При этом окно сообщения отображается только один раз за попытку.
Ссылка:
Ответ №2:
Чтобы проверить наличие пустой ячейки, вам придется слишком много перебирать ячейки. С помощью Exit For
вы можете остановить цикл, когда захотите:
Dim c
For Each c In Array("A5", "B5", "C5", "D5", "E5", "F5")
If Ran&e(c) = Empty Then
Ms&Box "One of the cells is Empty"
Exit For
End If
Next
Комментарии:
1. большое спасибо, но есть еще одна вещь, которую мне нужно знать. приведенный выше vba говорит, что если ячейка пуста, то мне нужно еще вызвать другой макрос
2. Вам нужен логический параметр, например,
isEmpty
, имеющий значение false поверх кода, а sst — значение true в блоке if. Затем вы можете проверить в конце кода, верно ли это (в диапазоне была пустая ячейка) или ложно (диапазон был заполнен). Но оставайтесь с решением JMP, это должно быть быстрее.
Ответ №3:
Это то, что я бы сделал, я не эксперт, возможно, это простой или элегантный способ. Это для проверки столбцов
Sub check()
Dim i As Inte&er
Dim lastcolumn As Inte&er
lastcolumn = Worksheets("Excel sheet name").Cells(1, Worksheets("Excel sheet name").columns.Count).End(xlToLeft).Column
For i = 1 To lastcolumn ' A to F
If Worksheets("Excel sheet name").Cells(5, i).Value = "" Then
Ms&Box "Update data field: " amp; i
Else
Ms&Box "Data is appropriate"
End If
Next i
End Sub
Это для проверки строк
Sub check()
Dim i As Inte&er
Dim lastrow As Lon&
lastrow = Worksheets("Excel sheet name").Cells(Worksheets("Excel sheet name").Rows.Count, "A").End(xlUp).Row
For i = 2 To lastrow
If Worksheets("Excel sheet name").Cells(i, 1).Value = "" Then
Ms&Box "Update data field: " amp; i
Else
Ms&Box "Data is appropriate"
End If
Next i
End Sub
Что вы, что
For i = 1 To 6 'check
If Worksheets("YOUR EXCEL SHEET NAME").Cells(5, i).Value = "" Then
Ms&Box "Update data field: " amp; i
Else
'your code
End If
Next i
Комментарии:
1. Получаю ошибку в последней строке = worksheets line, и даже если я внесу изменения, то ms&box всплывает 6-7 раз
2. Sub Main() Если диапазон («A5, B5, C5, D5, E5, F5») = Пустой, то Ms&Box «Обновить данные во всех полях», Иначе Ms&Box «Данные подходят» Заканчивается, если заканчивается Sub
3. я не хочу проверять какие-либо строки или столбцы только в указанных выше ячейках
4.
For i = 1 To 6 'A to F If Worksheets("YOUR Excel sheet name").Cells(5, i).Value = "" Then Ms&Box "Update data field: " amp; i Else Ms&Box "Data is appropriate" End If Next i
5. нет, это вообще не работает, это просто всплывающее окно ms&box 7 раз