Hướng dẩn về Code để xoá Code trong sheet mới sau khi move or copy

  • Thread starter Thread starter tam8678
  • Ngày gửi Ngày gửi
Liên hệ QC

tam8678

Đời Xá Chi
Tham gia
30/4/09
Bài viết
417
Được thích
301
Nghề nghiệp
Kế toán
Ví dụ tôi có Sheet 1, trong sheet 1 có chứa code trong sheet, khi tôi move sheet 1 để in (nhằm mục đích thêm tiêu đề, ...) thì sheet mới cũng mang theo code. Vậy có code (code được viết trong module) nào để khi move sheet mà sheet mới không chứa code nằm trong sheet không ? Rất mong các anh em xem và giúp, xin được cám ơn trươc.
 
Ví dụ tôi có Sheet 1, trong sheet 1 có chứa code trong sheet, khi tôi move sheet 1 để in (nhằm mục đích thêm tiêu đề, ...) thì sheet mới cũng mang theo code. Vậy có code (code được viết trong module) nào để khi move sheet mà sheet mới không chứa code nằm trong sheet không ? Rất mong các anh em xem và giúp, xin được cám ơn trươc.

Bạn thử code sau:
VD tôi xóa toàn bộ code ở sheet1

Mã:
Sub XoaCode()
     With ThisWorkbook.VBProject.VBComponents([COLOR=red][B]Sheet1[/B][/COLOR].CodeName).CodeModule
       .DeleteLines 1, .CountOfLines
     End With

End Sub
 
Upvote 0
Bạn thử code sau:
VD tôi xóa toàn bộ code ở sheet1

Mã:
Sub XoaCode()
     With ThisWorkbook.VBProject.VBComponents([COLOR=red][B]Sheet1[/B][/COLOR].CodeName).CodeModule
       .DeleteLines 1, .CountOfLines
     End With

End Sub
Xin hỏi anh thêm thế có thể viết code để copy đoạn code trong Module vào Sheet được không
Nếu được xin anh và các anh chị khác giúp
 
Upvote 0
Là sao ta? Mà copy code Module vào Sheet để làm giống gì?

Giả sử em có một File chứa một code, em cần copy sang sheet của file khác để người khác sử dụng. Chứ cơ quan em ít ngời biết VBA nên mỗi lần ứng dụng vào file của họ, họ không biết copy code như thế nào. Em nghĩ nếu có được, chỉ cú kích chuột là file của họ có thể dùng code với sự kiện Worksheet_Change... (còn code copy sang module là em đã dùng cách của sư phụ rồi thông qua File text)
 
Upvote 0
Giả sử em có một File chứa một code, em cần copy sang sheet của file khác để người khác sử dụng. Chứ cơ quan em ít ngời biết VBA nên mỗi lần ứng dụng vào file của họ, họ không biết copy code như thế nào. Em nghĩ nếu có được, chỉ cú kích chuột là file của họ có thể dùng code với sự kiện Worksheet_Change... (còn code copy sang module là em đã dùng cách của sư phụ rồi thông qua File text)
Thì từ bài 2 bạn "phăng" tiếp đi
Ví dụ ta có:
- Book1.xls là file của ta, có chứa code trong Sheet1
- Book2.xls là file mà ta cần phải chèn code vào sheet1
Vậy tôi sẽ "phăng" thế này:
PHP:
Sub CopyCode()
  Dim Tmp As String
  With ThisWorkbook.VBProject.VBComponents(Sheet1.CodeName).CodeModule
    Tmp = ThisWorkbook.VBProject.VBComponents(Sheet1.CodeName).CodeModule.Lines(1, .CountOfLines)
  End With
  Tmp = Replace(Tmp, "Option Explicit", "")
  With Workbooks.Open(ThisWorkbook.Path & "\Book2.xls")
    .VBProject.VBComponents(Sheet1.CodeName).CodeModule.AddFromString Tmp
    .Close True
  End With
End Sub
Đương nhiên đây chỉ là code dạng "thô" ---> Còn phải "mài giủa" lại thêm mới hoàn hảo (chẳng hạn phải kiểm tra xem trong sheet1 của Book2.xls đã có code giống với code mà ta chuẩn bị chèn vào không?)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thì từ bài 2 bạn "phăng" tiếp đi
Ví dụ ta có:
- Book1.xls là file của ta, có chứa code trong Sheet1
- Book2.xls là file mà ta cần phải chèn code vào sheet1
Vậy tôi sẽ "phăng" thế này:
PHP:
Sub CopyCode()
  Dim Tmp As String
 [COLOR="red"] With ThisWorkbook.VBProject.VBComponents(Sheet1.CodeName).CodeModule[/COLOR]
    Tmp = ThisWorkbook.VBProject.VBComponents(Sheet1.CodeName).CodeModule.Lines(1, .CountOfLines)
  End With
  Tmp = Replace(Tmp, "Option Explicit", "")
  With Workbooks.Open(ThisWorkbook.Path & "\Book2.xls")
    .VBProject.VBComponents(Sheet1.CodeName).CodeModule.AddFromString Tmp
    .Close True
  End With
End Sub
Đương nhiên đây chỉ là code dạng "thô" ---> Còn phải "mài giủa" lại thêm mới hoàn hảo (chẳng hạn phải kiểm tra xem trong sheet1 của Book2.xls đã có code giống với code mà ta chuẩn bị chèn vào không?)

Nhờ Sư phụ xem sao báo lỗi
 

File đính kèm

Upvote 0
Nhờ Sư phụ xem sao báo lỗi
Cụ thể là lỗi gì? Có phải cái này không?

untitled1.JPG


Nếu đúng vậy thì bạn nên nhớ 1 điều: Do cơ chế bảo vệ của Excel, mọi sự can thiệp vào code module (như chèn code, xóa code...) đều không được cho phép ---> Muốn làm được điều này thì phải thêm thao tác nữa:
- Vào menu Tools\Macro\Security
- Chuyển sang tab Trusted Publishers và check vào mục "Trust access to Visual Basic Project"

untitled2.JPG
 
Upvote 0
Cụ thể là lỗi gì? Có phải cái này không?

View attachment 60706


Nếu đúng vậy thì bạn nên nhớ 1 điều: Do cơ chế bảo vệ của Excel, mọi sự can thiệp vào code module (như chèn code, xóa code...) đều không được cho phép ---> Muốn làm được điều này thì phải thêm thao tác nữa:
- Vào menu Tools\Macro\Security
- Chuyển sang tab Trusted Publishers và check vào mục "Trust access to Visual Basic Project"

View attachment 60707

Cảm ơn Sư phụ đã đúng như lỗi trên và đã thực hiện được. Nhờ Sư phụ cải tiến thêm vào Active Sheet giúp em (cái này em cũng thử được rồi - Xin cảm ơn Sư phụ lần nữ)
Một vấn đề nữa đặt ra: Kiểm tra đoạn code đó đã tồn tại hay chưa trước khi copy? Xin giúp đỡ tiếp
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Sư phụ đã đúng như lỗi trên và đã thực hiện được. Nhờ Sư phụ cải tiến thêm vào Active Sheet giúp em (cái này em cũng thử được rồi - Xin cảm ơn Sư phụ lần nữ)
trong code có đoạn Sheet1.CodeName... bạn sửa lại thành ActiveSheet.CodeName thì là ActiveSheet rồi
 
Upvote 0
Trường hợp kiểm tra xem đoạn code đó có tồn tại hay chưa trước khi copy được không ?
Đây là code copy VBA code từ ActiveSheet của file chính sang ActiveSheet của file con (có kiểm tra code trùng)
PHP:
Sub CopyCode()
  Dim Tmp, CurSh As Worksheet
  With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
    Tmp = .Lines(1, .CountOfLines)
  End With
  Tmp = Replace(Tmp, "Option Explicit", "")
  With Workbooks.Open(ThisWorkbook.Path & "\Book2.xls")
    Set CurSh = .ActiveSheet
    With .VBProject.VBComponents(CurSh.CodeName).CodeModule
      If InStr(.Lines(1, .CountOfLines), Tmp) = 0 Then .AddFromString Tmp
    End With
    .Close True
  End With
End Sub
Tmp là chuổi lấy từ code của ActiveSheet của file chính, vậy thì dùng InStr thôi, so sánh với chuổi lấy từ ActiveSheet của file con
-----------------------------------
Nếu bạn quan tâm đến chèn, xóa, đếm... các code, bạn vào trang sau đọc thêm nhé.
http://www.cpearson.com/excel/vbe.aspx
Trang ấy để tham khảo thì được chứ bắt chước y chang thì tôi thấy nó quá dài dòng
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom