Здравствуйте. Иногда, при написании кода, мне прихоидиться использовать объекты Application и WorksheetFunction. В плане оформления, там где сильно часто нужно было использовать тот же WorksheetFunction, код становился неприглядным. Я нашёл способ как красивее оформить код, загнав эти объекты в переменные
'До Sub dfhsgh() Debug.Print WorksheetFunction.Max(7, 4) EndSub 'После Sub dfhsghn() Dim WF As WorksheetFunction Set WF = WorksheetFunction
Debug.Print WF.Max(7, 4) EndSub
А ещё, что бы каждый раз не прописывать Dim, сделал его публичным.
Public WF As WorksheetFunction
Вопрос мой в том, можно ли и
Set WF = WorksheetFunction
сделать публичной, что бы каждый раз не прописывать эту строку в процедурах.
Здравствуйте. Иногда, при написании кода, мне прихоидиться использовать объекты Application и WorksheetFunction. В плане оформления, там где сильно часто нужно было использовать тот же WorksheetFunction, код становился неприглядным. Я нашёл способ как красивее оформить код, загнав эти объекты в переменные
'До Sub dfhsgh() Debug.Print WorksheetFunction.Max(7, 4) EndSub 'После Sub dfhsghn() Dim WF As WorksheetFunction Set WF = WorksheetFunction
Debug.Print WF.Max(7, 4) EndSub
А ещё, что бы каждый раз не прописывать Dim, сделал его публичным.
Public WF As WorksheetFunction
Вопрос мой в том, можно ли и
Set WF = WorksheetFunction
сделать публичной, что бы каждый раз не прописывать эту строку в процедурах.ZetMenChavo
Апострофф, интересный способ. Только я заметил один минус. Если в каком то макросе случается ошибка, то Set сбрасывается и перестают работать все макросы использующие эту переменную, до тех пор пока снова, уже в ручную, не запустить ваш макрос.
Я ещё поэксперементирова с тем что знаю о присвоении переменных. Во первых обнаружил что вместо WorksheetFunction, можно использовать Application, Попытался использовать следующие строчки:
Public WF AsNew WorksheetFunction Public Ap AsNew Application
На первую, с WorksheetFunction, vba ругается, вторая по большей части работает, функции там можно использовать, но при попытки узнать имя нажатой фигуры выдаёт ошибку.
'Вариант 1 Public Ap As Application Sub sfnsfgnsgn() Set Ap = Application 'Приходиться писать Set Debug.Print Ap.Caller 'Овал 2" Debug.Print Ap.Max(2, 3) ' 3 EndSub
'Вариант 2 Public Ap AsNew Application Sub sfnsfgnsgn() 'Уже без Set, но Caller не работает Debug.Print Ap.Caller '"Error 2023" Debug.Print Ap.Max(2, 3) ' 3 EndSub
Апострофф, интересный способ. Только я заметил один минус. Если в каком то макросе случается ошибка, то Set сбрасывается и перестают работать все макросы использующие эту переменную, до тех пор пока снова, уже в ручную, не запустить ваш макрос.
Я ещё поэксперементирова с тем что знаю о присвоении переменных. Во первых обнаружил что вместо WorksheetFunction, можно использовать Application, Попытался использовать следующие строчки:
Public WF AsNew WorksheetFunction Public Ap AsNew Application
На первую, с WorksheetFunction, vba ругается, вторая по большей части работает, функции там можно использовать, но при попытки узнать имя нажатой фигуры выдаёт ошибку.
'Вариант 1 Public Ap As Application Sub sfnsfgnsgn() Set Ap = Application 'Приходиться писать Set Debug.Print Ap.Caller 'Овал 2" Debug.Print Ap.Max(2, 3) ' 3 EndSub
'Вариант 2 Public Ap AsNew Application Sub sfnsfgnsgn() 'Уже без Set, но Caller не работает Debug.Print Ap.Caller '"Error 2023" Debug.Print Ap.Max(2, 3) ' 3 EndSub
Public CoStS() As ColorStops 'Cells(1).Interior.Gradient.ColorStops Public CoSt() As ColorStop 'Cells(1).Interior.Gradient.ColorStops(1) Public TxRng() As TextRange2 'ActiveSheet.Shapes(k).TextFrame2.TextRange Public FilFor() As FillFormat 'ActiveSheet.Shapes(k).Fill Public ColFor() As ColorFormat 'ActiveSheet.Shapes(k).Fill.GradientStops(1).Color
Словом, возможность заключать значения и объекты в компактные переменные, не для бесполезного дела придумана.
А ещё вот к примеру
Public CoStS() As ColorStops 'Cells(1).Interior.Gradient.ColorStops Public CoSt() As ColorStop 'Cells(1).Interior.Gradient.ColorStops(1) Public TxRng() As TextRange2 'ActiveSheet.Shapes(k).TextFrame2.TextRange Public FilFor() As FillFormat 'ActiveSheet.Shapes(k).Fill Public ColFor() As ColorFormat 'ActiveSheet.Shapes(k).Fill.GradientStops(1).Color
Словом, возможность заключать значения и объекты в компактные переменные, не для бесполезного дела придумана. ZetMenChavo
Попытался использовать следующие строчки: Public WF As New WorksheetFunction Public Ap As New Application
На первую, с WorksheetFunction, vba ругается
Можно объявить в начале модуля публичную функцию с желаемым коротким идентификатором, ВОЗВРАЩАЮЩУЮ объект WorksheetFunction и дальше использовать ее хоть в процедурах, хоть в Окне отладки (если случится ошибка, работоспособность сохранится; IntelliSense по точке также работает):
Option Explicit
PublicFunction wf() As WorksheetFunction Set wf = WorksheetFunction EndFunction
Sub test() Debug.Print wf.Sum(23, 17, 20) '= 60 EndSub
Попытался использовать следующие строчки: Public WF As New WorksheetFunction Public Ap As New Application
На первую, с WorksheetFunction, vba ругается
Можно объявить в начале модуля публичную функцию с желаемым коротким идентификатором, ВОЗВРАЩАЮЩУЮ объект WorksheetFunction и дальше использовать ее хоть в процедурах, хоть в Окне отладки (если случится ошибка, работоспособность сохранится; IntelliSense по точке также работает):
Option Explicit
PublicFunction wf() As WorksheetFunction Set wf = WorksheetFunction EndFunction
Sub test() Debug.Print wf.Sum(23, 17, 20) '= 60 EndSub
Gustav, ОГРОМЕННОЕ СПАСИБО Работает именно так как и хотелось, даже с Application вместо WorksheetFunction. Даже не обязательно в одном модуле держать, что дополнительно облегчает написание макросов в разных модулях
Gustav, ОГРОМЕННОЕ СПАСИБО Работает именно так как и хотелось, даже с Application вместо WorksheetFunction. Даже не обязательно в одном модуле держать, что дополнительно облегчает написание макросов в разных модулях ZetMenChavo
Апострофф, Вам тоже спасибо за попытки решить мой вопрос. Полезно было узнать про то как запускать макрос при открытии книги и то что значения публичных переменных сохраняются, даже если ни один макрос не запущен
Апострофф, Вам тоже спасибо за попытки решить мой вопрос. Полезно было узнать про то как запускать макрос при открытии книги и то что значения публичных переменных сохраняются, даже если ни один макрос не запущен ZetMenChavo