Уважаемые форумчане, буду благодарен за подсказку в решении проблемки, причину которой я не понимаю.
Есть основная процедура в которой определен тип одной переменной, которая передаем имя открытой книги
-----------
Sub analyse()
'так определена переменная
Dim book_with_source As String
...
'так эта переменная в основной программе получает своё значение
book_with_source = ActiveWorkbook.name
End Sub
-----------
Далее есть процедура в которую я передаю эту переменную
-----------
Private Sub IndividualReportFormer(book_with_source As String, _
Optional book_with_report As String, _
Optional sheet_of_source As Integer, _
Optionalsource_letter As String, _
Optional prefix_type As String)
-----------
Далее вот так из основной программы я обращаюсь к вышеприведенной процедуре
-----------
IndividualReportFormer book_with_sourse
-----------
Однако при выполнении я получаю:
Compile error: ByRef argument type mismatch
и выделяется вот эта переменная - book_with_sourse.
И я не понимаю, почему несовпадение типов? Ведь в обоих случаях четко определено, что переменная строковая.
Сделайте вот так в VBA:
Tools - Options... - поставьте галочку "Require Variable Declaration".
Теперь у вас в новых модулях сверху будет появляться "Option Explicit". Этот параметр будет проверять, создали (в справках вместо термина "создали" используется термин "объявили") ли вы переменную.
Сейчас в уже имеющемся модуле в самом верху вставьте этот текст:
Option Explicit
и запустите макрос. VBA выдаст сообщение, что у вас не создана переменная.
То есть вы передаёте в процедуру переменную, которую не создали. Здесь:
IndividualReportFormer book_with_sourse
происходит два действия:
1) создаётся переменная "book_with_sourse" и 2) эта переменная отправляется в процедуру. При этом у переменной "book_with_sourse" будет тип данных "Variant" (этот тип данных присваивается автоматически, если явно не задавать тип данных). Из-за этого вы и видите ошибку "несоответствие типов", т.к. у переменной тип данных "Variant", а у аргумента процедуры - "String".
Спасибо! Помогло, не обратил внимания, что опечатка была в sourSe вместо sourCe.