кто такой Kuzmich у Вас в тексте
Ну это уже не знаю даже на что похоже. Написано ведь:
В развитие макроса от Kuzmich:
А Kuzmich это один из наших участников, его сообщение есть в данной теме. Обзывать его каким-то сборником очень невежливо.
Замечание по вопросу совпадения имени процедуры и переменной очень верное, присоединюсь. А все остальное смахивает на агрессивные нравоучения, которые совсем лишние. MsgBox человек используется для показа результата отдельных частей результата выполнения кода, т.к. не факт, что автор темы умеет использовать тот же Immediate. А без показов всяких сообщений автор может вообще не понять, что ему предложили. И это никакого отношения к правильному и неправильному программированию не относится. Все зависит от задач. А здесь задача была показать суть кода.
Далее: да, просили с помощью функции. Но кто мешает предложить альтернативу? Вы предложили функцию - хорошо, автор, скорее всего, будет более рад именно ей. Но это не значит, что все остальные неверно советуют. Может автору как раз процедурой будет удобнее, а не функцией(далеко не всегда пользователи знают, что помимо функций можно и другие возможности использовать).
В общем выражайте своим мысли менее агрессивно. Даже слова "с уважением" и "пожалуйста" никак не смягчают тон Вашего сообщения.
Плюс никто не задал логичный вопрос: а откуда черпать адреса ячеек? Надо ли их задавать в функции или надо определить ячейки выделенные? К тому же можно применить тот же АДРЕС:
=АДРЕС(1;1;;;"Лист1")&":"&АДРЕС(1;2)
будет возвращен адрес диапазона в виде: Лист1!$A$1:$B$1
Для Лист2!В9:В12 с относительной адресацией:
=АДРЕС(9;2;4;;"Лист2")&":"&АДРЕС(12;2;4)
А в Вашей функции очень не хватает воскл.знака:
Function GetAdress(r As Range) As String
GetAdress = r.Parent.Name & "!" & r.Address(0, 0)
End Function
А еще лучше было бы добавить апострофы. Нужно для тех ситуаций, если адрес ячеек будет применяться далее в функциях вроде ДВССЫЛ, а в имени листа будет пробел или иной символ.
АДРЕС в этом случае сам добавляет апострофы, но для функции пользователя это на совести программиста:
Function GetAdress(r As Range) As String
GetAdress = "'" & r.Parent.Name & "'!" & r.Address(0, 0)
End Function
лишними они никогда не будут.