Tự động chèn code vào sheet của 1 File Excel

Liên hệ QC

Quang_Hải

Thành viên gạo cội
Tham gia
21/2/09
Bài viết
6,050
Được thích
7,945
Nghề nghiệp
Làm đủ thứ
Mình mở chủ đề này để giới thiệu cho các bạn nào quan tâm đến việc tự động chèn code vào 1 file excel nào đó.
Giả định trên file hiện tại có 1 sheet mang tên là "ABC", giờ ta muốn chèn code vào sheet này
Để phát triển thêm ta có thể thay ActiveWorkBook bằng tên của File ta cần chèn code
PHP:
Sub add_code_to_existing_sheet()
Dim CodeLines As Long, sheetCode
   sheetCode = ActiveWorkbook.Sheets("ABC").CodeName
   With ActiveWorkbook.VBProject.VBComponents(sheetCode).CodeModule
        CodeLines = .CountOfLines + 1
        .InsertLines CodeLines, _
            "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" & Chr(13) & _
            "     MsgBox ""Code Created"" " & Chr(13) & _
            "End Sub"
    End With
End Sub
Ta cũng có thể tạo ra 1 sheet mới rồi chèn code vào sheet vừa được tạo bằng code bên dưới.
PHP:
Sub add_code_to_NewSheet()
Dim CodeLines As Long
   Sheets.Add
   With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
        CodeLines = .CountOfLines + 1
        .InsertLines CodeLines, _
            "Private Sub Worksheet_SelectionChange(ByVal Target As Range)" & Chr(13) & _
            "     msgbox ""Code Created"" " & Chr(13) & _
            "End Sub"
    End With
End Sub
Nếu cần chèn code vào WorkBook ta áp dụng code này
PHP:
Sub add_code_to_thisworkbook()
Dim CodeLines As Long
   With ActiveWorkbook.VBProject.VBComponents("Thisworkbook").CodeModule
        CodeLines = .CountOfLines + 1
        .InsertLines CodeLines, _
            "Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)" & Chr(13) & _
            "     msgbox ""Code Created"" " & Chr(13) & _
            "End Sub"
    End With
End Sub
Nếu cần thêm 1 module mới rồi chèn code vào module này thì ta làm như code bên dưới.
Chú ý: Để chèn được Module thì phải vào Tools, tìm và chọn mục Microsoft Visual Basic for Appliations extensibility 5.3
Hoặc khi viết code đến dòng ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule) thì Excel sẽ tự động hỏi mình có muốn chọn mục này hay không.
PHP:
Sub Add_Module_and_Code()
Dim CodeLines As Long, VBComp
   Set VBComp = ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule)
   With ActiveWorkbook.VBProject.VBComponents(VBComp.Name).CodeModule
        CodeLines = .CountOfLines + 1
        .InsertLines CodeLines, _
            "Sub Add_Module_and_Code" & Chr(13) & _
            "     msgbox ""Code Created"" " & Chr(13) & _
            "End Sub"
    End With
End Sub

Hy vọng là bài viết hữu ích cho những bạn mới học VBA
 
Lần chỉnh sửa cuối:
Cám ơn bạn Quang Hải , nhưng mình làm theo hướng dẫn để thêm code vào thiswokbook không được, nó báo lỗi mình không sử lý được . Bạn giúp mình viết code để tạo code trong thiswokbook :

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ActiveWorkbook.Names.Add Name:="curRow", RefersToR1C1:="=1"
ActiveWorkbook.Names.Add Name:="curCol", RefersToR1C1:="=1"
End Sub


nó báo lỗi tô đỏ "curRow" bạn kiểm tra và giúp mình code trên . Xin cám ơn !
 
Upvote 0
Cám ơn bạn Quang Hải , nhưng mình làm theo hướng dẫn để thêm code vào thiswokbook không được, nó báo lỗi mình không sử lý được . Bạn giúp mình viết code để tạo code trong thiswokbook :

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ActiveWorkbook.Names.Add Name:="curRow", RefersToR1C1:="=1"
ActiveWorkbook.Names.Add Name:="curCol", RefersToR1C1:="=1"
End Sub


nó báo lỗi tô đỏ "curRow" bạn kiểm tra và giúp mình code trên . Xin cám ơn !
Cho "rừng" code này vào 1 Module:
Mã:
Private Sub ChangeVBOM()
  Dim regKey As String
  regKey = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM"
  CreateObject("WScript.Shell").RegWrite regKey, 1, "REG_DWORD"
End Sub
Private Function IsVBATrusted() As Boolean
  Application.Volatile
  On Error Resume Next
  IsVBATrusted = Not ThisWorkbook.VBProject Is Nothing
End Function
Sub Main()
  Dim strCode As String, bChk As Boolean
  strCode = "Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curRow"", RefersToR1C1:=""=1""" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curCol"", RefersToR1C1:=""=1""" & vbLf & _
            "End Sub"
  bChk = IsVBATrusted
  If bChk = False Then ChangeVBOM
  bChk = IsVBATrusted
  If bChk Then
    On Error Resume Next
    With ActiveWorkbook.VBProject.VBComponents("Thisworkbook").CodeModule
      .DeleteLines 1, .CountOfLines
      On Error GoTo 0
      .AddFromString (strCode)
    End With
  End If
End Sub
Chạy sub Main và kiểm tra kết quả
 
Upvote 0
Cho "rừng" code này vào 1 Module:
Mã:
Private Sub ChangeVBOM()
  Dim regKey As String
  regKey = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM"
  CreateObject("WScript.Shell").RegWrite regKey, 1, "REG_DWORD"
End Sub
Private Function IsVBATrusted() As Boolean
  Application.Volatile
  On Error Resume Next
  IsVBATrusted = Not ThisWorkbook.VBProject Is Nothing
End Function
Sub Main()
  Dim strCode As String, bChk As Boolean
  strCode = "Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curRow"", RefersToR1C1:=""=1""" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curCol"", RefersToR1C1:=""=1""" & vbLf & _
            "End Sub"
  bChk = IsVBATrusted
  If bChk = False Then ChangeVBOM
  bChk = IsVBATrusted
  If bChk Then
    On Error Resume Next
    With ActiveWorkbook.VBProject.VBComponents("Thisworkbook").CodeModule
      .DeleteLines 1, .CountOfLines
      On Error GoTo 0
      .AddFromString (strCode)
    End With
  End If
End Sub
Chạy sub Main và kiểm tra kết quả
Cám ơn thày NDU, thấy code mẫu của bạn Quang Hải chạy được ngay, nhà em áp dụng nhưng không được . Xem code của thày mới biết nếu nhà em "mò" thì không biết bao nhiêu "Mùa quýt" nữa thì mới ra . xin cám ơn thày .
 
Upvote 0
Cám ơn thày NDU, thấy code mẫu của bạn Quang Hải chạy được ngay, nhà em áp dụng nhưng không được . Xem code của thày mới biết nếu nhà em "mò" thì không biết bao nhiêu "Mùa quýt" nữa thì mới ra . xin cám ơn thày .

Thấy vậy chứ code cũng đơn giản lắm. Tôi chia làm 3 đoạn (3 Sub) và "phân công" cho nó làm những công việc chỉ định sẵn:
Trước tiên ta phải biết rằng mọi truy cập vào cửa sổ VBA (như thêm, xóa, sửa code) đều không được anh Bill chấp nhận nếu chưa "đăng ký"
Việc đăng ký đề được phép thao tác trong cửa sổ VBA chỉ là việc check mục "Trust access to VBA project..." trong phần Macro Setting
Vậy làm sao ta biết mục "Trust access to VBA project..." đã được check hay chưa? Làm bằng tay bằng cách vào Excel Options xem và check bằng tay hoặc dùng code để tự động (tôi đang dùng cách này)
- Sub ChangeVBOM là dùng code để check tự động (truy cập Registry)
- Function IsVBATrusted để kiểm tra xem mục "Trust access to VBA project..." đã được check hay chưa?
- Sub Main: Tiến hành kiểm tra "Trust access..." nếu chưa check thì.. check.... Tiếp theo mới chèn code vào
Chỉ vậy thôi
Đương nhiên nếu bạn đã check bằng tay mục "Trust access to VBA project.." rồi thì Sub Main sẽ ngắn gọn hơn. Ở đây tôi viết tổng quát để máy nào xài cũng được nên code hơi dài chút
 
Upvote 0
Thấy vậy chứ code cũng đơn giản lắm. Tôi chia làm 3 đoạn (3 Sub) và "phân công" cho nó làm những công việc chỉ định sẵn:
Trước tiên ta phải biết rằng mọi truy cập vào cửa sổ VBA (như thêm, xóa, sửa code) đều không được anh Bill chấp nhận nếu chưa "đăng ký"
Việc đăng ký đề được phép thao tác trong cửa sổ VBA chỉ là việc check mục "Trust access to VBA project..." trong phần Macro Setting
Vậy làm sao ta biết mục "Trust access to VBA project..." đã được check hay chưa? Làm bằng tay bằng cách vào Excel Options xem và check bằng tay hoặc dùng code để tự động (tôi đang dùng cách này)
- Sub ChangeVBOM là dùng code để check tự động (truy cập Registry)
- Function IsVBATrusted để kiểm tra xem mục "Trust access to VBA project..." đã được check hay chưa?
- Sub Main: Tiến hành kiểm tra "Trust access..." nếu chưa check thì.. check.... Tiếp theo mới chèn code vào
Chỉ vậy thôi
Đương nhiên nếu bạn đã check bằng tay mục "Trust access to VBA project.." rồi thì Sub Main sẽ ngắn gọn hơn. Ở đây tôi viết tổng quát để máy nào xài cũng được nên code hơi dài chút
không những thày giỏi về VBA, giỏi excel mà thày còn giỏi cả về lĩnh vực sư phạm nữa, các bài viết của thày cô đọng, xúc tích, lột tả được ý định muốn truyền đạt tới người khác; mà hình như thày không phải làm nghề giáo thì phải, nếu đúng thì càng xin kính phục thày hơn ! xin cám ơn Thày .
 
Lần chỉnh sửa cuối:
Upvote 0
không những thày giỏi về VBA, giỏi excel mà thày còn giỏi cả về lĩnh vực sư phạm nữa, các bài viết của thày cô đọng, xúc tích, lột tả được ý định muốn truyền đạt tới người khác; mà hình như thày không phải làm nghề giáo thì phải, nếu đúng thì càng xin kính phục thày hơn ! xin cám ơn Thày .

Mình làm.. công nhân thôi anh ơi
-------------------------------
Được biết anh cũng đang trong quá trình muốn vấn thân vào con đường đau khổ (VBA). Vậy xin mời anh đến đây tham khảo nhé:
http://www.giaiphapexcel.com/forum/showthread.php?6354-Giới-thiệu-Cơ-bản-về-vòng-lặp-For-next
Ngày trước mình cũng "lớn lên" từ topic ấy và tìm được một sư phụ mà suốt đời mình không quên ơn
 
Upvote 0
Mình làm.. công nhân thôi anh ơi
-------------------------------
Được biết anh cũng đang trong quá trình muốn vấn thân vào con đường đau khổ (VBA). Vậy xin mời anh đến đây tham khảo nhé:
http://www.giaiphapexcel.com/forum/showthread.php?6354-Giới-thiệu-Cơ-bản-về-vòng-lặp-For-next
Ngày trước mình cũng "lớn lên" từ topic ấy và tìm được một sư phụ mà suốt đời mình không quên ơn
Dù thày làm nghề gì thì thày vẫn là thày của nhiều người và nhiều thế hệ của GPE , thày vẫn là một cây đại thụ của GPE được nhiều người ngưỡng mộ và kính phục, xin cám ơn thày cả về đường Link trên nữa .
 
Upvote 0
Có chút phát sinh nhờ thầy NDU và các bạn xem giúp, Code trên đối với tập tin mới trong thisworkbook không có code thì tốt rồi . Nhưng nếu trước đó đã có code thì nó xoá sạch . Sub main sửa thế nào để nó chỉ thêm code mới chứ không xóa code cũ ? xin cám ơn !
 
Upvote 0
Có chút phát sinh nhờ thầy NDU và các bạn xem giúp, Code trên đối với tập tin mới trong thisworkbook không có code thì tốt rồi . Nhưng nếu trước đó đã có code thì nó xoá sạch . Sub main sửa thế nào để nó chỉ thêm code mới chứ không xóa code cũ ? xin cám ơn !

Vì sợ cái vụ chạy code 2 lần sẽ sinh ra 2 Sub trùng tên nên mình phải xóa những gì trước đó
Đoạn code:
Mã:
Sub Main()
  Dim strCode As String, bChk As Boolean
  strCode = "Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curRow"", RefersToR1C1:=""=1""" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curCol"", RefersToR1C1:=""=1""" & vbLf & _
            "End Sub"
  bChk = IsVBATrusted
  If bChk = False Then ChangeVBOM
  bChk = IsVBATrusted
  If bChk Then
    On Error Resume Next
    With ActiveWorkbook.VBProject.VBComponents("Thisworkbook").CodeModule
      [COLOR=#ff0000].DeleteLines 1, .CountOfLines[/COLOR]
      On Error GoTo 0
      .AddFromString (strCode)
    End With
  End If
End Sub
Chổ màu đỏ là để xóa code. Vậy nếu anh không muốn xóa, cứ bỏ dòng đỏ đỏ ấy đi là được
Lý ra nếu làm hoàn chỉnh thì phải có thêm công đoạn kiểm tra xem code ta chuẩn bị chèn đã tồn tại chưa ---> Nhưng làm thế thì code sẽ dài thêm ---> Anh lại "ngợp" thêm thôi
 
Upvote 0
Vì sợ cái vụ chạy code 2 lần sẽ sinh ra 2 Sub trùng tên nên mình phải xóa những gì trước đó
Đoạn code:
Mã:
Sub Main()
  Dim strCode As String, bChk As Boolean
  strCode = "Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curRow"", RefersToR1C1:=""=1""" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curCol"", RefersToR1C1:=""=1""" & vbLf & _
            "End Sub"
  bChk = IsVBATrusted
  If bChk = False Then ChangeVBOM
  bChk = IsVBATrusted
  If bChk Then
    On Error Resume Next
    With ActiveWorkbook.VBProject.VBComponents("Thisworkbook").CodeModule
      [COLOR=#ff0000].DeleteLines 1, .CountOfLines[/COLOR]
      On Error GoTo 0
      .AddFromString (strCode)
    End With
  End If
End Sub
Chổ màu đỏ là để xóa code. Vậy nếu anh không muốn xóa, cứ bỏ dòng đỏ đỏ ấy đi là được
Lý ra nếu làm hoàn chỉnh thì phải có thêm công đoạn kiểm tra xem code ta chuẩn bị chèn đã tồn tại chưa ---> Nhưng làm thế thì code sẽ dài thêm ---> Anh lại "ngợp" thêm thôi
Cám ơn thày ! Đúng là nó sẽ bị gọi 2 lần vì tập tin sẽ ghi dạng đuôi .xlam nên người khác ứng dụng sẽ rất dễ mắc lỗi này . Với code này học là phụ, ứng dụng là chính nên thày giúp nhà em , nhà em cứ "bê nguyên si" thế là được .Mà học "bơi" có lẽ cũng phải để vài lần uống nước nó mới nhanh biết bơi thày ạ !
 
Upvote 0
Cám ơn thày ! Đúng là nó sẽ bị gọi 2 lần vì tập tin sẽ ghi dạng đuôi .xlam nên người khác ứng dụng sẽ rất dễ mắc lỗi này . Với code này học là phụ, ứng dụng là chính nên thày giúp nhà em , nhà em cứ "bê nguyên si" thế là được .Mà học "bơi" có lẽ cũng phải để vài lần uống nước nó mới nhanh biết bơi thày ạ !

Nếu vậy anh sửa Sub Main thành vầy đi:
Mã:
Sub Main()
  Dim strCode As String, bChk As Boolean
  strCode = "Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curRow"", RefersToR1C1:=""=1""" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curCol"", RefersToR1C1:=""=1""" & vbLf & _
            "End Sub"
  bChk = IsVBATrusted
  If bChk = False Then ChangeVBOM
  bChk = IsVBATrusted
  If bChk Then
    On Error Resume Next
    With ActiveWorkbook.VBProject.VBComponents("Thisworkbook").CodeModule
      [COLOR=#ff0000][B]If .ProcBodyLine("Workbook_SheetSelectionChange", 0) = 0 Then .AddFromString strCode[/B][/COLOR]
    End With
  End If
End Sub
Chổ màu đỏ là chổ mới sửa lại: Nếu đã có code thì sẽ không thêm code nữa
 
Upvote 0
Gửi tới thày NDU :
- Chiều nhà em đi vắng nên phúc đáp chậm, xin lỗi thày nhé . Xin cám ơn thày ! code chạy tốt rồi ạ .
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn thày ! Đúng là nó sẽ bị gọi 2 lần vì tập tin sẽ ghi dạng đuôi .xlam nên người khác ứng dụng sẽ rất dễ mắc lỗi này . Với code này học là phụ, ứng dụng là chính nên thày giúp nhà em , nhà em cứ "bê nguyên si" thế là được .Mà học "bơi" có lẽ cũng phải để vài lần uống nước nó mới nhanh biết bơi thày ạ !

Nếu có ai khác nữa quan tâm thì xin mời tham khảo bài #136, #138 và các bài trước nữa.

http://www.giaiphapexcel.com/forum/...g-vba-để-xóa-vba-đc-không&p=450485#post450485

Tôi cũng đã soạn một số sub, function cần thiết có trong bài #9 (cũng có đính kèm tập tin)

http://www.giaiphapexcel.com/forum/showthread.php?80098-Viết-code-cho-sheet&p=496406#post496406
-----------------
Đính kèm tập tin ở link thứ 2 rồi:
Mã:
Sub Main()
Dim strCode As String, bChk As Boolean
    strCode = "Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curRow"", RefersToR1C1:=""=1""" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curCol"", RefersToR1C1:=""=1""" & vbLf & _
            "End Sub"
'   bChk = IsVBATrusted
'   If bChk = False Then ChangeVBOM
'   bChk = IsVBATrusted
'   If bChk Then
'    On Error Resume Next
        If Not [COLOR=#0000ff]FunctionInModule[/COLOR](ActiveWorkbook, "Thisworkbook", "Workbook_SheetSelectionChange") Then
            [COLOR=#0000ff]AddFunctionFromString[/COLOR] ActiveWorkbook, "ThisWorkbook", strCode
        End If
'    End If
End Sub

Ngoài việc thêm code từ STRING còn có hàm thêm từ tập tin - AddFunctionFromFile
Trong module có một số sub, function hữu ích, có mô tả cách dùng.
-------------
Chú ý: để dùng toàn bộ code trong module đính kèm thì thêm tham chiếu tới Microsoft Visual Basic for Applications Extensibility
 
Upvote 0
Nếu có ai khác nữa quan tâm thì xin mời tham khảo bài #136, #138 và các bài trước nữa.

http://www.giaiphapexcel.com/forum/...g-vba-để-xóa-vba-đc-không&p=450485#post450485

Tôi cũng đã soạn một số sub, function cần thiết có trong bài #9 (cũng có đính kèm tập tin)

http://www.giaiphapexcel.com/forum/showthread.php?80098-Viết-code-cho-sheet&p=496406#post496406
-----------------
Đính kèm tập tin ở link thứ 2 rồi:
Mã:
Sub Main()
Dim strCode As String, bChk As Boolean
    strCode = "Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curRow"", RefersToR1C1:=""=1""" & vbLf & _
            "ActiveWorkbook.Names.Add Name:=""curCol"", RefersToR1C1:=""=1""" & vbLf & _
            "End Sub"
'   bChk = IsVBATrusted
'   If bChk = False Then ChangeVBOM
'   bChk = IsVBATrusted
'   If bChk Then
'    On Error Resume Next
        If Not [COLOR=#0000ff]FunctionInModule[/COLOR](ActiveWorkbook, "Thisworkbook", "Workbook_SheetSelectionChange") Then
            [COLOR=#0000ff]AddFunctionFromString[/COLOR] ActiveWorkbook, "ThisWorkbook", strCode
        End If
'    End If
End Sub

Ngoài việc thêm code từ STRING còn có hàm thêm từ tập tin - AddFunctionFromFile
Trong module có một số sub, function hữu ích, có mô tả cách dùng.
-------------
Chú ý: để dùng toàn bộ code trong module đính kèm thì thêm tham chiếu tới Microsoft Visual Basic for Applications Extensibility
Cám ơn thày siwtom, nhiều khi biết diễn đàn có chủ đề mình cần nhưng dùng từ khóa để tìm nhiều khi không đúng nên nó không ra . Có những lúc như đi siêu thị hoa hết cả mắt, thấy cái gì cũng đẹp cái gì cũng muốn mua, nhưng tiền thì có hạn . Vì vậy vào GPE cái gì cũng muốn học, nhưng học chẳng được bao nhiêu, Nhà em xin cám ơn thày .
 
Upvote 0
Gửi tới thày NDU :
- Chiều nhà em đi vắng nên phúc đáp chậm, xin lỗi thày nhé . Xin cám ơn thày ! code chạy tốt rồi ạ .

Ở bài trên anh có đề cập đến việc lưu file thành AddIn (xlam). Tôi tò mò muốn biết anh sẽ chạy AddIn này thế nào? Tức là sau khi gọi AddIn lên, anh làm cách nào để chạy Sub Main
(Tôi hỏi thế vì biết anh là người mới học VBA... Nếu như có gì đó khó khăn trong việc sử dụng AddIn, tôi sẽ giúp anh hoàn chỉnh 1 lần luôn)
 
Upvote 0
Thấy vậy chứ code cũng đơn giản lắm. Tôi chia làm 3 đoạn (3 Sub) và "phân công" cho nó làm những công việc chỉ định sẵn:
Trước tiên ta phải biết rằng mọi truy cập vào cửa sổ VBA (như thêm, xóa, sửa code) đều không được anh Bill chấp nhận nếu chưa "đăng ký"
Việc đăng ký đề được phép thao tác trong cửa sổ VBA chỉ là việc check mục "Trust access to VBA project..." trong phần Macro Setting
Vậy làm sao ta biết mục "Trust access to VBA project..." đã được check hay chưa? Làm bằng tay bằng cách vào Excel Options xem và check bằng tay hoặc dùng code để tự động (tôi đang dùng cách này)
- Sub ChangeVBOM là dùng code để check tự động (truy cập Registry)
- Function IsVBATrusted để kiểm tra xem mục "Trust access to VBA project..." đã được check hay chưa?
- Sub Main: Tiến hành kiểm tra "Trust access..." nếu chưa check thì.. check.... Tiếp theo mới chèn code vào
Chỉ vậy thôi
Đương nhiên nếu bạn đã check bằng tay mục "Trust access to VBA project.." rồi thì Sub Main sẽ ngắn gọn hơn. Ở đây tôi viết tổng quát để máy nào xài cũng được nên code hơi dài chút
Hic, máy tính của em bị báo lỗi
Invalid root in registry key...
Em vào Regedit thì chỉ thấy thế này thôi
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\14.0\
Tới đây thì đường dẫn lạ hoắc so với câu lệnh anh viết trong code

HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM"
 
Upvote 0
Ở bài trên anh có đề cập đến việc lưu file thành AddIn (xlam). Tôi tò mò muốn biết anh sẽ chạy AddIn này thế nào? Tức là sau khi gọi AddIn lên, anh làm cách nào để chạy Sub Main
(Tôi hỏi thế vì biết anh là người mới học VBA... Nếu như có gì đó khó khăn trong việc sử dụng AddIn, tôi sẽ giúp anh hoàn chỉnh 1 lần luôn)
Cám ơn thày, nhà em cố gắng tự giải quyết, nếu không được nhà em sẽ phiền các thày . Vì thày đã gọi nó là "con đường đau khổ" thì không thể dễ dang được . Còn sub main nhà em sẽ gán lệnh tắt để gọi nó khi cần ạ !
 
Upvote 0
Hic, máy tính của em bị báo lỗi
Invalid root in registry key...
Em vào Regedit thì chỉ thấy thế này thôi
HKEY_LOCAL_MACHINE\Software\Microsoft\Office\14.0\
Tới đây thì đường dẫn lạ hoắc so với câu lệnh anh viết trong code

HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM"

Bạn không nên dùng HKEY_LOCAL_MACHINE mà dùng HKEY_CURRENT_USER. Đơn giản vì 2 sự thật là: "Nếu khóa có ở HKEY_LOCAL_MACHINE thì chắc chắn có ở HKEY_CURRENT_USER, nhưng có thể có ở HKEY_CURRENT_USER mà không có ở HKEY_LOCAL_MACHINE"

Trong ví dụ sau tôi có hàm đọc "Trust Access" (Trust access.rar).

http://www.giaiphapexcel.com/forum/...được-các-thủ-tục-riêng-lẻ&p=499429#post499429

Nếu là thao tác lịch sự thì: thay đổi các thiết lập --> làm việc của mình --> trả lại các thiết lập. Tôi rất ghét những phần mềm mà khi cài thì tự thay đổi các tùy chọn của tôi nhưng khi tôi đá đít nó thì nó không trả về các thiết lập của tôi.
 
Upvote 0
tôi thêm được rồi nhưng khi cho macro chạy thi ko active được
tks
 
Upvote 0
Web KT
Back
Top Bottom