Cách xóa đoạn code cũ, thay thế bằng 1 đoạn code mới mà không mở file.

Liên hệ QC

Hai Lúa Miền Tây

❆❆❆❆❆❆❆❆
Thành viên BQT
Administrator
Tham gia
18/3/08
Bài viết
8,306
Được thích
15,849
Giới tính
Nam
Nghề nghiệp
Làm ruộng.
Xin các anh chị vui lòng hướng dẫn em Cách xóa đoạn code cũ, thay thế bằng 1 đoạn code mới mà không mở file (Có Pass ở VBA).

Do em có nhiều file Excel có code, bây giờ muốn cập nhật code mới nhưng mở từ file, mở từng pass (Có 1 pass duy nhất) rồi xóa code cũ, thay thế code cũ = code mới.

Em xin cám ơn trước.
 
Xin các anh chị vui lòng hướng dẫn em Cách xóa đoạn code cũ, thay thế bằng 1 đoạn code mới mà không mở file (Có Pass ở VBA).
Do em có nhiều file Excel có code, bây giờ muốn cập nhật code mới nhưng mở từ file, mở từng pass (Có 1 pass duy nhất) rồi xóa code cũ, thay thế code cũ = code mới.
Em xin cám ơn trước.
Làm việc này mà không cần mở file thì tôi chẳng biết dùng cách gì. Tuy nhiên cũng có vài gợi ý:
- Mở từng Workbook
- Active Workbook vừa mở
- Xóa Module cũ
- Chèn Module mới
---------------------
Việc xóa Module, trên GPE đã có nói rồi... Tôi chỉ xin góp giải pháp chèn module
- Giả sử bạn có đoạn code:
PHP:
Sub ThiNghiem()
  MsgBox "Hello"
End Sub
- Hãy cho code này vào 1 file TXT (ví dụ code cho vào file Test.txt nằm tại ổ D)
- Active Workbook mà bạn cần chèn code rồi chạy sub dưới đây:
PHP:
Sub ImportModule()
  ExecuteExcel4Macro ("VBA.INSERT.FILE(""D:\Test.txt"")")
End Sub
Đây là hàm Macro 4 khá hay, tôi đã từng gữi vào mục đố vui nhưng chẳng thấy ai trả lời! Nhân tiện bạn hỏi nên gữi cho bạn tham khảo
 
Upvote 0
Không biết đúng ý các bạn không, nhưng tôi hay dùng Import file và Export file (.bas) để thực hiện việc này
 
Upvote 0
@ Ndu: Tôi đã làm theo cách của bạn, Impos được code nhưng lỗi tùm lum bạn xem giúp nhé. Thanks !
 

File đính kèm

  • ImpotCode.xls
    29.5 KB · Đọc: 79
Upvote 0
@ Ndu: Tôi làm được rồi (phải mở File Notepad và Paste code vào), lỗi lần trước là do tôi đổi duôi File .xls -> .txt nên bị lỗi code ngay từ file nguồn.
Em nói thêm 1 chút:
- Code dùng hàm Macro 4 này còn có 1 độc chiêu, đó là cho dù file của anh có pass bảo vệ VBA thì nó vẫn insert code được như thường ---> Thế mới siêu!
 
Upvote 0
Em nói thêm 1 chút:
- Code dùng hàm Macro 4 này còn có 1 độc chiêu, đó là cho dù file của anh có pass bảo vệ VBA thì nó vẫn insert code được như thường ---> Thế mới siêu!

Em đang "Vật lộn" với cái đường dẫn chết tuyệt của cái file text đó, làm sao cho nó linh hoạt hơn, mong Thầy chỉ tiếp giúp.

Không biết đúng ý các bạn không, nhưng tôi hay dùng Import file và Export file (.bas) để thực hiện việc này

Cái này thì mình vẫn làm, làm bằng tay, phải mở Pass, rất mất thời gian.
Còn nếu như dùng code thì file nào có Pass VBA thì thua, nó không cho chèn code vào.
 
Upvote 0
Em đang "Vật lộn" với cái đường dẫn chết tuyệt của cái file text đó, làm sao cho nó linh hoạt hơn, mong Thầy chỉ tiếp giúp.
Là sao ta? Tôi chưa hiểu lắm! Nói rõ chút đi (về cái vụ LINH HOẠT ấy)
Hay là bạn muốn đặt biến cho đường dẩn này... kiểu:
PHP:
Sub ImportModule()
  Dim Txtfile As String
  Txtfile = "gì gì đó"
  ExecuteExcel4Macro ("VBA.INSERT.FILE(""" & Txtfile & """)")
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Là em đang tìm cách thay thế đường dẫn dẩn đến file text bằng Dialog, nhưng chưa được.
Sao lại không được nhỉ?
PHP:
Sub ImportModule()
  Dim Txtfile As String
  With Application.FileDialog(3)
    .Show: .AllowMultiSelect = False
    Txtfile = .SelectedItems(1)
  End With
  ExecuteExcel4Macro ("VBA.INSERT.FILE(""" & Txtfile & """)")
End Sub
 
Upvote 0
Sao lại không được nhỉ?
PHP:
Sub ImportModule()
  Dim Txtfile As String
  With Application.FileDialog(3)
    .Show: .AllowMultiSelect = False
    Txtfile = .SelectedItems(1)
  End With
  ExecuteExcel4Macro ("VBA.INSERT.FILE(""" & Txtfile & """)")
End Sub
Vấn đề nằm ở chổ là mấy cái dấu """, em chưa hiểu chổ đó, thường thì Text nằm trong "" trong trường hợp này nó "vật" em hôm qua đến nay.
 
Upvote 0
Vấn đề nằm ở chổ là mấy cái dấu """, em chưa hiểu chổ đó, thường thì Text nằm trong "" trong trường hợp này nó "vật" em hôm qua đến nay.
Cách đơn giản nhất là THÍ NGHIỆM
Tôi sẽ làm thế này:
PHP:
Sub Test()
  Dim Txtfile As String
  Txtfile = "D:\Test.xls"
  MsgBox "VBA.INSERT.FILE(" & Txtfile & ")"
End Sub
Kết quả của MsgBox là VBA.INSERT.FILE(D:\Test.xls)
Thử thêm 1 dấu nháy đôi vào 2 đâu
PHP:
Sub Test()
  Dim Txtfile As String
  Txtfile = "D:\Test.xls"
  MsgBox "VBA.INSERT.FILE("" & Txtfile & "")"
End Sub
Ta có kết quả MsgBox là VBA.INSERT.FILE(" & Txtfile & ")
Thêm tiếp 1 dấu nháy nữa
PHP:
 Sub Test()
   Dim Txtfile As String
   Txtfile = "D:\Test.xls"
   MsgBox "VBA.INSERT.FILE(""" & Txtfile & """)"
 End Sub
Kết quả là: VBA.INSERT.FILE("D:\Test.xls")
Đúng như mong đợi
 
Lần chỉnh sửa cuối:
Upvote 0
Đúng là khi ra kết quả mới thấy nó đơn giản.
Hôm qua đến giờ em chỉ đến trường hợp 1+2
 
Upvote 0
Làm việc này mà không cần mở file thì tôi chẳng biết dùng cách gì. Tuy nhiên cũng có vài gợi ý:
- Mở từng Workbook
- Active Workbook vừa mở
- Xóa Module cũ
- Chèn Module mới
---------------------
Việc xóa Module, trên GPE đã có nói rồi... Tôi chỉ xin góp giải pháp chèn module
- Giả sử bạn có đoạn code:
PHP:
Sub ThiNghiem()
  MsgBox "Hello"
End Sub
- Hãy cho code này vào 1 file TXT (ví dụ code cho vào file Test.txt nằm tại ổ D)
- Active Workbook mà bạn cần chèn code rồi chạy sub dưới đây:
PHP:
Sub ImportModule()
  ExecuteExcel4Macro ("VBA.INSERT.FILE(""D:\Test.txt"")")
End Sub
Đây là hàm Macro 4 khá hay, tôi đã từng gữi vào mục đố vui nhưng chẳng thấy ai trả lời! Nhân tiện bạn hỏi nên gữi cho bạn tham khảo
xin hỏi thày NDU nếu ta copy code vào Thisworkbook thì code trên sửa thế thế nào ạ ?
 
Upvote 0
xin hỏi thày NDU nếu ta copy code vào Thisworkbook thì code trên sửa thế thế nào ạ ?

Cái thằng Macro 4 ấy chỉ chèn code vào Module thôi bạn à. Muốn chèn vào Sheet hoặc Workbook thì dùng cách khác
-------------
Dù gì bạn cứ thử cho tôi đoạn code Thisworkbook tôi xem thế nào rồi mới tính được chứ
 
Upvote 0
Cái thằng Macro 4 ấy chỉ chèn code vào Module thôi bạn à. Muốn chèn vào Sheet hoặc Workbook thì dùng cách khác
-------------
Dù gì bạn cứ thử cho tôi đoạn code Thisworkbook tôi xem thế nào rồi mới tính được chứ
Nhà em tưởng nó đơn giản là thày chỉ thay đổi chút xíu . Té ra không đơn giản, hèn chi nhà em mò mãi nó chẳng nghe . Cám ơn thày quan tâm !code này nhà em cũng down của GPE về ứng dụng mà còn lúng túng quá .
 

File đính kèm

  • tomau.txt
    455 bytes · Đọc: 15
Lần chỉnh sửa cuối:
Upvote 0
Nhà em tưởng nó đơn giản là thày chỉ thay đổi chút xíu . Té ra không đơn giản, hèn chi nhà em mò mãi nó chẳng nghe . Cám ơn thày quan tâm !code này nhà em cũng down của GPE về ứng dụng mà còn lúng túng quá .

Hỏi lần nữa cho chắc: File mà bạn định chèn code vào ấy đã có "thứ gì" trong đó chưa? Tức "thứ gì" mà tôi muốn nói là CODE ấy ---> Nó đã có code nào đó chưa hay chỉ là 1 file chứa dữ liệu thôi
 
Upvote 0
Hỏi lần nữa cho chắc: File mà bạn định chèn code vào ấy đã có "thứ gì" trong đó chưa? Tức "thứ gì" mà tôi muốn nói là CODE ấy ---> Nó đã có code nào đó chưa hay chỉ là 1 file chứa dữ liệu thôi
"Hà nội đêm trở gió", nó không chỉ trở gió mà "chở" cả "sét" lằng nhằng nên nhà em sợ tắt máy không dám ngồi , và lại thấy khuya tưởng thày cũng nghỉ nên không vào mạng nữa . Xin lỗi thày ! Code đi kèm thì nó chạy rồi nhưng riêng code trong thisworkbook nó không tự động cập nhật được nên mỗi lần muốn chạy nó cứ phải mở toang ra rồi copy dán vào nó mới chạy . Sợ các thày nghĩ "không chịu lao động" chỉ "há miệng chờ sung" nên nhà em chỉ hỏi phần còn vướng . Thầy nói vậy thì nhà em gửi cả file để thày giúp cho hoàn chỉnh hơn .
 

File đính kèm

  • TomauTR.xls
    39.5 KB · Đọc: 23
Lần chỉnh sửa cuối:
Upvote 0
"Hà nội đêm trở gió", nó không chỉ trở gió mà "chở" cả "sét" lằng nhằng nên nhà em sợ tắt máy không dám ngồi , và lại thấy khuya tưởng thày cũng nghỉ nên không vào mạng nữa . Xin lỗi thày ! Code đi kèm thì nó chạy rồi nhưng riêng code trong thisworkbook nó không tự động cập nhật được nên mỗi lần muốn chạy nó cứ phải mở toang ra rồi copy dán vào nó mới chạy . Sợ các thày nghĩ "không chịu lao động" chỉ "há miệng chờ sung" nên nhà em chỉ hỏi phần còn vướng . Thầy nói vậy thì nhà em gửi cả file để thày giúp cho hoàn chỉnh hơn .

Hơi khó hiểu chút
Tôi nghĩ trường hợp như bạn chỉ cần chạy code này là được rồi:
Mã:
Sub Auto_Open()
  On Error Resume Next
  With ThisWorkbook.VBProject
    With .VBComponents("ThisWorkbook")
      .CodeModule.DeleteLines 1, .CodeModule.CountOfLines
      .CodeModule.InsertLines 1, _
      "Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)" & vbLf & _
      "  Application.ScreenUpdating = False" & vbLf & _
      "  On Error Resume Next" & vbLf & _
      "  Dim cond As FormatCondition" & vbLf & _
      "  If Target.Cells(1, 1).FormatConditions.Count > 0 Then" & vbLf & _
      "    Set cond = Target.Cells(1, 1).FormatConditions(1)" & vbLf & _
      "    If cond.Formula1 = ""=ROW()=CELL(""""ROW"""")"" Then" & vbLf & _
      "      Target.Calculate" & vbLf & _
      "    End If" & vbLf & _
      "    Set cond = Nothing" & vbLf & _
      "  End If" & vbLf & _
      "  Application.ScreenUpdating = True" & vbLf & _
      "End Sub"
    End With
  End With
End Sub
Thậm chí cũng chả cần chạy vì Sub Auto_Open sẽ tự chạy khi bạn khởi động file và nó sẽ tự chèn code vào Thisworkbook theo ý của bạn
------------------------
"Code đi kèm thì nó chạy rồi nhưng riêng code trong thisworkbook nó không tự động cập nhật được nên mỗi lần muốn chạy nó cứ phải mở toang ra rồi copy dán vào nó mới chạy
Hoàn toàn không hiểu vấn đề này nghĩa là sao nữa
 
Upvote 0
Web KT

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

Back
Top Bottom