Другой результат при выполнении модуля на разных листах и ​​с помощью элементов управления формы - PullRequest
0 голосов
/ 21 июня 2019

Мне нужно исправить некоторые модули, чтобы проверить, есть ли в файле 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 строках. также должна быть хотя бы одна запись в контрольном листе, чтобы предотвратить ошибку «переменная объекта или переменная блока не установлена» в функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...