Code chạy cho ra 2 kết quả khác nhau ở 2 lần chạy khác nhau (1 người xem)

  • Thread starter Thread starter AndOrNot
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

AndOrNot

Thành viên chính thức
Tham gia
27/6/12
Bài viết
75
Được thích
3
Chào các bác!

Tình hình là em có sưu tầm được trên GPE 1 đoạn Code như trong file đính kèm.
Về mục đích của Code này là kiểm tra xem đã đặt tình trạng "Trust access to Visual Basic Project" hay chưa. Nếu chưa thì kích hoạt tình trạng này.

Em đã test thử code này nhiều lần khác nhau trên 2 tình huống.

Tình huống 1: Không đặt VBProtect.
Kết quả: code chạy đúng theo mục đích, tức là khi mở file lên nó sẽ kiểm tra tình trạng "Trust access..." này, nếu đang ở tình trạng này thì ok (không làm gì cả), nếu chưa ở tình trạng này thì nó sẽ chuyển sang "Trust access...". Đúng với mục đích

Tình huống 2: Đặt VBProtect (password VB trong file đính kèm là "abc")
Kết quả: code vẫn chạy NHƯNG nó bỏ qua việc kiểm tra điều kiện, có nghĩa là nếu đang ở tình trạng này thì nó bỏ chọn, còn ngược lại nếu đang không ở trong tình trạng đó thì nó mới tích vào để chọn. NHƯ VẬY mới chỉ đáp ứng được 50% mục đích đưa ra.

Vậy nhờ các bác giải thích giúp về sự khác nhau này.

Ngoài ra nhờ các bác hướng dẫn cho cách khắc phục để đảm bảo mục đích cuối cùng là chuyển được sang tình trạng "Trust access..."

Cảm ơn các bác!
AndOrNot
 

File đính kèm

Tôi mở file chỉ thấy cái Trust Center gì gì đó, chẳng thấy code kiết gì hết sao biết đường mà mò chứ ta?

Có một số code can thiệp vô cái Trust Access này hay lắm, nhớ không lầm là Thầy NDU đã từng viết chúng trên diễn đàn.
 
Upvote 0
Tôi lục lại cho bạn 3 thủ tục này đây:

Khi bạn muốn Check vào Trust Access thì có thủ tục này:

Mã:
Private Sub VBOM_Check()
    Dim regKey As String
    'HKEY_LOCAL_MACHINE thành HKEY_CURRENT_USER hoac nguoc lai de Enble hay khong
    regKey = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM"
    CreateObject("WScript.Shell").RegWrite regKey, 1, "REG_DWORD"
End Sub

Bạn muốn UnCheck thì dùng thủ tục này:

Mã:
Private Sub VBOM_UnCheck()
    Dim regKey As String
    'HKEY_LOCAL_MACHINE thành HKEY_CURRENT_USER hoac nguoc lai de Enble hay khong
    regKey = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM"
    CreateObject("WScript.Shell").RegWrite regKey, 0, "REG_DWORD"
End Sub

Và bạn muốn bỏ chúng hết thì dùng thủ tục này:

Mã:
Private Sub ResetVBOM()
    On Error Resume Next
    Dim regKey As String
    'Thu tuc de xoa HKEY_LOCAL_MACHINE (Enable=False) hoac HKEY_LOCAL_MACHINE
    regKey = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM"
    CreateObject("WScript.Shell").RegDelete regKey
End Sub

Các thủ tục trên đều là Made In NDU hết đấy nhé!

Cách sử dụng như sau:

Mã:
Sub XoaSheetCode()
    Call VBOM_Check
        With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
            .DeleteLines 1, .CountOfLines
        End With
    Call VBOM_UnCheck
End Sub
 
Upvote 0
Tôi mở file chỉ thấy cái Trust Center gì gì đó, chẳng thấy code kiết gì hết sao biết đường mà mò chứ ta?

Có một số code can thiệp vô cái Trust Access này hay lắm, nhớ không lầm là Thầy NDU đã từng viết chúng trên diễn đàn.

[GPECODE=vb]Private Sub Workbook_Open() 'If Not IsVBATrusted() Then Run ("TrustVBAPr")
Run ("TrustVBAPr")
Application.DisplayAlerts = False
ThisWorkbook.Close SaveChanges:=False
Application.Quit
Application.DisplayAlerts = True
End Sub
'////Code trong module đây!
Function IsVBATrusted() As Boolean
Dim VBC As Object
Application.DisplayAlerts = False
On Error Resume Next
Set VBC = ThisWorkbook.VBProject.VBComponents.Item(1)
On Error GoTo 0
Application.DisplayAlerts = True
IsVBATrusted = Not VBC Is Nothing
End Function
Private Sub TrustVBAPr()
If Not IsVBATrusted() Then
Application.SendKeys "%tmst"
Application.SendKeys "%vs{Enter}"
End If
End Sub


[/GPECODE]
Bác Nghĩa nhà ta cực kỳ mất cảnh giác! Nếu file có bom thì sao!... Luôn đặt chế độ chạy các file trên mạng ở mức Highrisk để kiểm tra code trước khi chạy.
Tôi dính vài con virus ở diễn đàn rồi nên giờ tự mình phải cảnh giác hơn!...
 
Upvote 0
Bác Nghĩa nhà ta cực kỳ mất cảnh giác! Nếu file có bom thì sao!... Luôn đặt chế độ chạy các file trên mạng ở mức Highrisk để kiểm tra code trước khi chạy.
Tôi dính vài con virus ở diễn đàn rồi nên giờ tự mình phải cảnh giác hơn!...

Vậy à, chắc tại vì trước giờ mình hỏng có bị dính chưởng trên trang GPE này nên chơi xả láng sáng dậy sớm! hehehhe
 
Lần chỉnh sửa cuối:
Upvote 0

Bài viết mới nhất

Back
Top Bottom