我已經針對兩個問題運行了關於我想要用VBA處理變量範圍和生命週期的問題。VBA 2關於變量範圍和生命週期的問題
我有不同的潛艇使用相同的變量,一遍又一遍。例如,一個將列定義爲日期列,cDate或應用程序的整數。由於我有一個大小相同的聲明部分,我想將它放在一個使用Global的獨立模塊中,但這不起作用。我在這裏設置程序範圍有什麼關係?我怎樣才能做到這一點?
與Q1類似,初始化變量是什麼?具體來說,不是複製和粘貼找到列標題的相同塊(例如cDate),而是將它放入自己的過程中。我正在運行許多問題試圖讓這個工作。我希望這是可能的,也許不是。
如果您需要查看代碼,請告訴我。告訴我你想看到什麼,然後把它扔在這裏。 (PS-我已經通過VBA幫助,MSDN,古爾等,有什麼我不理解這裏)
編輯:添加編輯的代碼,因爲真實的東西很長。所有部分都在單獨的標準模塊中。我讀了全局聲明只在工作簿及以下級別工作,所以我也想每個模塊(這裏沒有顯示)在聲明和設置app
,wb
和wrk
爲Public
: 這裏是我的聲明:
Option Explicit
Global app As Application
Global wb As Workbook
Global wrk As Worksheet
Global cInvoice As Byte
Global iEndCol As Integer
Global lEndRow As Long
Global x As Integer
Global sString1 As String
Global rng As Range
Private Sub Not_Really_a_sub()
'No code. I read that any declaration needed to be in a module
' with a procedure. I tried it with out the dummy sub also
End Sub
'green text, read me and notes
而任何調用子:
Dim modulevariables As Integer
Sub Calling_Sub()
'doing things
lEndRow = 1 'blah blah blah
iEndCol = 1 ' blah blah blah
app.Run "'" & ThisWorkbook.Name & "'!Header_Finder"
'Code using cInvoice etc.
End Sub
和標題取景器:
Private Sub Header_Finder()
With wb.ActiveSheet
For x = 1 To iEndCol
If InStr(UCase(.Cells(x, 1)), UCase("Invoice")) > 0 Then
cInvoice = x
ElseIf .Cells(1, x) = "next thing" Then
cNextThing = x
End If
Next
End With
End Sub
已經感謝。
你是指如何將全局變量放在不同的模塊中不起作用?當你運行你的代碼時,它給出了一個錯誤? 你可以包括你的全局聲明和你的列頭查找程序的初學者? – mkingston 2012-03-23 21:35:31
回車不應該默認提交評論。每次。請參閱原始編輯。 – Bippy 2012-03-23 23:40:25
要清楚,你沒有在任何地方指定它,但我認爲你在訪問變量之前調用了你的變量初始化代碼,對吧? – mkingston 2012-03-24 01:01:59