Gọi hàm này ở đâu vậy ạ???

Liên hệ QC

mthuvigo

Thành viên mới
Tham gia
17/11/11
Bài viết
40
Được thích
25
Sub LuuFileMoi()
Dim EndR As Long, FName As String
EndR = Sheets("QUOTESHEET").Range("K6").Value
FName = InputBox("New File Name:")
ActiveWorkbook.Sheets.Copy
ActiveWorkbook.SaveAs Filename:=FName
Sheets("QUOTESHEET").Range("K6").Value = EndR
End Sub

Anh chị ơi mình nên gọi hàm này ở đâu để sau khi nó lưu ra một file mới thì tự động đóng file đang mở lại luôn ạ??? Tại vì sau khi lưu file thành một file mới bằng lệnh saveas thì nó tiếp tục lưu file mới nữa.
 
Đây là code do mình tự SaveAs. Mình có thể can thiệp vào nút lệnh SaveAs của Excel bằng đoạn code trên không ạ? Vì nếu em SaveAs bằng nút SaveAS của Excel thì nó lưu file mới và không thực hiện macro của em. Nghĩa là lưu file mới và E2 vẫn tăng đều đặn mỗi lần mở file.

Nếu bạn muốn Save As thì đâu cần chi phải hiển thị cái InputBox làm gì đúng không? Nó tự hiển thị hộp thoại để mình ghi tên File rồi, vậy vấn đề của bạn chỉ là Xóa các thủ tục thôi. Vậy thì code sẽ như sau:

Bạn copy thủ tục dưới đây vào Thisworkbook:

PHP:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If SaveAsUI = True Then Call Xoa_ThisworkbookCode
End Sub
 
Upvote 0
Dạ, đúng rồi ạ, em sợ không can thiệp được vào phần SaveAs của Excel nên mới nghĩ ra cách đó để viết. Cảm ơn các anh chị thiệt nhiều. Em đã giải quyết được vấn đề rồi ạ. Cảm ơn anh Hoàng Trọng Nghĩa nhiều nhé.
 
Upvote 0
Dạ, đúng rồi ạ, em sợ không can thiệp được vào phần SaveAs của Excel nên mới nghĩ ra cách đó để viết. Cảm ơn các anh chị thiệt nhiều. Em đã giải quyết được vấn đề rồi ạ. Cảm ơn anh Hoàng Trọng Nghĩa nhiều nhé.

Bạn hài lòng là tốt rồi. Tôi chỉ hỏi thêm:
Nếu bạn có file gốc là blabla.xls và bạn "làm nhiều việc thay đổi", sau đó bạn chọn SaveAs với code mà bạn hài lòng thì file lưu sẽ có những thay đổi đó và mất sub count, nhưng file gốc blabla.xls không có những thay đổi đó và công lao đổ xuống sông xuống biển. Bạn muốn thế?
Còn nếu bạn muốn blabla.xls cũng có những thay đổi thì thử xem ở dưới (bạn phải thêm references "Microsoft Visual Basic for Applications Extensibility")
Giả sử sub count ở Module2, bạn sửa cho đúng như bạn có
Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim MyCodeModule As CodeModule, start As Long, lcount As Long
On Error GoTo end_
    If SaveAsUI Then
        ThisWorkbook.Save
        Set MyCodeModule = ThisWorkbook.VBProject.VBComponents("Module2").CodeModule
        start = MyCodeModule.ProcStartLine("count", vbext_pk_Proc)
        lcount = MyCodeModule.ProcCountLines("count", vbext_pk_Proc)
        MyCodeModule.DeleteLines start, lcount
        Set MyCodeModule = Nothing
    End If
end_:
End Sub
 
Upvote 0
Có phải code của siwtom chỉ xóa mỗi module 2 chứa sub Count không ạ? Còn tất cả code trên thisworkbook đều được giữ lại mà không phải xóa hết đi như hàm Xoa_ThisWorkbookCode của em đúng không ạ?​
 
Upvote 0
Có phải code của siwtom chỉ xóa mỗi module 2 chứa sub Count không ạ? Còn tất cả code trên thisworkbook đều được giữ lại mà không phải xóa hết đi như hàm Xoa_ThisWorkbookCode của em đúng không ạ?​

Chỉ xóa mỗi sub count trong Module2, các sub khác trong Module2 không xóa.
Cái này bạn tự kiểm tra được mà. Lần sau rút kinh nghiệm nhé
 
Upvote 0
Em đã học hỏi được rất nhiều điều, cảm ơn mọi người -=.,,
 
Upvote 0
Web KT
Back
Top Bottom