очень похоже на решение Тима, но с использованием Dicionary
объекта
Private Function HeaderValidation(sht As Worksheet) As String
Dim message As String, key As Variant
With CreateObject("Scripting.Dictionary")
.Add "B5", "Client"
.Add "A2", "back"
.Add "F5", "ATM"
.Add "E5", "ValueInsert"
.Add "G6", "DM"
For Each key In .Keys
If sht.Range(key).Value2 <> .Item(key) Then message = message & .Item(key) & " (" & key & ")" & vbNewLine
Next
End With
HeaderValidation = message
End Function
, как вы можете видеть, я также:
предпочтительнее для передачи объекта листавместо книги, в которой с использованием какого-то листа
не использовался nameInstitution
, поскольку он не использовался в вашем коде
Как Тимуказал, что может быть предпочтительнее установить пары заголовок-адрес вне функции, которые будут принимать его в качестве параметра, например:
Private Function HeaderValidation(sht As Worksheet, dict As Object) As String
Dim message As String, key As Variant
With dict
For Each key In .Keys
If sht.Range(key).Value2 <> .Item(key) Then message = message & .Item(key) & " (" & key & ")" & vbNewLine
Next
End With
HeaderValidation = message
End Function
, где ваш "основной" код будет иметь что-то вроде:
Sub main()
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
With dict
.Add "B5", "Client"
.Add "A2", "back"
.Add "F5", "ATM"
.Add "E5", "ValueInsert"
.Add "G6", "DM"
End With
(any code)
MsgBox HeaderValidation2(ActiveSheet, dict)
(any code)
End Sub