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.
Sub LuuFileMoi()
Dim EndR As Long, FName As String
EndR = Sheets("QUOTESHEET").Range("K6").Value
FName = InputBox("New File Name:")
With ActiveWorkbook
.Sheets.Copy
.SaveAs Filename:=FName
Sheets("QUOTESHEET").Range("K6").Value = EndR
.Close
End with
End Sub
Cảm ơn anh đã trả lời giúp em. Nhưng hàm này thì mình gọi ở đâu cho nó chạy vậy anh?
Em gọi nó ở hàm Private Sub Workbook_BeforeClose(Cancel As Boolean) thì nó lưu file nhưng file gốc vẫn không đóng lại và tiếp tục lưu file mới
Ý của em khi viết macro này là khi em đang thao tác trên file gốc, sau khi thao tác xong, em đóng file này lại thì hiển thị hộp thông báo lưu file, em nhập tên file muốn lưu nhấn OK thì file gốc đóng lại đồng thời file mới cũng sẽ được tạo ra. Anh chị xem và giúp em với nhé!
Thử cái này coi sao. Hình như code bị dư cái gì đó, thấy nó sao sao ấy. Biến EndR để làm gì vậy? Nghĩ mãi mà không hiểu
Sub LuuFileMoi()
Dim EndR As Long, FName As String
EndR = Sheets("QUOTESHEET").Range("K6").Value
FName = InputBox("New File Name:")
With ThisWorkbook
.SaveAs Filename:=FName
Sheets("QUOTESHEET").Range("K6").Value = EndR
.Close False
End With
End Sub
Thử cái này coi sao. Hình như code bị dư cái gì đó, thấy nó sao sao ấy. Biến EndR để làm gì vậy? Nghĩ mãi mà không hiểu
Sub LuuFileMoi()
Dim EndR As Long, FName As String
EndR = Sheets("QUOTESHEET").Range("K6").Value
FName = InputBox("New File Name:")
With ThisWorkbook
.SaveAs Filename:=FName
Sheets("QUOTESHEET").Range("K6").Value = EndR
.Close False
End With
End Sub
Cảm ơn anh, em cũng đã thử code của anh, nhưng sau khi lưu file mới thành công thì nó lại tiếp tục chạy code thêm một lần nữa và yêu cầu nhập tên file cần lưu.
Biến EndR là biến lưu lại giá trị của file gốc. Trong file gốc em có một macro viết cho ô K6 giá trị tăng tự động sau mỗi lần mở file, nhưng khi lưu sang một file mới em muốn giữ nguyên các giá trị đó ở file đã lưu, còn file gốc thì vẫn chạy macro tăng giá trị tự động.
Ví dụ. Sau khi mở file gốc thì giá trị ở ô K6 là 200011 thì sau khi lưu file, file đc lưu có giá trị 200011. Sau này khi mở file gốc tăng giá trị 200012 thì file đã lưu đó vẫn có giá trị 200011 và không chạy macro tăng giá trị tự động.
Cảm ơn anh, em cũng đã thử code của anh, nhưng sau khi lưu file mới thành công thì nó lại tiếp tục chạy code thêm một lần nữa và yêu cầu nhập tên file cần lưu.
Biến EndR là biến lưu lại giá trị của file gốc. Trong file gốc em có một macro viết cho ô K6 giá trị tăng tự động sau mỗi lần mở file, nhưng khi lưu sang một file mới em muốn giữ nguyên các giá trị đó ở file đã lưu, còn file gốc thì vẫn chạy macro tăng giá trị tự động.
Ví dụ. Sau khi mở file gốc thì giá trị ở ô K6 là 200011 thì sau khi lưu file, file đc lưu có giá trị 200011. Sau này khi mở file gốc tăng giá trị 200012 thì file đã lưu đó vẫn có giá trị 200011 và không chạy macro tăng giá trị tự động.
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.
3. Về trình bầy vấn đề.
Muốn người khác giúp mình thì hãy giúp họ hiểu mình. Hãy nhớ là ý đồ của mình thì chỉ nằm trong đầu mình mà thôi. Nếu muốn nó cũng nằm trong đầu ngườii khác thì hãy miêu tả vấn đề từng bước. Sau đây là một ví dụ về miêu tả:
"Em có 1 tập tin mà trên sheet QUOTESHEET tại ô K6 có giá trị mà mỗi lần mở file thì macro thay đổi giá triị đó. Ô K6 chỉ được thay đổi 1 lần khi mở file. Sau khi mở file em có thể thay đổi nhiều thứ hoặc không nhưng nếu em đóng file bằng cách nhấn vào nút "X" thì macro LuuFileMoi được thực hiện. Macro này có nhiệm vụ lưu file với tên mới."
Với cách mô tả như trên thì do "nhưng nếu em đóng file bằng cách nhấn vào nút "X" thì macro LuuFileMoi được thực hiện" nên rõ ràng là LuuFileMoi ta "bỏ" vào Workbook_BeforeClose.
Mã:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
LuuFileMoi
End Sub
Sub LuuFileMoi()
Dim FName As String
With ThisWorkbook
.Save ' nếu tất cả các thay đổi muốn lưu lại
FName = InputBox("New File Name:")
.SaveAs Filename:=FName
End With
End Sub
Nếu nhu cầu của bạn khác thì hãy viết rõ ra.
Trong quan hệ giữa người với người việc diễn đạt ý nghĩ, làm sao cho người khác hiểu mình là rất quan trọng. Cứ cái kiểu: "giúp tôi với, đau, đau quá" thì ai giúp được? Nếu là "đau" do bị cô bạn gái đá thì nói ra để người ta còn giới thiệu cô khác còn "nóng bỏng" hơn. Nếu đau ruột thừa thì nói ra ngay chứ cứ "đau đau" thì rồi đến lúc "muộn rồi" mà người khác vẫn chưa hiểu được là đau gì.
Cảm ơn sự đóng góp ý kiến chân thành của siwtom. Lời văn của em diễn đạt lủng củng quá khiến mọi người khó hiểu, lần sau em sẽ cố gắng hơn.
Vì file excel của công ty là file đặt hàng liên quan nhiều file tính đơn giá của sếp nên em không dám đưa nguyên file lên cho mọi người cùng xem. Em chỉ có thể chụp hình như thế này thôi. File mà em đang làm trên đó là như thế này ạ.
Tại ô K6 em có viết đoạn code cho tăng giá trị ở module12 như sau: Sub Count() Sheets("QUOTESHEET").Range("K6").Value = Sheets("QUOTESHEET").Range("K6").Value + 1 End Sub
Và em muốn sau mỗi lần mở file ô K6 tự động tăng giá trị lên. Private Sub Workbook_Open() Call Count ThisWorkbook.Save
End sub
Với đoạn code trên của siwtom thì em đã chạy được và lưu ra một file mới. Anh chị cho em hỏi thêm một tí nữa nhé. Trong file mới lưu sau khi kích hoạt nút enable macro thì ô K6 tiếp tục tăng giá trị lên, làm thế nào để K6 không tăng giá trị lên mà vẫn giữ nguyên giá trị cũ ạ. Có nghĩa là làm thế nào để nó không chạy cái macro tăng giá trị sau mỗi lần mở file đó ạ.
Để không tăng giá trị lên nữa thì em đã viết một macro xóa hết code macro trong thisworkbook rồi ạ.
Trong cái khung bảo nhập tên file cần lưu có 2 button OK và CANCEL, Nếu bấm OK thì nó lưu file, còn bấm CANCEL thì nó hiển thị ra cái thông báo như thế này
Làm sao để nó không hiển thị thông báo như thế này nữa ạ, có thể khi nhấn CANCEl thì ở lại file mình đang làm. Nó làm cho người dùng cảm thấy khó chịu lắm ạ. Nhờ anh chị chỉ giáo giúp em.
Để không tăng giá trị lên nữa thì em đã viết một macro xóa hết code macro trong thisworkbook rồi ạ.
Trong cái khung bảo nhập tên file cần lưu có 2 button OK và CANCEL, Nếu bấm OK thì nó lưu file, còn bấm CANCEL thì nó hiển thị ra cái thông báo như thế này
Làm sao để nó không hiển thị thông báo như thế này nữa ạ, có thể khi nhấn CANCEl thì ở lại file mình đang làm. Nó làm cho người dùng cảm thấy khó chịu lắm ạ. Nhờ anh chị chỉ giáo giúp em.
Bạn ơi, từ đầu tới giờ tôi thấy code của bạn được người trả lời đoán già đoán non, sao bạn không gửi cái file đó lên cho người ta dễ hướng dẫn cho bạn mà bạn toàn gửi hình lên làm sao bắt bệnh qua hình được? Máy báo lỗi này, nhưng làm ra mới thấy không phải lỗi đó. Tốt nhất bạn gửi file lên đi.
Có thể có 2 lỗi xảy ra với file của bạn. Lỗi dễ thấy nhất là ở chỗ này:
Lỗi thứ 1:
Mã:
Sub LuuFileMoi()
Dim FName As String
With ThisWorkbook
.Save
FName = InputBox("New File Name:")
.SaveAs Filename:=FName
[COLOR=#ff0000][B] .xoa_thisworkbookcode[/B][/COLOR]
End With
End Sub
Bạn đặt trước đó là dấu chấm (.) bạn phải xóa dấu chấm đó.
Ngoài ra, Lỗi tiềm ẩn khác ở thủ tục này là khi InputBox hiện lên, nếu File name có những ký tự trái với quy ước đặt tên file như [, ], ?, / ... thì sẽ phát sinh thêm lỗi.
Lỗi thứ 2:
Có thể xảy ra là khi dùng thủ tục Xóa Macro. Với thủ tục này, nếu ta cài đặt trong Macro Security, tại mục Trusted Publishers, nếu check vào Trust access to Visual Basic Project thì không xảy ra lỗi, ngược lại sẽ bị lỗi phát sinh.
Có một vấn đề như thế này nữa ạ. Khi nhập vào tên file cần lưu và nhấn button OK nó sẽ tạo ra file mới và xuất hiện thêm một hộp thông báo yêu cầu Lưu file hay không lưu, nếu lưu file thì có file mới được tạo ra và thực hiện macro của em viết đó là file mới không tăng giá trị lên ở ô E2. Nhưng nếu nhấn Cancel thì nó cũng tạo ra file mới nhưng y chang file gốc, đó là giá trị ở ô E2 tiếp tục tăng. Có cách nào giải quyết vấn đề này không ạ?
Cái File của bạn tôi không biết dùng vào mục đích gì, trước tiên khi can thiệp vào việc xóa, chỉnh sửa macro, bắt buộc bạn phải vào cài đặt trước phần này: Tool > Macro Security, tại tab Trusted Publishers, check vào Trust access to Visual Basic Project
Riêng thủ tục của bạn cần sửa lại như sau:
PHP:
Sub LuuFileMoi()
Dim FName As String
With ThisWorkbook
.Save
LamLai:
FName = InputBox("New File Name:")
If FName = "" Then
LamLaiNua:
MsgBox "Ten File khong hop le!" & Chr(13) & "Ban phai dat ten File lai!"
GoTo LamLai
End If
On Error GoTo LamLaiNua
Xoa_ThisworkbookCode
.SaveAs Filename:=FName
End With
End Sub
Dễ thôi, trước khi thực hiện thì hỏi trước có lưu thành file mới hay không rồi tùy theo Yes hay No mà thực hiện thôi.
PHP:
Sub LuuFileMoi()
Dim FName As String, Msg As Long
With ThisWorkbook
.Save
Msg = MsgBox("Ban co muon save thanh file moi khong?", vbQuestion + vbYesNo, "Thông báo")
If Msg = vbNo Then Exit Sub
LamLai:
FName = InputBox("New File Name:")
If FName = "" Then
LamLaiNua:
MsgBox "Ten File khong hop le!" & Chr(13) & "Ban phai dat ten File lai!"
GoTo LamLai
End If
On Error GoTo LamLaiNua
Xoa_ThisworkbookCode
.SaveAs Filename:=FName
End With
End Sub
Đâ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.