[Hỏi] Cách khai báo biến toàn cục trong VBA

Liên hệ QC

quyenpv

Thu nhặt kiến thức
Tham gia
5/1/13
Bài viết
709
Được thích
90
Giới tính
Nam
Nghề nghiệp
Decode cuộc đời!
Qua GPE được học hỏi rất nhiều điều, tuy nhiên còn hạn chế chưa biết cách viết code thế nào
Em muốn hỏi có cách nào khai báo biến toàn cục trong VBA mà sử dụng được trong nhiều Module không ạ, do code còn hoàn thiện mà chỉnh sửa liên tục xóa dòng nên đối khi mò mãi mới tìm ra nguyên nhân là do địa chỉ Target bị sai nên em nghĩ dùng biến khai báo từ đầu là hay nhất muốn sửa thế nào chỉ cần sửa biến là xong
VD: Em có lấy như sau:
Mã:
If Sheets("TS").Range("B48").Value="A" then
.....
làm gì đó
End if

Bây giờ mình khai báo
Dim Check as Sheets("TS").Range("B48")
sau đó Code dùng
Mã:
If Check.Value="A" then
.....
làm gì đó
End if

Nhờ các anh chỉ giúp với ạ
 
Qua GPE được học hỏi rất nhiều điều, tuy nhiên còn hạn chế chưa biết cách viết code thế nào
Em muốn hỏi có cách nào khai báo biến toàn cục trong VBA mà sử dụng được trong nhiều Module không ạ, do code còn hoàn thiện mà chỉnh sửa liên tục xóa dòng nên đối khi mò mãi mới tìm ra nguyên nhân là do địa chỉ Target bị sai nên em nghĩ dùng biến khai báo từ đầu là hay nhất muốn sửa thế nào chỉ cần sửa biến là xong
VD: Em có lấy như sau:
Mã:
If Sheets("TS").Range("B48").Value="A" then
.....
làm gì đó
End if

Bây giờ mình khai báo
Dim Check as Sheets("TS").Range("B48")
sau đó Code dùng
Mã:
If Check.Value="A" then
.....
làm gì đó
End if

Nhờ các anh chỉ giúp với ạ
SAO không viết thành vậy xem sao
PHP:
If [A1].Value = "A" Then
    MsgBox "ok"
End If
 
Upvote 0
Do minh để các thông số trong sheet TS mà đôi khi có thêm hoặc xoá dòng nên đang muốn khai báo tổng để không phải chỉnh code nhiều mà chỉ cần sửa biến thôi
 
Upvote 0
Do minh để các thông số trong sheet TS mà đôi khi có thêm hoặc xoá dòng nên đang muốn khai báo tổng để không phải chỉnh code nhiều mà chỉ cần sửa biến thôi
mình ko hiểu bạn muốn gì.úp file lên nêu muốn như thế nào nếu được mình làm cho
 
Upvote 0
Như này
Mã:
Public check As Range
Sub abc()
    Set check = Sheets("TS").Range("a1")
    If check.Value = "A" Then ' hoac if Ucace(check.value) like "A" then...
        '....
    End If
End Sub

Ko biết có đúng ý bạn.
 
Lần chỉnh sửa cuối:
Upvote 0
Như này
Mã:
Public check As Range
Sub abc()
    Set check = Sheets("TS").Range("a1")
    If check.Value = "A" Then ' hoac if Ucace(check.value) like "A" then...
        '....
    End If
End Sub

Ko biết có đúng ý bạn.

Không đúng anh ạ, em đang làm ngược lại là khai báo biến
Dim check as Sheets("TS").Range("a1")
sau đó em chỉ quan tâm biến check thôi, cho dù mình có chỉnh sửa sheet("TS) như thế nào thì mình chỉ cần sửa check as Sheets("TS").Range("An") thôi có được không ạ
 
Upvote 0
Không đúng anh ạ, em đang làm ngược lại là khai báo biến
Dim check as Sheets("TS").Range("a1")
sau đó em chỉ quan tâm biến check thôi, cho dù mình có chỉnh sửa sheet("TS) như thế nào thì mình chỉ cần sửa check as Sheets("TS").Range("An") thôi có được không ạ
Bạn khai báo biến kiểu chi mà là vậy, làm sao khai được là as Sheets("TS").Range("a1").
Đã là biến thì khai báo kiểu Range, String, long...
Rồi từ biến bạn truyền số liệu vào đấy.
ko ko thích set ở A1 thì bạn set A10, đâu có ảnh hưởng.
Bạn thử up file và nói rõ ý tưởng xem sao?
 
Upvote 0
Không đúng anh ạ, em đang làm ngược lại là khai báo biến
Dim check as Sheets("TS").Range("a1")
sau đó em chỉ quan tâm biến check thôi, cho dù mình có chỉnh sửa sheet("TS) như thế nào thì mình chỉ cần sửa check as Sheets("TS").Range("An") thôi có được không ạ
Tốt nhất là bạn nên nêu rõ mục đích cuối cùng, nếu có thể thì đưa file đính kèm. Có thể giải pháp của bạn chưa hẳn đã là "tốt" nhất, mọi người có thể đóng góp thêm các giải pháp khác.
 
Upvote 0
Vậy có thể khai báo kiểu này được không anh
Dim check1,check2 as Range
Sau đó set giá trị
- check 1 cho nó bằng Sheets("TS").Range("B48")
- check 2 cho nó bằng Sheets("TS").Range("B49")

Mã:
'================================================================
    ' BEGIN AN HIEN CAC BIEN BAN NGHIEM THU KEO CAP
'================================================================
    'Set gia tri
    If Sheets("TS").Range("B48").Value = "A" Then
        Call Keo_Cap
    End If
'================================================================
    ' END AN HIEN CAC BIEN BAN NGHIEM THU KEO CAP
'================================================================


'================================================================
    ' BGIN AN HIEN CAC BIEN BAN NGHIEM THU TRONG COT
'================================================================
    If Sheets("TS").Range("B49").Value = "A" Then
        Call Trong_Cot
    End If


'================================================================
    ' END AN HIEN CAC BIEN BAN NGHIEM THU TRONG COT
'================================================================


'================================================================
    ' BEGIN AN HIEN CAC BIEN BAN NGHIEM THU NGAM HOA
'================================================================
    If Sheets("TS").Range("B50").Value = "A" Then
        Call Ngam_CB
    End If
    
    If Sheets("TS").Range("B51").Value = "A" Then
        Call Thuhoi_CotCap
    End If
'================================================================
    ' END AN HIEN CAC BIEN BAN NGHIEM THU NGAM HOA
'================================================================
 
Upvote 0
Sau khi khai báo được biến toàn cục như trên em chỉ việc
Mã:
    'Set gia tri
    If check1.Value = "A" Then
        Call Keo_Cap
    End If

    If check2.Value = "A" Then
        Call Trong_Cot
    End If


    If check3.Value = "A" Then
        Call Ngam_CB
    End If
    
    If check4.Value = "A" Then
        Call Thuhoi_CotCap
    End If

Do trong các Module sử dụng rất nhiều lần nên trong quá trình sử dụng nếu có can thiệp thay đổi Sheet("TS") thì chỉnh sửa code rất mệt và phải dò từng dòng. Mong các anh giúp đỡ cách khai báo với ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Có n biến thì bạn khai báo n biến
Xong gán từng biến trỏ vào từng ô,
Như tôi set ở bài #5. Không khai kiểu Public thì Dim thôi.
 
Upvote 0
Có n biến thì bạn khai báo n biến
Xong gán từng biến trỏ vào từng ô,
Như tôi set ở bài #5. Không khai kiểu Public thì Dim thôi.
Nếu như vậy thì mỗi một Sub thì mình đều phải set giá trị cho biến sao anh. Có cách nào khai báo hay sửa chỉ một lần cho tất cả các Sub được không ạ
 
Upvote 0
Các cao nhân giúp em với ạ_)()(-$$$$@:cc_hang:
 
Upvote 0
Sau khi khai báo được biến toàn cục như trên em chỉ việc
Mã:
    'Set gia tri
    If check1.Value = "A" Then
        Call Keo_Cap
    End If

    If check2.Value = "A" Then
        Call Trong_Cot
    End If


    If check3.Value = "A" Then
        Call Ngam_CB
    End If
    
    If check4.Value = "A" Then
        Call Thuhoi_CotCap
    End If

Do trong các Module sử dụng rất nhiều lần nên trong quá trình sử dụng nếu có can thiệp thay đổi Sheet("TS") thì chỉnh sửa code rất mệt và phải dò từng dòng. Mong các anh giúp đỡ cách khai báo với ạ
đọc hiểu được bạn trình bày chắc phải 4 mùa xu hào, cải bắp nữa quá
 
Upvote 0
Nếu tôi làm thì tôi dùng hằng toàn cục:
- đặt một module có tên là Hang_TC
- trong module đó, đặt
public const SHEETA = "Sheet1"
public const RANGE1 = "A5"
public const RANGE2 = "C5"
...
- trong các moldules khác code sẽ là:
Sheets(SHEETA).Range(RANGE1).Value ....
Đại khái vậy.

khi cần sửa, chỉ phải vào module Hang_TC để sửa thôi.

cách thức này tôi vẫn làm hoài. Tìm mấy bài tôi viết code cho mấy cái sub dài dài vài chục dòng sẽ thấy (mấy cái sub ngắn không bỏ công khai báo hằng)
 
Upvote 0
Nếu tôi làm thì tôi dùng hằng toàn cục:
- đặt một module có tên là Hang_TC
- trong module đó, đặt
public const SHEETA = "Sheet1"
public const RANGE1 = "A5"
public const RANGE2 = "C5"
...
- trong các moldules khác code sẽ là:
Sheets(SHEETA).Range(RANGE1).Value ....
Đại khái vậy.

khi cần sửa, chỉ phải vào module Hang_TC để sửa thôi.

cách thức này tôi vẫn làm hoài. Tìm mấy bài tôi viết code cho mấy cái sub dài dài vài chục dòng sẽ thấy (mấy cái sub ngắn không bỏ công khai báo hằng)

Em viết thế này sao cứ báo lỗi anh nhỉ? Nó báo Variable not defined
PHP:
Sub Bien_toan_cuc()
    Public Const T6 = TimeSerial(6, 0, 0)
    Public Const T7 = TimeSerial(7, 0, 0)
    Public Const T8 = TimeSerial(8, 0, 0)
    Public Const T9 = TimeSerial(9, 0, 0)
    Public Const T10 = TimeSerial(10, 0, 0)
    Public Const T14 = TimeSerial(14, 0, 0)
    Public Const T15 = TimeSerial(15, 0, 0)
    Public Const T17 = TimeSerial(17, 0, 0)
    Public Const T18 = TimeSerial(18, 0, 0)
    Public Const T20 = TimeSerial(20, 0, 0)
    Public Const T21 = TimeSerial(21, 0, 0)
    Public Const T22 = TimeSerial(22, 0, 0)
    Public Const T23 = TimeSerial(23, 0, 0)
    Public Const T24 = TimeSerial(24, 0, 0)
    Public Const T30 = TimeSerial(30, 0, 0)
    Public Const T32 = TimeSerial(32, 0, 0)
End Sub
 
Upvote 0
Em viết thế này sao cứ báo lỗi anh nhỉ? Nó báo Variable not defined
PHP:
Sub Bien_toan_cuc()
    Public Const T6 = TimeSerial(6, 0, 0)
    Public Const T7 = TimeSerial(7, 0, 0)
    Public Const T8 = TimeSerial(8, 0, 0)
    Public Const T9 = TimeSerial(9, 0, 0)
    Public Const T10 = TimeSerial(10, 0, 0)
    Public Const T14 = TimeSerial(14, 0, 0)
    Public Const T15 = TimeSerial(15, 0, 0)
    Public Const T17 = TimeSerial(17, 0, 0)
    Public Const T18 = TimeSerial(18, 0, 0)
    Public Const T20 = TimeSerial(20, 0, 0)
    Public Const T21 = TimeSerial(21, 0, 0)
    Public Const T22 = TimeSerial(22, 0, 0)
    Public Const T23 = TimeSerial(23, 0, 0)
    Public Const T24 = TimeSerial(24, 0, 0)
    Public Const T30 = TimeSerial(30, 0, 0)
    Public Const T32 = TimeSerial(32, 0, 0)
End Sub
Đã là HẰNG SỐ thì phải là một con số cụ thể chứ không thể thông qua hàm kiểu đó được
Ví dụ thế này thì được:
PHP:
Sub Bien_toan_cuc()
    Public Const T6 = 6
    Public Const T7 = 7
    Public Const T9 = 9
    ........
End Sub
 
Upvote 0
Đã là HẰNG SỐ thì phải là một con số cụ thể chứ không thể thông qua hàm kiểu đó được
Ví dụ thế này thì được:
PHP:
Sub Bien_toan_cuc()
    Public Const T6 = 6
    Public Const T7 = 7
    Public Const T9 = 9
    ........
End Sub
Vậy thì chắc em khó đặt hằng toàn cục cho thời gian này rồi, vì nhiều giờ nó là số vô tỉ :((
 
Upvote 0
Vậy thì chắc em khó đặt hằng toàn cục cho thời gian này rồi, vì nhiều giờ nó là số vô tỉ :((
Thì khai báo nó là BIẾN đi, sao cứ phải HẰNG mới chịu vậy?
Tuy nhiên, nếu bắt buộc phải là HẰNG thì... vẫn có cách: Khai báo giống bài 17, lúc dùng ta chịu khó chia hằng cho 24
 
Upvote 0
Thì khai báo nó là BIẾN đi, sao cứ phải HẰNG mới chịu vậy?
Tuy nhiên, nếu bắt buộc phải là HẰNG thì... vẫn có cách: Khai báo giống bài 17, lúc dùng ta chịu khó chia hằng cho 24
Ví dụ em làm phải không thầy?

PHP:
Sub Bien_toan_cuc()
Public T6 as Single, T7 as Single
    Set T6 = TimeSerial(6, 0, 0)
    Set T7 = TimeSerial(7, 0, 0)
End Sub
Bài đã được tự động gộp:

Ví dụ em làm phải không thầy?

PHP:
Sub Bien_toan_cuc()
Public T6 as Single, T7 as Single
    Set T6 = TimeSerial(6, 0, 0)
    Set T7 = TimeSerial(7, 0, 0)
End Sub
Em nghĩ vấn đề nó sai ở chỗ khác. Em tạo hẳn một module chỉ để chứa các biến, hằng số hay dùng. Nhưng ở module chứa biến đó lại báo lỗi Variable not defined
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom