Hỏi cách thay đổi nội dung trong code của VBA

Liên hệ QC

diemvuongvathuongde

Thành viên chính thức
Tham gia
5/11/07
Bài viết
75
Được thích
2
Chào các bác.
Trong file abc.xls em có 1 sub với nội dung như sau
Mã:
Sub vidu()
    MsgBox ("Thong bao 1")
End Sub
trong VBA em đặt password là "123"
Các bác cho em hỏi: Làm thế nào em có thể thay đổi được nội dung trong đoạn code trên thành MsgBox ("Thong bao 2") mà không phải mở abc.xls
 
Em nghĩ là không thể thay đổi dữ liệu code mà lại không mở file Excel được bác ạ!
Chỉ có thể thay đổi code dựa trên 1 sheet Options lưu trữ thông tin sẽ thay đổi đó. Và 1 Form Settings dùng để thêm hay sữa dữa liệu cần thay đổi thôi (Tức là vẫn không mở VBA ra nhưng vẫn có thể thay đổi được "Thông báo 1" sang "Thông báo 2" như bác nói).
Thân.
 
Upvote 0
Chào các bác.
Trong file abc.xls em có 1 sub với nội dung như sau
Mã:
Sub vidu()
    MsgBox ("Thong bao 1")
End Sub
trong VBA em đặt password là "123"
Các bác cho em hỏi: Làm thế nào em có thể thay đổi được nội dung trong đoạn code trên thành MsgBox ("Thong bao 2") mà không phải mở abc.xls
1/ Đặt PW cho VBA thì mở nó ra rồi sửa lại. Nếu không có PW thì tìm cách Cr*** nó. Tìm hiểu trên GPE cũng không khó khăn lắm đâu.

2/ Nếu không mở file XLS mà bạn vẫn muốn sửa thông báo đó, vậy bạn thử 1 cách cổ điển mà trước đây tôi vẫn hay dùng (bây giờ không biết có còn hiệu nghiệm không nữa ???) Bạn thử dùng DiskEdit trong bộ Norton ultilities

TDN
 
Upvote 0
Em đã đọc được trên diễn đàn cách thay đổi nội dung 1 dòng code, nhưng giờ chịu không nhớ nổi để tìm. Em mô tả điều em cần cho các bác xem: Từ 1 file, làm cách nào
- Mở file abc.xls
- Mở VBA của abc.xls, thay đổi nội dung trong Sub vidu()
- Đóng VBA
- Đóng abc.xls
 
Upvote 0
Bạn thử file này làm ví dụ nha!
File này cho phép sửa dữ liệu đã có trong code nhưng không được mở VBA. Không biết có đúng ý bạn không?
Pass VBA là "123".
 

File đính kèm

Upvote 0
Code sau đây cho phép thay đổi từng dòng trong module:
Mã:
Sub ModuleRowReplace()
  Dim i As Byte
  With Workbooks("book1.xls").VBProject.VBComponents("Module1").CodeModule
    For i = 1 To .CountOfLines
      If .Lines(i, 1) = "MsgBox ""Thongbao 1""" Then
        .ReplaceLine i, "MsgBox ""Thongbao 2"""
      End If
    Next i
  End With
End Sub
 
Upvote 0
Trong sub vidu: Msgbox ("Thong bao 1")
Trong code, phải thêm dấu ngoặc đơn:
Mã:
   If .Lines(i, 1) = "MsgBox (""Thongbao 1"")" Then
        .ReplaceLine i, "MsgBox ""Thongbao 2"""
Điều quan trọng: Chú ý khoảng trắng đầu dòng. Trong trường hợp trên, trước Msgbox ("Thong bao 1")không có khoảng trắng thì code mới chạy đúng.
 
Upvote 0
Nó báo lỗi này cơ, bác voda ạ
VBA_ERR.jpg
 
Upvote 0
-Bạn vào Tools/Macro/Security đánh dấu chọn vào mục Trust access to Visual Basic Project sẽ khắc phục được lỗi này.
-Nếu thay đổi code trên book hiện hành, dùng ThisWorkbook thay vì chỉ định tên: With ThisWorkbook. VBProject....
 
Upvote 0
Cảm ơn bác Voda nhiều. Các bác giúp em tiếp nhé:
1- Khi VBA bị đặt pas thì có thay code được không, nếu được thì thêm câu lệnh gì?
2- Ở module thì thay như trên, vậy ở các sự kiện trong sheet thì thay như thế nào, ví dụ
Trong Sheet1 có sự kiện
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 Then MsgBox "Vua thay doi o cot 1"
End Sub
Nay muốn thay thành
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 1 Then MsgBox "Vua thay doi o dong 1"
End Sub
3- Trong VBE làm cách nào để có được chỉ số đầu dòng của các đoạn code (Tức là đầu dòng sẽ có số để dễ theo dõi ý mà).
Cảm ơn các bác lần nữa.
 
Lần chỉnh sửa cuối:
Upvote 0
Nguyên văn bởi diemvuongvathuongde
1- Khi VBA bị đặt pas thì có thay code được không, nếu được thì thêm câu lệnh gì?
Khi VBA bị đặt pass đương nhiên không thể thay code được. Muốn thay code:
-Phải biết pass.
-Dùng lệnh để unprotect VBAProject.
Mã:
Sub MokhoaProject()
        UnprotectVBProject ActiveWorkbook, "pass"
End Sub
-----------------------------------------------------------------------
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim vbproj As Object
Set vbproj = WB.VBProject
Set Application.VBE.ActiveVBProject = vbproj
      SendKeys Password & "~~"
      Application.VBE.CommandBars(1).FindControl(ID:=2578, recursive:=True).Execute
End Sub
2- Ở module thì thay như trên, vậy ở các sự kiện trong sheet thì thay như thế nào
-Nếu code nằm trong sheet, ta dùng câu lệnh:
With Workbooks("book1.xls").VBProject.VBComponents("codename của sheet").CodeModule
-Nếu code trong ThisWorkbook:
With Workbooks("book1.xls").VBProject.VBComponents("ThisWorkbook").CodeModule
-Nếu code trong Userform:
With Workbooks("book1.xls").VBProject.VBComponents("Userform1").CodeModule
3- Trong VBE làm cách nào để có được chỉ số đầu dòng của các đoạn code (Tức là đầu dòng sẽ có số để dễ theo dõi ý mà).
Vấn đề này có thể làm được. Bạn dùng đoạn code sau đây:
Mã:
With ThisWorkbook.VBProject.VBComponents("Module1").CodeModule
      For i = 2 To .CountOfLines
           .ReplaceLine i, i & " " & .Lines(i, 1)
      Next i
 End With
Chú ý: Vòng lặp bắt đầu đánh số từ dòng 2 của Sub để tránh gây ra lỗi.
 
Upvote 0
Web KT

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

Back
Top Bottom