Xóa code trong module (1 người xem)

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

Người dùng đang xem chủ đề này

mthuvigo

Thành viên mới
Tham gia
17/11/11
Bài viết
40
Được thích
25
Em có 1 module như thế này ạ

sub Count()
{
Sheets("Sheet1").Range("A1").Value = Sheets("Sheet1").Range("A1").Value +1
}
End sub


Có anh chị biết code nào mà mình xóa đi nội dung bên trong của sub mà vẫn để lại tên sub như thế này ko ạ?
sub Count()
{
}
End sub
 
Em có 1 module như thế này ạ

sub Count()
{
Sheets("Sheet1").Range("A1").Value = Sheets("Sheet1").Range("A1").Value +1
}
End sub


Có anh chị biết code nào mà mình xóa đi nội dung bên trong của sub mà vẫn để lại tên sub như thế này ko ạ?
sub Count()
{
}
End sub
Bạn thử code này được không nhé. Giả sử code đó năm trong Module2:
PHP:
Sub Delete_Code()
    Dim VBCodeMod
    Dim StartLine As Long
    Dim TotalLines As Long
    Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
    With VBCodeMod
        StartLine = .ProcStartLine("Count", vbext_pk_Proc) + 2
        TotalLines = .ProcCountLines("Count", vbext_pk_Proc) - 4
        .DeleteLines StartLine, TotalLines
    End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử code này được không nhé. Giả sử code đó năm trong Module2:
PHP:
Sub Delete_Code()
    Dim VBCodeMod
    Dim StartLine As Long
    Dim TotalLines As Long
    Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
    With VBCodeMod
        StartLine = .ProcStartLine("Count", vbext_pk_Proc) + 2
        TotalLines = .ProcCountLines("Count", vbext_pk_Proc) - 4
        .DeleteLines StartLine, TotalLines
    End With
End Sub

Báo lỗi dòng .DeleteLines StartLine, TotalLines bạn à. Lỗi ntn "Invalid procedure call or argument". Bạn có thể giúp mình lỗi này ko?
 
Lần chỉnh sửa cuối:
Upvote 0
Báo lỗi dòng .DeleteLines StartLine, TotalLines bạn à. Lỗi ntn "Invalid procedure call or argument". Bạn có thể giúp mình lỗi này ko?

Code của bạn viethoai sai
Để giải thích tôi dùng Module có code như hình dưới - các chú thích kiểu ' dong 12 là tôi thêm vào cho mục đích giải thích.
Mã:
Sub Delete_Code()
Dim VBCodeMod
    Dim StartLine As Long
    Dim TotalLines As Long
    Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule
    With VBCodeMod
        StartLine = .ProcStartLine("Count", vbext_pk_Proc) + 2
        TotalLines = .ProcCountLines("Count", vbext_pk_Proc) - 4
        .DeleteLines StartLine, TotalLines
    End With
End Sub
[COLOR=#ff0000]' dòng 12
' dòng 13
' dòng 14   <--- bat dau xoa[/COLOR]
 
 
 
Sub Count() [COLOR=#ff0000]' dòng 20
[/COLOR]
Sheets("Sheet1").Range("A1").Value = Sheets("Sheet1").Range("A1").Value + 1  [COLOR=#ff0000]' <--- dòng 22 - kết thúc xóa[/COLOR]

End Sub [COLOR=#ff0000]' dòng 24
[/COLOR]
Sub hehe()

End Sub
Bạn viethoai nghĩ là SUB bắt đầu từ dòng 20, tức ProcStartLine trả về 20. Không phải thế. SUB bắt đầu từ dòng 12 và kết thúc ở dòng 24.
Với module như trên thì ta có: StartLine = 14 (ProcStartLine trả về 12), TotalLines = 9 (ProcCountLines trả về 13, tức từ dòng 12 tới dòng 24)
Như vậy code xóa 9 dòng kể từ dòng 14, tức xóa tới hết dòng 22. Tức mất SUB nhưng còn END SUB

ProcBodyLine trả về chỉ số dòng chứa SUB ... ()
ProcStartLine - 1 + ProcCountLines trả về chỉ số dòng có END SUB
Từ đó muốn xóa từ đâu, xóa bao nhiêu thì dễ rồi
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn siwtom ơi, mình chỉ muốn xóa nội dung trong sub Count() mà. Nếu xóa từ dòng 12 thì mất tiêu đề sub rồi còn end sub không thì làm được gì chứ. Bạn xem lại giúp mình nhé!
 
Upvote 0
Bạn siwtom ơi, mình chỉ muốn xóa nội dung trong sub Count() mà. Nếu xóa từ dòng 12 thì mất tiêu đề sub rồi còn end sub không thì làm được gì chứ. Bạn xem lại giúp mình nhé!

Tôi có nói là xóa từ dòng 12 đâu? Mà 12 hay 1000 là còn tùy SUB ở vi trí nào.
Tôi đã viết rất rõ ràng. Tôi thường viết rất rõ ràng
ProcBodyLine trả về chỉ số dòng chứa SUB ... ()
ProcStartLine - 1 + ProcCountLines trả về chỉ số dòng có END SUB
Từ đó muốn xóa từ đâu, xóa bao nhiêu thì dễ rồi
Bạn có đọc dòng mầu đỏ không? Có SUB ở dòng ProcBodyLine thì dòng đầu tiên bạn muốn xóa sẽ tính được mà - Toán lớp 1. Vd. dòng đầu tiên bạn muốn xóa là dòng ngay sau dòng SUB thì
Mã:
StartLine = ProcBodyLine + 1
Nếu là dòng sau SUB k dòng thì + k. Thế thôi.
Tính số dòng cần xóa, tức TotalLines, cũng là Toán lớp 1.
Nếu xóa từ dòng sau dòng SUB tới dòng ngay trước END SUB thì
StartLine = ProcBodyLine + 1
TotalLines = (chỉ số dòng xóa cuối) - (chỉ số dòng có SUB) =
[(ProcStartLine - 1 + ProcCountLines) - 1] - ProcBodyLine =
ProcStartLine + ProcCountLines - ProcBodyLine - 2
Vậy code là
Mã:
Sub Delete_Code()
Dim VBCodeMod
    Dim StartLine As Long
    Dim TotalLines As Long
    Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("[COLOR=#ff0000]Module1[/COLOR]").CodeModule
    With VBCodeMod
        StartLine = .ProcBodyLine("Count", vbext_pk_Proc) + 1
        TotalLines = .ProcStartLine("Count", vbext_pk_Proc) + .ProcCountLines("Count", vbext_pk_Proc) - _
          .ProcBodyLine("Count", vbext_pk_Proc) - 2
        .DeleteLines StartLine, TotalLines
    End With
End Sub
Tôi đặt Count ở Module1 còn bạn đặt ở đâu thì sửa chữ đỏ
 
Upvote 0
Cảm ơn siwtom, nhờ bạn mà mình đã hiểu rồi. Cảm ơn mọi người trên diễn đàn nhiều nhé.
 
Upvote 0
Web KT

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

Back
Top Bottom