Chỉ chạy Macro khi mở file Excel lần đầu.

Liên hệ QC

chidung2009

Thành viên hoạt động
Tham gia
12/9/12
Bài viết
123
Được thích
8
Khi kích vào để mở file excel lần đầu thì chạy mới chạy Macro, nhưng khi kích mở file lần thứ 2,3 ..... thì không chạy Macro này nữa.
Xin các anh chị chỉ bảo
 
Bạn xem thử file này đúng ý bạn chưa.
 

File đính kèm

  • Chay lan dau.xlsm
    12.4 KB · Đọc: 41
Upvote 0
Cảm ơn bạn nhiều.
Đúng ý mình rồi nhưng mình vẫn chưa hiểu nguyên tắc hoạt động của code này, bạn giúp mình giải thích cho mình hiểu vs
 
Upvote 0
Cảm ơn bạn nhiều.
Đúng ý mình rồi nhưng mình vẫn chưa hiểu nguyên tắc hoạt động của code này, bạn giúp mình giải thích cho mình hiểu vs
Mã:
' Tự động chạy thủ tục này khi mở file
Private Sub Workbook_Open()
'Kiểm tra trong regedit có ghi thông tin cho khóa GT hay chưa, nếu đã có sẽ không thực hiện lệnh sau THEN
If GetSetting("GPE", "ThietLap", "GT", False) = False Then
    'Nếu chưa ghi tức là file này chưa mở lần nào, lúc này sẽ ghi khóa GT giá trị là true
    SaveSetting "GPE", "ThietLap", "GT", True
    'Hiện thông báo.
    MsgBox "Chi chay lan nay thoi nhe, lan sao se khong thay toi nua dau"
End If
End Sub
 
Upvote 0
Khi kích vào để mở file excel lần đầu thì chạy mới chạy Macro, nhưng khi kích mở file lần thứ 2,3 ..... thì không chạy Macro này nữa.
Xin các anh chị chỉ bảo

Mục đích của bạn là làm gì? Chơi cho vui?

Lý do tôi hỏi là vì tuỳ theo mục đích mà bạn phải dùng giải pháp khác nhau.

Các giải pháp sẽ dựa trên phạm vi của câu "mở file lần đầu thì mới chạy".
- Nếu tôi copy file sang bản khác thì có tính lại từ đầu không?
- Nếu tôi copy sang máy khác thì có tính lại từ đầu không?
- Nếu tôi mở file lần đầu tiên, macro chạy. Nhưng sau đó tôi không save thì lần mở kế tiếp là lần đầu hay lần 2?

Bạn dùng macro tự động khi mở file thì phải suy nghĩ cho chính chắn mọi trường hợp trước khi áp dụng. Hầu hết macro tự động là bút sa gà chết, khó đổi ý.
 
Upvote 0
1. Mình muốn ai khi sử dụng chương trình thì lần đầu mở sẽ hiện Form thông tin tác giả, liên hệ, ofice bật macro lên chưa. Chỉ chạy 1 lần đâu, Các lần sau người đó mở file thì sẽ không bị Form đó làm phiền nữa.( Mỗi lần mở file bị hiện như thế họ sẽ không thích lắm đâu)
2. Nếu copy sang bản khác thì sẽ ko tính là lần đầu.
3. Nếu copy sang máy khác thì sẽ tính lần đầu, vì trong regedit hệ thống chưa có thông tin của file này
4. Nếu bạn mở file lần đầu tiên, macro chạy. Nhưng sau đó không save thì lần mở kế tiếp là lần 2, 3.... tại vì thông tin file đã lưu trong regedit. Hệ thống nhận diện là đã mở rồi
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
' Tự động chạy thủ tục này khi mở file
Private Sub Workbook_Open()
'Kiểm tra trong regedit có ghi thông tin cho khóa GT hay chưa, nếu đã có sẽ không thực hiện lệnh sau THEN
If GetSetting("GPE", "ThietLap", "GT", False) = False Then
    'Nếu chưa ghi tức là file này chưa mở lần nào, lúc này sẽ ghi khóa GT giá trị là true
    SaveSetting "GPE", "ThietLap", "GT", True
    'Hiện thông báo.
    MsgBox "Chi chay lan nay thoi nhe, lan sao se khong thay toi nua dau"
End If
End Sub
Thật lòng mà nói code Vba của bạn rất hay, mình rất mỹ mãn. Cảm ơn bạn nhiều lám
 
Upvote 0
Nếu đòi hỏi giản dị thế thì chỉ cần ghi ID của máy vào một hidden name là được rồi. Regedit nguy hiểm bỏ bố. Nếu không phải admin, chưa chắc máy đã cho phép ghi.
 
Upvote 0
Bài #4 sử dụng phương thức SaveSetting ...

Thì cho dù ai đó có chạy Admin ,
Guest hay cái xyz gì gì đó thì nó cũng ghi và Registry hết đó ...###@#!$$$$@
 
Lần chỉnh sửa cuối:
Upvote 0
Bài #4 sử dụng phương thức SaveSetting ...

Thì cho dù ai đó có chạy Admin ,
Guest hay cái xyz gì gì đó thì nó cũng ghi và Registry hết đó ...###@#!$$$$@

Ý tôi nói "máy" ở đây là chủ quyền của cty, tức là quy định của cty, khong phải cái máy vi tính và Windows.
Cái trò trên của thớt là dùng để tự quảng cáo mình khi giao file cho người khác. Gặp cty như chỗ tôi lảm, người ta không chấp nhận những phần mềm "để dấu ấn" trên máy như thế. Nếu có 100 trường hợp như thế, có phải tự dưng trong registry tôi chứa 100 cái "dấu ấn" hoàn toàn chả ích lợi gì cho vận hành máy?
 
Upvote 0
Web KT
Back
Top Bottom