Hỏi cách dò 1 file bằng ecxel

Liên hệ QC

thanh_triet09

Thành viên mới
Tham gia
11/1/10
Bài viết
22
Được thích
1
//**/Tồi có 1 file baocao.xls (nằm ồ D) và 1 file kt.xls (nằm ô C và khong có dữ liệu). Tôi muốn khi tôi clik chạy file baocao.xls thì mặc nhiên sẽ kiểm tra xem có tồn tại file kt.xls không, nếu có thì file Baocao.xls báo là kết nối thành công và chạy bình thường, còn nếu không tồn tại file này báo là kết nối không thành công và đóng file baocao.xls lai luôn.
Anh chị nào biết cách viết đó thì giúp mình nha hoặc gửi mail cho minh theo phamthanhtriet@gmail.com. Cám ơn các bạn**~**
 
//**/Tồi có 1 file baocao.xls (nằm ồ D) và 1 file kt.xls (nằm ô C và khong có dữ liệu). Tôi muốn khi tôi clik chạy file baocao.xls thì mặc nhiên sẽ kiểm tra xem có tồn tại file kt.xls không, nếu có thì file Baocao.xls báo là kết nối thành công và chạy bình thường, còn nếu không tồn tại file này báo là kết nối không thành công và đóng file baocao.xls lai luôn.
Anh chị nào biết cách viết đó thì giúp mình nha hoặc gửi mail cho minh theo phamthanhtriet@gmail.com. Cám ơn các bạn**~**
Để biết "C:\kt.xls" có tồn tại hay không, ta dùng đoạn code Len(Dir("C:\kt.xls")) ---> Kết quả >0 tương đương với FILE TỒN TẠI và ngược lại
 
Upvote 0
em làm thế này anh xem khong đúng thì đừng cười nha mà chỉ cho em bik làm ấy
Em mở VB cua excel tao 1 module rồi viết cái này vào IIf Len(Dir("C:\kt.xls")) > 0, "KET NOI THANH CONG", "KHONG THANH CONG"
khi mo file baocao thi khong co dau hieu gi hết
 
Upvote 0
em làm thế này anh xem khong đúng thì đừng cười nha mà chỉ cho em bik làm ấy
Em mở VB cua excel tao 1 module rồi viết cái này vào IIf Len(Dir("C:\kt.xls")) > 0, "KET NOI THANH CONG", "KHONG THANH CONG"
khi mo file baocao thi khong co dau hieu gi hết
- Thứ nhất: Code Module phải nằm trong file baocao.xls
- Thứ hai: Tên của Sub phải là Auto_Open (để code tự chạy khi khởi động file)
Code đại khái thế này:
PHP:
Sub Auto_Open()
  If Len(Dir("C:\kt.xls")) > 0 Then
    MsgBox "Kêt nôi thành công!"
  Else
    MsgBox "Kêt nôi không thành công!"
    ThisWorkbook.Close (True)
  End If
End Sub
 

File đính kèm

Upvote 0
cam ơn anh nhiều nha tuy nhiên anh giúp dùm em tí nữa khi mở file baocao len thi hien khong thong báo disable macros hay enable macros neu chon díable thi van vao file binh thuong em muon là khi bấm nút nào cũng vậy nếu cáo file kt thì moi chay duoc
 
Upvote 0
cám ơn anh nud96081631 em nghi nếu có code nào viết trong vb để bỏ qua bước hỏi đó thì hay quá
 
Upvote 0
cám ơn anh nud96081631 em nghi nếu có code nào viết trong vb để bỏ qua bước hỏi đó thì hay quá
Đương nhiên là không thể rồi ---> Suy luận logic thì sẽ thế này:
- Code chạy được là do ta quyết định bấm Disable hay Enable
- Giả sử bạn có 1 code để bỏ qua công đoạn bấm nút này... vậy thì khi mở file, dù muốn hay không bạn vẫn phải quyết định Enable macro hoặc Disable macro ---> Nếu không làm sao code chạy
- Vậy muốn bỏ qua vụ "bấm" này thì code phải chạy trước
. Mà code muốn chạy lại phải.. "bấm"
- vân vân... và vân vân ---> Cuối cùng đi vào vòng lẩn quẩn: GÀ VÀ TRỨNG
 
Upvote 0
Mình nghỉ nếu có đoạn code nào chặn security thi hay nhỉ, trong bài này em mún kết quả của em làm ra là được bảo vệ bưởi em nếu người ta sử dụng kết quả của em phải có 1 file kt.xls trong ổ C như vậy nếu chuyển thành exe thì đâu còn sử dụng khi chỉnh sửa nữa. A/C nào biết code này thì giúp em với nha, em thấy trong diễn đàn mình có người cũng đưa ra ý tưởng như em không có kết quả
 
Upvote 0
Thif cách bạn đang làm cũng là 1 cách khả thi. Tất cả chương trình và code bạn để 1 file và chuyển sang dạng Exe. Dữ liệu để 1 file. Như vậy mọi vấn đề đều sử lý trên file data còn Code nắm trên File Exe. Nhưng đằng sau nó là cả 1 vấn đề lớn đấy.
 
Upvote 0
Em thấy PhanTuHuong có bái viết này anh xem thế nào có thể áp dụng được không
Option Compare Text
Option Explicit

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal lhKey As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal lhKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal lhKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Private Const REG_HEX As Long = 4 'Hex Key
Private Const HKEY_CURRENT_USER As Long = &H80000001

Public Enum eApplication
eExcel
eOutlook
eWord
ePowerPoint
ePublisher
End Enum

Public Enum eVersion
eOffice2003
eOffice2000
eOfficeXP
End Enum



'Purpose : Enables or disables the macro virus alert.
'Inputs : bDisableVirusChecking True, disables macro security protection
' False, enables macro security protection
'Outputs : Returns True on success
'Author : Andrew Baker (www.vbusers.com)
'Date : 25/11/2000 03:33
'Notes : Requires Excel 97
'Revisions :

Function Excel97MacroSecurity(bDisableVirusChecking As Boolean) As Boolean
Dim lData As Long, lRet As Long
Const csPath = "Software\Microsoft\Office\8.0\Excel\Microsoft Excel", csValue = "Options6"

On Error GoTo ErrFailed
If bDisableVirusChecking Then
lData = 0 'Disabled
Else
lData = 8 'Enabled
End If
RegCreateKey HKEY_CURRENT_USER, csPath, lRet
RegSetValueEx lRet, csValue, 0, REG_HEX, lData, 4
RegCloseKey lRet
Excel97MacroSecurity = True

Exit Function

ErrFailed:
Debug.Print Err.Description
Excel97MacroSecurity = False
End Function



'Purpose :Enables or disables the macro virus alert by altering the security level in the registry.
'Inputs :lSecurityLevel 1, sets security to "Low" (disable virus alerts)
' 2, sets security to "Medium"
' 3, sets security to "High"
' 4, sets security to "High" and disables access to VB Object Model
' AppType The application to set the security for.
' OfficeVersion The installed version of Office.
'Outputs : Returns True on success
'Author : Andrew Baker (www.vbusers.com)
'Date : 25/11/2000 03:33
'Notes : Requires Excel 2000
'Revisions :

Function OfficeMacroSecurity(lSecurityLevel As Long, AppType As eApplication, OfficeVersion As eVersion) As Boolean
Dim sData As String, lRet As Long, sAppKey As String
Const cs****** As String = "Software\Microsoft\Office\[VERSION]\[APPLICATION]\Security"
Const csKeyVBOM As String = "AccessVBOM", csKey As String = "Level"

If lSecurityLevel <= 4 And lSecurityLevel > 0 Then
On Error GoTo ErrFailed
Select Case OfficeVersion
Case eOffice2000
sAppKey = Replace$(cs******, "[VERSION]", "9.0")
Case eOfficeXP
sAppKey = Replace$(cs******, "[VERSION]", "10.0")
Case eOffice2003
sAppKey = Replace$(cs******, "[VERSION]", "11.0")
Case Else
Debug.Print "Invalid version"
Debug.Assert False
OfficeMacroSecurity = False
Exit Function
End Select

Select Case AppType
Case eExcel
sAppKey = Replace$(sAppKey, "[APPLICATION]", "Excel")
Case eOutlook
sAppKey = Replace$(sAppKey, "[APPLICATION]", "Outlook")
Case ePowerPoint
sAppKey = Replace$(sAppKey, "[APPLICATION]", "PowerPoint")
Case ePublisher
sAppKey = Replace$(sAppKey, "[APPLICATION]", "Publisher")
Case eWord
sAppKey = Replace$(sAppKey, "[APPLICATION]", "Word")
Case Else
Debug.Print "Invalid application"
Debug.Assert False
OfficeMacroSecurity = False
Exit Function
End Select

RegCreateKey HKEY_CURRENT_USER, sAppKey, lRet
'Set the registry key macro security reg key
If lSecurityLevel = 4 Then
'Set to high
RegSetValueEx lRet, csKey, 0, REG_HEX, 3, 4
Else
'Set to the specified level
RegSetValueEx lRet, csKey, 0, REG_HEX, lSecurityLevel, 4
End If

If lSecurityLevel < 4 Then
'Enable access to VB Object Model
RegSetValueEx lRet, csKeyVBOM, 0, REG_HEX, 1, 4
Else
'Disable access to VB Object Model
RegSetValueEx lRet, csKeyVBOM, 0, REG_HEX, 0, 4
End If

RegCloseKey lRet

OfficeMacroSecurity = True
Else
Debug.Print "Invalid Security Level"
Debug.Assert False
End If

Exit Function

ErrFailed:
Debug.Print Err.Description
OfficeMacroSecurity = False
End Function
 
Upvote 0
Em thấy PhanTuHuong có bái viết này anh xem thế nào có thể áp dụng được không
Bạn cứ thí nghiệm là biết liền chứ gì
Trong Excel, bạn muốn viết code thế nào thì tùy ý, nhưng đàng nào cũng phải bị thằng Security của máy tính gây khó dễ thôi ---> Hỏng Enable macro trước, đố chạy được!
Một logic vấn đề hiển nhiên thế, bạn còn suy nghĩ chi cho mệt óc
Nói chung chỉ có cách:
- Chuyển file xls của bạn thành EXE
- Dùng 1 phần mềm khác chạy trước nhằm chỉnh lại Security của Excel (VB6 chẳng hạn)
----------------
Cho đến nay, tôi chưa thấy code VBA nào có khả năng làm được chuyện ngược đời : CON SINH RA CHA ---> Trừ macro 4 (muốn Disable hay Enable gì nó vẫn cứ chạy ---> Virus macro là 1 ví dụ điển hình)
 
Lần chỉnh sửa cuối:
Upvote 0
Mình nghỉ nếu có đoạn code nào chặn security thi hay nhỉ, trong bài này em mún kết quả của em làm ra là được bảo vệ bưởi em nếu người ta sử dụng kết quả của em phải có 1 file kt.xls trong ổ C như vậy nếu chuyển thành exe thì đâu còn sử dụng khi chỉnh sửa nữa. A/C nào biết code này thì giúp em với nha, em thấy trong diễn đàn mình có người cũng đưa ra ý tưởng như em không có kết quả
Bạn vừa muốn bảo vệ file, vừa muốn sửa file! Qua phân tích của các cao thủ như trên tôi nghĩ là không thể hoặc quá phức tạp. Theo tôi Bạn làm như sau cho đơn giản (nhưng vẫn phải "bấm" Enable):
- Trong file txt bạn chứa số ID của CPU của một hoặc vài máy mà bạn hay dùng.
- Trong code (Auto_Open) của file cho nó kiểm tra số ID (CPU) của máy và đối chiếu với file txt, nếu sai -> thoát khỏi Excel (hoặc xóa luôn file cũng được).
(Không nhất thiết là ID của CPU mà là một chuỗi gì đó tùy bạn)
Như vậy khi người khác copy file của bạn về sẽ không dùng được (tất nhiên người đó không phải là thành viên của VBE hoặc không biết gì về VBA).
Có tối kiến như vậy mong giúp được Bạn, trong quá trình thực hiện nếu vướng chỗ nào cứ hỏi Sư phụ ndu.
 
Lần chỉnh sửa cuối:
Upvote 0
- Trong file txt bạn chứa số ID của CPU của một hoặc vài máy mà bạn hay dùng.
- Trong code (Auto_Open) của file cho nó kiểm tra số ID (CPU) của máy và đối chiếu với file txt, nếu sai -> thoát khỏi Excel (hoặc xóa luôn file cũng được).
(Không nhất thiết là ID của CPU mà là một chuỗi gì đó tùy bạn)
Như vậy khi người khác copy file của bạn về sẽ không dùng được (tất nhiên người đó không phải là thành viên của VBE hoặc không biết gì về VBA).
.
Cách của bạn cũng hay! Nhưng tôi phát hiện ra 1 nghịch lý thế này:
- Khi ta có đủ trình độ để viết code theo thuật toán mà bạn vừa nêu thì ta lại chẳng mấy khi quan tâm đến cái vụ bảo mật...
- Và nếu có nghĩ đến (vì tính thương mại) thì chắc chắn sẽ chẳng bao giờ bàn bạc trên GPE này đâu
Ẹc... Ẹc...
Bạn nghĩ sao?
 
Upvote 0
Cách của bạn cũng hay! Nhưng tôi phát hiện ra 1 nghịch lý thế này:
- Khi ta có đủ trình độ để viết code theo thuật toán mà bạn vừa nêu thì ta lại chẳng mấy khi quan tâm đến cái vụ bảo mật...
- Và nếu có nghĩ đến (vì tính thương mại) thì chắc chắn sẽ chẳng bao giờ bàn bạc trên GPE này đâu
Ẹc... Ẹc...
Bạn nghĩ sao?
Ừ nhỉ, nhưng tôi chỉ nghỉ về kỹ thuật thuần túy, về việc học VBA
 
Upvote 0
Web KT

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

Back
Top Bottom