#excel #vba
#excel #vba
Вопрос:
Я пытаюсь найти способ поиска по диапазону ячеек в столбце электронной таблицы Excel, чтобы найти любые пустые ячейки. Столбец будет содержать «Заказанное количество», и если он останется пустым, то позже он выдает ошибки в другой системе. Если я смогу обнаружить ошибку сейчас, я могу пометить этот лист как сбойный, чтобы его можно было обработать вручную или запросить у клиента.
Я пробовал различные методы, но продолжаю либо получать сообщение об ошибке «Преобразование из типа ‘Object (,)’ в тип ‘String’ недопустимо», либо он просто игнорирует код.
Первый бит кода находит последнюю использованную строку на листе, поэтому следующий код просматривает только строку 2 столбца 8 до последней используемой строки столбца 8:
Dim rw As Integer = 1
Do Until xlNewWorkSheet.Cells(rw, 1).Value Is Nothing
rw = 1
Loop
Dim last As String = rw - 1
'Dim quantity As String
Dim xlRange As Excel.Range = Nothing
xlRange = xlNewWorkSheet.Range(xlNewWorkSheet.Cells(2, 8), xlNewWorkSheet.Cells(last, 8))
For Each qcell As Excel.Range In xlRange.Cells
If qcell.Value <> "" Then
MsgBox("Empty value found in quantity...exiting...")
End If
Next
With xlNewWorkSheet.Range("A1:Z100")
'quantity = (.Range(.Cells(2, 8), .Cells(last, 8)).Value)
'If quantity Is Nothing Then
'MsgBox("Empty value found in quantity...exiting...")
'Else
.Range(.Cells(2, 1), .Cells(last, 1)).Value = (Cust "_" dt2)
'End If
End With
В идеале я хочу ввести дополнительную проверку строк и столбцов на наличие других аномалий, например, я иногда получаю электронные таблицы с #REF! в них так что удаление этих строк было бы здорово.
Заранее спасибо.
Комментарии:
1. Вы можете использовать
SpecialCells
свойство для диапазона, чтобы находить пустые ячейки без зацикливания, все сразу.2. Привет, Дамиан. Как бы я использовал это в приведенном выше коде?
Ответ №1:
Просто то, что вы можете адаптировать. Подсчитайте, есть ли пустая ячейка. ЕСЛИ количество равно 0, значит, все в порядке. Если нет, что-то не так
Sub test()
Dim rng As Range
Dim TotalBlanks As Long
TotalBlanks = 0
Set rng = Range("A1").CurrentRegion 'change this with your target range
On Error Resume Next
TotalBlanks = rng.SpecialCells(xlCellTypeBlanks).Count
On Error GoTo 0
If TotalBlanks > 0 Then
'there is blanks, so do what you want and exit or end
Debug.Print "There is blanks"
End
End If
'rest of code if there is not a single blank
Debug.Print "Everything is ok"
Set rng = Nothing
End Sub
Если я выполню приведенный выше код с предыдущим примером данных, я получу вывод
Если я выполняю приведенный выше код с предыдущим примером данных, я получаю вывод, и он завершается
Комментарии:
1. Это сработало, спасибо. Я немного адаптировал его к моему текущему коду, но он справился со своей задачей