我一直在思考和尋找解決方案的好幾個小時,但不能拿出我的基本問題的答案(顯然很難對我):許多子程序的變量:代碼清理
所以我有很多的子程序:
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的es和所有潛艇上的工作簿。 我一直在嘗試什麼我讀了幾乎每一個網站:
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評審人員將使用代碼解決每一個問題,從縮進,命名和註釋到性能和效率,和整體結構和設計。沒有什麼比得到其他人對你的代碼的反饋來學習東西。 –