Мне нужно исправить некоторые модули, чтобы проверить, есть ли в файле Excel с фиксированными именами и позициями лист, но в неизвестном количестве строк есть какие-либо пустые поля в обязательных записях. это должно быть выполнено кнопкой на отдельном листе. однако модуль дает разные результаты в зависимости от того, где он выполняется, и даже ошибку, когда выполняется с пустого листа (только кнопка чтения). другое - то, что нужно, они могут выполнять их все по отдельности
Я новичок в макросах, кроме класса в колледже. большая часть того, что я пробовал, из Интернета
Sub Required_Fields()
'main sub
Call Required_Fields_DM
Call Required_Fields_EX
Call Required_Fields_SM
Call Required_Fields_TA
Call Required_Fields_TE
Call Required_Fields_TS
End Sub
Sub Required_Fields_DM()
Dim Dataset As Range
Dim lRow As Long
lRow = Range_Find_Method("DOMAIN DM")
'function to determine last row as otherwise the row after the data is also marked
Set Dataset = Worksheets("DOMAIN DM").Range("A5:C" & lRow & ",L5:L" & lRow)
On Error Resume Next
Dataset.SpecialCells(xlCellTypeBlanks).Interior.Color = vbRed
If Dataset Is Nothing Then
Exit Sub
End If
End Sub
Sub Required_Fields_EX()
Dim Dataset As Range
Dim lRow As Long
lRow = Range_Find_Method("DOMAIN EX")
Set Dataset = Worksheets("DOMAIN EX").Range("A5:C" & lRow)
On Error Resume Next
Dataset.SpecialCells(xlCellTypeBlanks).Interior.Color = vbRed
If Dataset Is Nothing Then
Exit Sub
End If
End Sub
Sub Required_Fields_SM()
Dim Dataset As Range
Dim lRow As Long
lRow = Range_Find_Method("DOMAIN SM")
Set Dataset = Worksheets("DOMAIN SM").Range("A5:F" & lRow)
On Error Resume Next
Dataset.SpecialCells(xlCellTypeBlanks).Interior.Color = vbRed
If Dataset Is Nothing Then
Exit Sub
End If
End Sub
Sub Required_Fields_TA()
Dim Dataset As Range
Dim lRow As Long
lRow = Range_Find_Method("DOMAIN TA")
Set Dataset = Worksheets("DOMAIN TA").Range("A5:E" & lRow)
On Error Resume Next
Dataset.SpecialCells(xlCellTypeBlanks).Interior.Color = vbRed
If Dataset Is Nothing Then
Exit Sub
End If
End Sub
Sub Required_Fields_TE()
Dim Dataset As Range
Dim lRow As Long
lRow = Range_Find_Method("DOMAIN TE")
Set Dataset = Worksheets("DOMAIN TE").Range("A5:C" & lRow)
On Error Resume Next
Dataset.SpecialCells(xlCellTypeBlanks).Interior.Color = vbRed
If Dataset Is Nothing Then
Exit Sub
End If
End Sub
Sub Required_Fields_TS()
Dim Dataset As Range
Dim lRow As Long
lRow = Range_Find_Method("DOMAIN TS")
Set Dataset = Worksheets("DOMAIN TS").Range("A5:B" & lRow & ",I5:I" & lRow & ",N5:N" & lRow)
On Error Resume Next
Dataset.SpecialCells(xlCellTypeBlanks).Interior.Color = vbRed
If Dataset Is Nothing Then
Exit Sub
End If
End Sub
Private Function Range_Find_Method(sheetname As String) As Long
'Finds the last non-blank cell on a sheet/range.
Dim lRow As Long
lRow = Cells.Find(What:="*", _
After:=Worksheets(sheetname).Range("A1"), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
'* is for any type of value; xlPart searches for one part in the cell; xlFormulas searches in formulas, meaning a formula that returns an empty field will also be picked up; xlprevious defines the search (right-> left)
Range_Find_Method = lRow
End Function
ожидается: одинаковые результаты независимо от того, как и где они выполняются.
если он выполняется с любого листа с данными, он работает как положено. если он запускается из контрольного листа, он также помечает ячейки в первых 4 строках. также должна быть хотя бы одна запись в контрольном листе, чтобы предотвратить ошибку «переменная объекта или переменная блока не установлена» в функции