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.
 
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
------------------------

Hoàn toàn không hiểu vấn đề này nghĩa là sao nữa
Cám ơn thày, nhưng sao nhà em copy code trên vào modunle nó không câp nhật vào thisWorkbook ạ ? chắc nhà em sai chỗ nào nhỉ ?
 

File đính kèm

  • Book1b.xls
    27 KB · Đọc: 25
Upvote 0
Cám ơn thày,mải xem robocon quá . để nhà em xem lại tại sao máy nhà em nó không cập nhật

Nếu bạn chỉ copy code cho vào thôi thì nó làm gì mà "cập" với "nhật"
Bạn phải lưu và đóng file. Xong mở file lần nữa thì sẽ thấy code trong Thisworkbook
 
Upvote 0
Cám ơn thày, nhưng sao nhà em copy code trên vào modunle nó không câp nhật vào thisWorkbook ạ ? chắc nhà em sai chỗ nào nhỉ ?

Tôi không hiểu cái lô gíc của bạn.
Bạn dán vào module code của Auto_Open mà trong nó có toàn bộ code dành cho ThisWorkbook. Rồi phải save --> close --> open rồi mới thấy cập nhật. Chưa nói gì tới cập nhật. Nhưng tôi không hiểu sao bạn lại phải đi vòng vèo thế? Thay vì dán code "dài dài" Auto_Open thì bạn dán code "ngắn ngắn hơn" vào luôn ThisWorkbook. Ai cấm làm thế hả bạn?
Thật là khó hiểu quá
 
Upvote 0
Tôi không hiểu cái lô gíc của bạn.
Bạn dán vào module code của Auto_Open mà trong nó có toàn bộ code dành cho ThisWorkbook. Rồi phải save --> close --> open rồi mới thấy cập nhật. Chưa nói gì tới cập nhật. Nhưng tôi không hiểu sao bạn lại phải đi vòng vèo thế? Thay vì dán code "dài dài" Auto_Open thì bạn dán code "ngắn ngắn hơn" vào luôn ThisWorkbook. Ai cấm làm thế hả bạn?
Thật là khó hiểu quá
Trời ơi ! phiền cả thày NDU và thày Siwtom rồi . Nếu là làm thủ công thì nhà em làm được rồi . Nhưng nhân tiện xem tiêu đề tự động copy code vào tập tin nên nhà em hỏi và đúng ra là đã đạt yêu cầu rồi . Chỉ có điều không hiểu sao code trên không tự động cập nhật vào thisWorkbook .Tất nhiên là nhà em save và kể cả saves sau đó mới mở lại . Vẫn không được , hay office của nhà em bị lỗi nên không được . Xem code, đúng ra toàn bộ phần có dấu " của code phải vào thisWorkbook thì mới đúng, điều kỳ lạ là ...Có lẽ không dám phiền các thày nữa .Quan điểm nhà em là cố mà học, cố mà làm, cố mà hiểu, để từng chút tích lũy kinh nghiệm, tích lũy kiến thức thôi mà thày . Xin cám ơn các thày !
 
Lần chỉnh sửa cuối:
Upvote 0
Trời ơi ! phiền cả thày NDU và thày Siwtom rồi . Nếu là làm thủ công thì nhà em làm được rồi . Nhưng nhân tiện xem tiêu đề tự động copy code vào tập tin nên nhà em hỏi và đúng ra là đã đạt yêu cầu rồi . Chỉ có điều không hiểu sao code trên không tự động cập nhật vào thisWorkbook .Tất nhiên là nhà em save và kể cả saves sau đó mới mở lại . Vẫn không được , hay office của nhà em bị lỗi nên không được . Xem code, đúng ra toàn bộ phần có dấu " của code phải vào thisWorkbook thì mới đúng, điều kỳ lạ là ...Có lẽ không dám phiền các thày nữa .Quan điểm nhà em là cố mà học, cố mà làm, cố mà hiểu, để từng chút tích lũy kinh nghiệm, tích lũy kiến thức thôi mà thày . Xin cám ơn các thày !

Bạn không hiểu ý tôi. Tôi không quan tâm tới chuyện có cập nhật hay không. Tôi chỉ không hiểu cái bạn định làm. Thay vì bạn dán vào module code Auto_Open để nó dán code của SUB vào ThisWorkbook thì sao bạn không dán luôn vào ThisWorkbook code của SUB?

Tôi lấy ví dụ về việc làm hơi khác mà tôi lại hiểu.

Một ngày đẹp trời bạn muốn thêm vào hàng loạt tập tin (chúng có cùng đặc điểm gì đó?) một code nào đó. Bạn có thể mở từng tập tin rồi dán code vào sau đó save. Nhưng bạn nghĩ: Thế trong tương lai lại có tình huống như thế thì chả nhẽ lại làm bằng tay? Thế là bạn viết 1 code: mở cửa sổ chọn các tập tin Excel --> chọn tập tin TXT chứa code --> mở từng tập tin --> thêm code từ tập tin trên đĩa --> save --> close --> mở tập tin mới.

Code dùng nhiều lần, mãi mãi.

Việc trên thì tôi hiểu nhưng việc bạn làm tôi không hiểu - không có tí lô gíc nào cả. Hoặc tôi chưa hiểu. Vì thế nên tôi hỏi.
 
Upvote 0
Bạn không hiểu ý tôi. Tôi không quan tâm tới chuyện có cập nhật hay không. Tôi chỉ không hiểu cái bạn định làm. Thay vì bạn dán vào module code Auto_Open để nó dán code của SUB vào ThisWorkbook thì sao bạn không dán luôn vào ThisWorkbook code của SUB?

Tôi lấy ví dụ về việc làm hơi khác mà tôi lại hiểu.

Một ngày đẹp trời bạn muốn thêm vào hàng loạt tập tin (chúng có cùng đặc điểm gì đó?) một code nào đó. Bạn có thể mở từng tập tin rồi dán code vào sau đó save. Nhưng bạn nghĩ: Thế trong tương lai lại có tình huống như thế thì chả nhẽ lại làm bằng tay? Thế là bạn viết 1 code: mở cửa sổ chọn các tập tin Excel --> chọn tập tin TXT chứa code --> mở từng tập tin --> thêm code từ tập tin trên đĩa --> save --> close --> mở tập tin mới.

Code dùng nhiều lần, mãi mãi.

Việc trên thì tôi hiểu nhưng việc bạn làm tôi không hiểu - không có tí lô gíc nào cả. Hoặc tôi chưa hiểu. Vì thế nên tôi hỏi.
Thực ra nhà em có ý định ghi tập tin đó dưới dạng có đuôi .xla để khi cần thì chỉ cần gọi ADD-in để nó nạp Code trên vào ThisWorkbook ( không phải mở tập tin khác để copy code vào thisWookbook ). Thực ra cũng là một cách trải nghiệm xem liệu mình làm được gì không . Cũng như đi tàu, nhà em muốn thò cổ ra ngoài xem gì có khác không thôi mà . Cám ơn và xin chào thày .
 
Upvote 0
Chỉ có điều không hiểu sao code trên không tự động cập nhật vào thisWorkbook .Tất nhiên là nhà em save và kể cả saves sau đó mới mở lại . Vẫn không được , hay office của nhà em bị lỗi nên không được . Xem code, đúng ra toàn bộ phần có dấu " của code phải vào thisWorkbook thì mới đúng, điều kỳ lạ là ...Có lẽ không dám phiền các thày nữa .Quan điểm nhà em là cố mà học, cố mà làm, cố mà hiểu, để từng chút tích lũy kinh nghiệm, tích lũy kiến thức thôi mà thày . Xin cám ơn các thày !

Thế thì thí nghiệm tiếp: bấm Alt + F8, chọn Auto_Open rồi bấm Run thì nó có chạy không?
Nếu nó vẫn không chèn được code vào Thisworkbook thì tôi hiểu vấn đề ở đâu rồi:
- Nếu bạn dùng Excel 2003 thì vào menu Tools\Macro\Security ---> Chuyển sang tab Trusted Publishers và check vào mục Trust access to Visual Basic Project
- Nếu bạn dùng Excel 2007 hoặc 2010, bấm tổ hợp phím Alt + T + M + S để vào phần Macro Settings và check vào mục Trust access to the VBA project object model
Xong chạy lại code ---> Hy vọng đã đúng.. thuốc
Ẹc... Ẹc...
 
Lần chỉnh sửa cuối:
Upvote 0
Thế thì thí nghiệm tiếp: bấm Alt + F8, chọn Auto_Open rồi bấm Run thì nó có chạy không?
Nếu nó vẫn không chèn được code vào Thisworkbook thì tôi hiểu vấn đề ở đâu rồi:
- Nếu bạn dùng Excel 2003 thì vào menu Tools\Macro\Security ---> Chuyển sang tab Trusted Publishers và check vào mục Trust access to Visual Basic Project
- Nếu bạn dùng Excel 2007 hoặc 2010, bấm tổ hợp phím Alt + T + M + S để vào phần Macro Settings và check vào mục Trust access to the VBA project object model
Xong chạy lại code ---> Hy vọng đã đúng.. thuốc
Ẹc... Ẹc...
Thực ra nhà em mở hẳn mỗi thư mục mang tên một thày để lưu code hoặc công thức hay, nhà em không tin là code của thày không chạy . Nên chắc chắn do mình hoặc máy của nhà em có vấn đề . Tưởng thày chán "tên" học trò hay gây rắc rối, đang định vào thông báo và xin lỗi thày là đúng tên "Trust access to the VBA project object model" đã không được kích hoạt . Đúng thuốc rồi thày ạ !xin cám ơn sự tận tình giúp đỡ của thày .
 
Lần chỉnh sửa cuối:
Upvote 0
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
------------------------

Hoàn toàn không hiểu vấn đề này nghĩa là sao nữa
Nhà em mạn phép hỏi thày Ndu thêm một chút . Tất cả ý tưởng thực hiện công việc nhà em đã hoàn tất . Nhưng sau khi hoàn tất lại thấy có vẻ không hợp lý lắm . Để thực hiện thay vì code đã được file .xla được gọi từ ADD-ins đã có code trên , lại phải impost nó từ ngoài vào . Vì vậy nhà em muốn thày giúp impost code trên sang thisWorkbook của bất kỳ file nào nếu đang mở song song cùng với tập tin có code này . Không biết có phiền thày không nữa ? Và cám ơn các thày đã không nặng lời khi thấy cái ý tưởng có vẻ dở hơi ...
 
Upvote 0
Nhà em mạn phép hỏi thày Ndu thêm một chút . Tất cả ý tưởng thực hiện công việc nhà em đã hoàn tất . Nhưng sau khi hoàn tất lại thấy có vẻ không hợp lý lắm . Để thực hiện thay vì code đã được file .xla được gọi từ ADD-ins đã có code trên , lại phải impost nó từ ngoài vào . Vì vậy nhà em muốn thày giúp impost code trên sang thisWorkbook của bất kỳ file nào nếu đang mở song song cùng với tập tin có code này . Không biết có phiền thày không nữa ? Và cám ơn các thày đã không nặng lời khi thấy cái ý tưởng có vẻ dở hơi ...

Cho toàn bộ code dưới đây vào 1 Module
Mã:
Sub Auto_Open()
  With Application.CommandBars(1)
    .Reset
    With .Controls.Add(1, , , 1)
      .Caption = "Inset code"
      .OnAction = "InsertCode"
      .FaceId = 44
    End With
  End With
End Sub
Sub Auto_Close()
  Application.CommandBars(1).Reset
End Sub
Sub InsertCode()
  On Error Resume Next
  With ActiveWorkbook.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
    If Err.Number = 0 Then MsgBox "successfully inserted code into 'Thisworkbook'"
  End With
End Sub
Save File thành AddIn
Gọi AddIn lên, bạn sẽ nhìn thấy 1 menu mới được tạo ra trên thanh menu (với tên là Insert code). Bấm vào nút Insert code rồi kiểm tra xem code đã được chèn vào file hiện hành chưa
 
Upvote 0
Save File thành AddIn
Gọi AddIn lên, bạn sẽ nhìn thấy 1 menu mới được tạo ra trên thanh menu (với tên là Insert code). Bấm vào nút Insert code rồi kiểm tra xem code đã được chèn vào file hiện hành chưa[/QUOTE]

Cám ơn thày NDU! code chạy tốt rồi ạ ? GPE dạo này "chật quá" chen mãi không vào được, mà có vẻ "đỏng đảnh" nữa, lúc chạy rầm rầm lúc lại ì ra như bị "bó phanh", sốt cả ruột. Bấm nút cảm ơn không thì nhà em cảm thấy vẫn chưa an tâm, nếu ở gần nhà em phải đến tận nơi để cám ơn thày .
 
Lần chỉnh sửa cuối:
Upvote 0
hiện tại em đang làm 1 file excel thống kê thép, e muốn file tự động cập nhật hình dạng thép khi thay đổi mã hiệu thép, em đã thử dùng nhiều cách làm nhưng không đạt hiệu quả. Em gửi file lên mọi người giúp em nhé!!. Em cám ơn
 

File đính kèm

  • Book2.xlsx
    33.7 KB · Đọc: 2
Upvote 0
mong các bạn giúp tôi muốn chép code vào sheet khác đang mở thì làm sào?
tks các bạn
 
Upvote 0
Tôi có đoạn code này muốn gán vào sheet :
Dim rng As Range
Dim FindString As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
n = Sheet1.Range("A65536").End(xlUp).Row
i = Target.Row

If Target.Address = "$A$1" Then
Application.ScreenUpdating = False
Sheet1.Cells.EntireRow.Hidden = False
Sheet1.Range("A" & n + 2 & ":B65536").EntireRow.Hidden = True
Sheet1.AutoFilterMode = False

If Sheet1.Range("J6").Value = "PHI" & ChrW(7870) & "U CHI" Then
......
Else
...............
End If

Application.ScreenUpdating = True
End If
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom