Я размышлял и искал довольно много часов для решения, но не смог найти ответ на мою основную проблему (очевидно, мне трудно):Переменные для многих подпрограмм: очистка кода
Поэтому у меня есть много подпрограмм:
Sub OUTPUT()
Call CompañiasCubiertas
Call RangosDatos
Call EERR
Call Balance
Call Flujo
Call Indicadores
Call FormatoEERR
Call FormatoBalance
Call FormatoFlujo
Call FormatoIndicadores
End Sub
в каждом из этих подлодок, я много переменных и книги декларации, которые повторяются:
Dim y As Workbook
Dim x As Workbook
Dim rangoi As Integer
Dim rangof As Integer
Dim compañia As String
Dim oipf As Integer
Dim ogpf As Integer
Dim ogp As Integer
Dim Fechai As Long
Dim Fechaf As Long
Dim Fechaper1 As Long
Dim Fechaper2 As Long
Set y = Application.ActiveWorkbook
Set x = Application.Workbooks.Open("G:\Estudios\Biblioteca\Mercado Accionario Chileno\BBDD Oficial.xlsm")
compañia = y.Sheets("Información Financiera").Range("A3")
'Definir rangos para buscar los datos
Fechai = y.Sheets("Información Financiera").Range("C4").Value
Fechaf = y.Sheets("Información Financiera").Range("D4").Value
Fechaper1 = y.Sheets("Información Financiera").Range("C8").Value
Fechaper2 = y.Sheets("Información Financiera").Range("D8").Value
rangoi = Application.Match(Fechai, y.Sheets("Información Financiera").Range("E2:E300"), 0) + 1
rangof = Application.Match(Fechaf, y.Sheets("Información Financiera").Range("E2:E300"), 0) + 1
Итак, как я могу избежать объявить все этот variabl и книги во ВСЕХ субтитрах. Я пытался что я прочитал почти каждый сайт:
Public rangoi As Integer
Public rangof As Integer
и так далее .... Но если я создаю эти переменные внутри OUTPUT()
, он выдает сообщение об ошибке, и за ее пределами не будут читать когда я запускаю макрос.
У меня отсутствует что-то основное здесь.
Я особенно заинтересован в создании переменного ...
Dim compañia As String
compañia = y.Sheets("Información Financiera").Range("A3")
... полезно для всех подпрограмм, потому что я хочу сделать цикл по переменным compañia
(переустановке его как массив строки) и положить for
в OUTPUT
подпрограммой как:
Sub OUTPUT()
For i=1 To UBound(compañia)
Call subs1 ' subs1(compañia) , meaning the value of compañia changes the value of subroutines
Call subs2 ' subs2(compañia)
Call subs3 ' subs3(compañia)
Next i
End Sub
Являются ли ваши подпрограммы находящимися в том же рабочем листе или модулях? – Jules
Nop, у меня есть модуль для каждой подпрограммы. –
Если ваш код работает, я бы рекомендовал вам опубликовать его (а не только фрагменты!) На [codereview.se], где рецензенты VBA будут рассматривать каждую проблему с вашим кодом, от отступов, имен и комментариев до производительности и эффективности, и общая структура и дизайн. Нет ничего лучше, чем обращать внимание других людей на ваш код для изучения вещей. –