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
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
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)
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?)
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?)
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"
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"
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
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ữ)
Đâ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
-----------------------------------