viehoai
Thành viên gắn bó
- Tham gia
- 22/5/09
- Bài viết
- 2,599
- Được thích
- 2,908
Private Sub Workbook_Open()
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:="{0002E157-0000-0000-C000-000000000046}", _
Major:=5, Minor:=3
End Sub
Function ModExists(ByVal YourProject As VBProject, ModName As String) As Boolean
'Bay loi
On Error Resume Next
ModExists = Len(YourProject.VBComponents(ModName).Name) <> 0
End Function
Cái này em đã có tích chọn rồiBạn thử vào Reference chọn Microsoft Visual Basic for Extensibility Library x.x thử xem sao nhé
Private Sub Workbook_Open()
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:="{0002E157-0000-0000-C000-000000000046}", _
Major:=5, Minor:=3
End Sub
Giải pháp mình làm làm lúc đầu lỗi, nhưng quá trình làm mình chẳng biết sao bây giờ đượcKhông để ý câu hỏi sau của bạn, thông cảm nhé!
Trước đây mình có làm trong trường hợp đã đặt mật khẩu VBAProject. Sau này mình muốn mọi thứ đều mã mở nên không dùng nữa. Nhưng giờ tìm mãi không thấy code đâu cả
Để tới chiều tìm trên mạng xem nếu thấy mình sẽ báo!
Sub CopyCodeModule()
Dim Tmp As String
On Error Resume Next If IsModule(ActiveWorkbook) = True Then Exit Sub
Tmp = ThisWorkbook.Sheets("Menu").Range("P2").Value
With ActiveWorkbook.VBProjec
.VBComponents.Add(vbext_ct_StdModule).Name = "TinhKL"
.VBComponents("TinhKL").CodeModule.AddFromString Tmp
End With
End Sub
Hàm bạn làm chẳng hợp lý tí nào cảEm lập một Hàm kiểm tra sự tồn tại của một module, khi chạy nó báo lỗi như hình bên dưới
View attachment 78316
Vậy xin hỏi các anh chị cách khắc phục lỗi này.
Chú ý: Trước đây em làm một AddIn có sử dụng hàm này chạy tốt, nhưng với 1 file mới này thì không được?
Xin cảm ơn các anh chị.
Function ModExists(ByVal mdName As String) As Boolean
Dim Modul
For Each Modul In ThisWorkbook.VBProject.VBComponents
If Modul.Name = mdName Then
ModExists = True: Exit Function
End If
Next
End Function
Sub Test()
If ModExists("TinhKL") Then
MsgBox "Module này có roi"
Else
MsgBox "Module này chua có"
End If
End Sub
Function ModExists(ByVal mdName As String) As Boolean
On Error Resume Next
ModExists = Not ThisWorkbook.VBProject.VBComponents(mdName) Is Nothing
End Function
Function ModExists(ByVal mdName As String) As Boolean
On Error Resume Next
ModExists = Not ActiveWorkbook.VBProject.VBComponents(mdName) Is Nothing
End Function
'need reference To VBA Extensibility
'need To make sure that the target project Is the active project
Sub test()
' UnprotectVBProject Workbooks("Book1.xls"), "password"
ProtectVBProject Workbooks("Book1.xls"), "password"
End Sub
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
'
' Bill Manville, 29-Jan-2000
'
Dim VBP As VBProject, oWin As VBIDE.Window
Dim wbActive As Workbook
Dim i As Integer
Set VBP = WB.VBProject
Set wbActive = ActiveWorkbook
If VBP.Protection <> vbext_pp_locked Then Exit Sub
Application.ScreenUpdating = False
' Close any code windows To ensure we hit the right project
For Each oWin In VBP.VBE.Windows
If InStr(oWin.Caption, "(") > 0 Then oWin.Close
Next oWin
WB.Activate
' now use lovely SendKeys To unprotect
Application.OnKey "%{F11}"
SendKeys "%{F11}%TE" & Password & "~~%{F11}", True
If VBP.Protection = vbext_pp_locked Then
' failed - maybe wrong password
SendKeys "%{F11}%TE", True
End If
' leave no evidence of the password
Password = ""
' go back To the previously active workbook
wbActive.Activate
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub ProtectVBProject(WB As Workbook, ByVal Password As String)
Dim VBP As VBProject, oWin As VBIDE.Window
Dim wbActive As Workbook
Dim i As Integer
Set VBP = WB.VBProject
Set wbActive = ActiveWorkbook
' Close any code windows To ensure we hit the right project
For Each oWin In VBP.VBE.Windows
If InStr(oWin.Caption, "(") > 0 Then oWin.Close
Next oWin
WB.Activate
' now use lovely SendKeys To unprotect
Application.OnKey "%{F11}"
SendKeys "+{TAB}{RIGHT}%V{+}{TAB}" & Password & "{TAB}" & Password & "~"
Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
WB.Save
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''