Saya menulis kode berikut:
Function find_results_idle()
Public iRaw As Integer
Public iColumn As Integer
iRaw = 1
iColumn = 1
Dan saya mendapatkan pesan error:
"tidak valid atribut di Sub atau Fungsi"
Apakah anda tahu apa yang saya lakukan salah?
Saya mencoba untuk menggunakan Global
dan bukan Umum
, tapi punya masalah yang sama.
Saya mencoba untuk menyatakan fungsi dirinya sebagai `Publik, tapi itu juga tidak baik.
Apa yang harus saya lakukan untuk membuat variabel global?
Ini adalah pertanyaan tentang ruang lingkup.
Jika anda hanya ingin variabel untuk terakhir seumur hidup fungsi, penggunaan Redup
(singkatan Dimensi) di dalam fungsi atau sub untuk mendeklarasikan variabel:
Function AddSomeNumbers() As Integer
Dim intA As Integer
Dim intB As Integer
intA = 2
intB = 3
AddSomeNumbers = intA + intB
End Function
'intA and intB are no longer available since the function ended
A global variabel (sebagai SLaks menunjuk keluar) dideklarasikan di luar fungsi menggunakan Publik
kata kunci. Variabel ini akan tersedia selama hidup anda menjalankan aplikasi. Dalam kasus Excel, ini berarti variabel-variabel yang akan tersedia selama yang tertentu Excel buku kerja yang terbuka.
Public intA As Integer
Private intB As Integer
Function AddSomeNumbers() As Integer
intA = 2
intB = 3
AddSomeNumbers = intA + intB
End Function
'intA and intB are still both available. However, because intA is public, '
'it can also be referenced from code in other modules. Because intB is private,'
'it will be hidden from other modules.
Anda juga dapat memiliki variabel-variabel yang hanya dapat diakses di dalam modul tertentu (atau kelas) dengan menyatakan mereka dengan Pribadi
kata kunci.
Jika anda're membangun sebuah aplikasi besar dan merasa perlu untuk menggunakan variabel global, saya akan merekomendasikan untuk menciptakan sebuah modul terpisah hanya untuk variabel global. Hal ini akan membantu anda melacak mereka di satu tempat.
Pertanyaannya adalah benar-benar tentang ruang lingkup, sebagai orang lain meletakkannya.
Singkatnya, pertimbangkan ini "modul":
Public Var1 As variant 'Var1 can be used in all
'modules, class modules and userforms of
'thisworkbook and will preserve any values
'assigned to it until either the workbook
'is closed or the project is reset.
Dim Var2 As Variant 'Var2 and Var3 can be used anywhere on the
Private Var3 As Variant ''current module and will preserve any values
''they're assigned until either the workbook
''is closed or the project is reset.
Sub MySub() 'Var4 can only be used within the procedure MySub
Dim Var4 as Variant ''and will only store values until the procedure
End Sub ''ends.
Sub MyOtherSub() 'You can even declare another Var4 within a
Dim Var4 as Variant ''different procedure without generating an
End Sub ''error (only possible confusion).
Anda dapat memeriksa ini BACA referensi untuk lebih lanjut tentang deklarasi variabel dan lain Stack Overflow Pertanyaan untuk lebih lanjut tentang bagaimana variabel-variabel keluar dari ruang lingkup.
Dua lainnya cepat hal-hal:
Jika fungsi ini dalam module/class, anda hanya bisa menulis mereka di luar fungsi, sehingga memiliki Lingkup Global
. Lingkup Global berarti variabel dapat diakses oleh fungsi lain dalam modul yang sama/kelas (jika anda menggunakan redup
sebagai deklarasi pernyataan, menggunakan publik
jika anda ingin variabel-variabel yang dapat diakses oleh semua fungsi dalam semua modul) :
Dim iRaw As Integer
Dim iColumn As Integer
Function find_results_idle()
iRaw = 1
iColumn = 1
End Function
Function this_can_access_global()
iRaw = 2
iColumn = 2
End Function
Membuat semua bilangan bulat dalam Deklarasi Umum.
Kemudian dalam fungsi anda dapat meningkatkan nilai setiap waktu. Lihat contoh (fungsi untuk menyimpan lampiran dari email sebagai CSV).
Public Numerator As Integer
Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim FileName As String
saveFolder = "c:\temp\"
For Each objAtt In itm.Attachments
FileName = objAtt.DisplayName & "_" & Numerator & "_" & Format(Now, "yyyy-mm-dd H-mm-ss") & ".CSV"
objAtt.SaveAsFile saveFolder & "\" & FileName
Numerator = Numerator + 1
Set objAtt = Nothing
Next
End Sub
Cara yang baik untuk membuat Publik/Global variabel adalah untuk mengobati Bentuk seperti sebuah kelas objek dan menyatakan sifat dan penggunaan fasilitas Umum Mendapatkan [variabel] untuk mengakses properti/metode. Anda juga mungkin perlu referensi atau lulus Referensi untuk contoh Bentuk modul. Anda akan mendapatkan pesan kesalahan jika anda memanggil metode untuk bentuk/laporan yang tertutup. Contoh: pass Saya.Bentuk.Modul.Induk ke sub/fungsi tidak dalam bentuk.
Option Compare Database
Option Explicit
''***********************************''
' Name: Date: Created Date Author: Name
' Current Version: 1.0
' Called by:
''***********************************''
' Notes: Explain Who what when why...
' This code Example requires properties to be filled in
''***********************************''
' Global Variables
Public GlobalData As Variant
''***********************************''
' Private Variables
Private ObjectReference As Object
Private ExampleVariable As Variant
Private ExampleData As Variant
''***********************************''
' Public properties
Public Property Get ObjectVariable() As Object
Set ObjectVariable = ObjectReference
End Property
Public Property Get Variable1() As Variant
'Recommend using variants to avoid data errors
Variable1 = ExampleVariable
End property
''***********************************''
' Public Functions that return values
Public Function DataReturn (Input As Variant) As Variant
DataReturn = ExampleData + Input
End Function
''***********************************''
' Public Sub Routines
Public Sub GlobalMethod()
'call local Functions/Subs outside of form
Me.Form.Refresh
End Sub
''***********************************''
' Private Functions/Subs used not visible outside
''***********************************''
End Code
Sehingga dalam modul lain anda akan dapat mengakses:
Public Sub Method1(objForm as Object)
'read/write data value
objForm.GlobalData
'Get object reference (need to add Public Property Set to change reference object)
objForm.ObjectVariable
'read only (needs Public property Let to change value)
objForm.Variable1
'Gets result of function with input
objForm.DataReturn([Input])
'runs sub/function from outside of normal scope
objForm.GlobalMethod
End Sub
Jika anda menggunakan Ikatan seperti yang saya lakukan selalu memeriksa untuk nilai-nilai Null dan benda-benda yang Ada sebelum mencoba untuk melakukan pengolahan.
Anda juga dapat menggunakan -
Private Const SrlNumber As Integer = 910
Private Sub Workbook_Open()
If SrlNumber > 900 Then
MsgBox "This serial number is valid"
Else
MsgBox "This serial number is not valid"
End If
End Sub
Yang diuji pada office 2010