Giúp code save As từ XSLB thành xlsm

Liên hệ QC

minhtuan55

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
23/3/16
Bài viết
705
Được thích
52
Em có 1 File tên là Chamcong.XLSB em muốn sau khi em làm việc xong, và em Đóng file này thì nó tự lưu save as thành 1 file dự phòng Chamcong.Xlsm tại 1 thư mục chỉ định ( Nghỉa là khi em thoát File Chamcong.XLSB thì nó âm thầm Save as thành FIle Chamcong.Xlsm và nó đóng luôn 2 file luôn , rồi em tắt máy tính em đi về )
Và mỗi lần SAve as thì Xóa File cũ đã lưu trước đó đi, và chỉ giử 1 file duy nhất cho lần Đóng gần đây nhất . XIn chân thành cảm ơn


Em có dùng Đoạn code này. Save thì được rồi nhưng Mở file lên dự phòng lên không được

Mã:
Sub saveasnew()

    Dim FolderPath As String

    FolderPath = "C:\Users\VU\Desktop\Text Ma vach\" ' DIA CHI LUU

    With CreateObject("Scripting.FileSystemObject")

        If Not .FolderExists(FolderPath) Then .CreateFolder (FolderPath)

         ThisWorkbook.SaveCopyAs FolderPath & "DU LIEU " & Format(Now(), "DD-MM-YYYY") & ".Xlsm"

    End With

End Sub
 
Lần chỉnh sửa cuối:
Em có 1 File tên là Chamcong.XLSB em muốn sau khi em làm việc xong, và em Đóng file này thì nó tự lưu save as thành 1 file dự phòng Chamcong.Xlsm tại 1 thư mục chỉ định ( Nghỉa là khi em thoát File Chamcong.XLSB thì nó âm thầm Save as thành FIle Chamcong.Xlsm và nó đóng luôn 2 file luôn , rồi em tắt máy tính em đi về )
Và mỗi lần SAve as thì Xóa File cũ đã lưu trước đó đi, và chỉ giử 1 file duy nhất cho lần Đóng gần đây nhất . XIn chân thành cảm ơn


Em có dùng Đoạn code này. Save thì được rồi nhưng Mở file lên dự phòng lên không được

Mã:
Sub saveasnew()

    Dim FolderPath As String

    FolderPath = "C:\Users\VU\Desktop\Text Ma vach\" ' DIA CHI LUU

    With CreateObject("Scripting.FileSystemObject")

        If Not .FolderExists(FolderPath) Then .CreateFolder (FolderPath)

         ThisWorkbook.SaveCopyAs FolderPath & "DU LIEU " & Format(Now(), "DD-MM-YYYY") & ".Xlsm"

    End With

End Sub
Cho mình hỏi tại sao không giữ nguyên .xlsb mà phải chuyển sang xlsm vậy?
 
Upvote 0
Cho mình hỏi tại sao không giữ nguyên .xlsb mà phải chuyển sang xlsm vậy?
xlsm lúc save lại ít bị Excel nó hỏi 'warning' hơn.
Kinh nghiệm vậy - không có gì chứng minh cả. Đừng hỏi thêm tại sao.

(nhưng hình như mục đích của thớt nó khác. Bạn có để ý thấy từ "âm thầm" hôn?)
 
Upvote 0
Em có 1 File tên là Chamcong.XLSB em muốn sau khi em làm việc xong, và em Đóng file này thì nó tự lưu save as thành 1 file dự phòng Chamcong.Xlsm tại 1 thư mục chỉ định ( Nghỉa là khi em thoát File Chamcong.XLSB thì nó âm thầm Save as thành FIle Chamcong.Xlsm và nó đóng luôn 2 file luôn , rồi em tắt máy tính em đi về )
Và mỗi lần SAve as thì Xóa File cũ đã lưu trước đó đi, và chỉ giử 1 file duy nhất cho lần Đóng gần đây nhất . XIn chân thành cảm ơn


Em có dùng Đoạn code này. Save thì được rồi nhưng Mở file lên dự phòng lên không được

Mã:
Sub saveasnew()

    Dim FolderPath As String

    FolderPath = "C:\Users\VU\Desktop\Text Ma vach\" ' DIA CHI LUU

    With CreateObject("Scripting.FileSystemObject")

        If Not .FolderExists(FolderPath) Then .CreateFolder (FolderPath)

         ThisWorkbook.SaveCopyAs FolderPath & "DU LIEU " & Format(Now(), "DD-MM-YYYY") & ".Xlsm"

    End With

End Sub
Mã:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
If ThisWorkbook.Saved = False Then
    If MsgBox("Save file?", vbInformation + vbYesNo) = vbYes Then ThisWorkbook.Save
End If
Const Filename = "C:\Users\Thanh\Desktop\ChamCong.xlsx"
On Error Resume Next
Kill (Filename)
ThisWorkbook.SaveAs Filename:=Filename, FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
End Sub
Bạn thử code này xem
 
Upvote 0
Tại vì cái đó em để trong thư mục Google Driver điện thoại mới xem được anh
Thử vầy xem nha. Lưu ý nên định dạng ngày tháng kiểu bên dưới ít rắc rối hơn

Mã:
Sub saveasnew()

Dim FolderPath as string

Dim Source As string

Dim NewFile as string



FolderPath = "C:\Users\VU\Desktop\Text Ma vach\"

Source= ThisWorkbook.FullName

NewFile = FolderPath & "DuLieu " & day(date)&"_"&Month(date)&"_"&year(date) &".xls"

With CreateObject("Scripting.FileSystemObject")

     If Not .FolderExists(FolderPath) Then .CreateFolder (FolderPath)

     .CopyFile Source, NewFile

End With

End Sub
 
Upvote 0
Thử vầy xem nha. Lưu ý nên định dạng ngày tháng kiểu bên dưới ít rắc rối hơn

Mã:
Sub saveasnew()

Dim FolderPath as string

Dim Source As string

Dim NewFile as string



FolderPath = "C:\Users\VU\Desktop\Text Ma vach\"

Source= ThisWorkbook.FullName

NewFile = FolderPath & "DuLieu " & day(date)&"_"&Month(date)&"_"&year(date) &".xls"

With CreateObject("Scripting.FileSystemObject")

     If Not .FolderExists(FolderPath) Then .CreateFolder (FolderPath)

     .CopyFile Source, NewFile

End With

End Sub

Dạ em cảm ơn anh. Em đã test Code của anh GHi vào đường dẫn là ok rồi. Nhưng chỉ được 1 lần đầu tiền. Các lần sau khi em thay đổi dữ liệu file làm việc thì em tắt nó không cập nhật vào đường dẫn . Nói 1 cách ngắn gọn là khi tắt nó Xóa FIle đã ghi trước đó đi rồi save as lại để dữ liệu luôn luôn 2 file bằng nhau
 
Upvote 0
Dạ em cảm ơn anh. Em đã test Code của anh GHi vào đường dẫn là ok rồi. Nhưng chỉ được 1 lần đầu tiền. Các lần sau khi em thay đổi dữ liệu file làm việc thì em tắt nó không cập nhật vào đường dẫn . Nói 1 cách ngắn gọn là khi tắt nó Xóa FIle đã ghi trước đó đi rồi save as lại để dữ liệu luôn luôn 2 file bằng nhau
1. Bạn có sử dụng sự kiện After Close chưa?
2. Về nguyên tắc thì code trên sẽ lưu đè lên file trước nếu trùng tên. Nếu file đang mở hay thuộc tính ở dạng ready only thì code báo lỗi.
 
Upvote 0
1. Bạn có sử dụng sự kiện After Close chưa?
2. Về nguyên tắc thì code trên sẽ lưu đè lên file trước nếu trùng tên. Nếu file đang mở hay thuộc tính ở dạng ready only thì code báo lỗi.
Dạ em đã Test kỷ rồi anh. nó chỉ save 1 lần các lần sau em thay đổi dữ liệu nó không save as đè lên nữa

Mã:
Sub saveasnew()

Dim FolderPath As String

Dim Source As String

Dim NewFile As String



FolderPath = "C:\Users\Administrator\Desktop\thu nghiem\"

Source = ThisWorkbook.FullName

NewFile = FolderPath & "DuLieu " & Day(Date) & "_" & Month(Date) & "_" & Year(Date) & ".xls"

With CreateObject("Scripting.FileSystemObject")

     If Not .FolderExists(FolderPath) Then .CreateFolder (FolderPath)

     .CopyFile Source, NewFile

End With

End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
saveasnew
End Sub

Bây giờ a tải FIle về anh đánh vài ký tự vào ô A1 đi rồi anh Save lại rồi a thoát ra và kiểm tra đường dẫn thì biết. Chứ em test rất kỷ thấy nó không có đè lên
 

File đính kèm

  • test .xlsb
    15.7 KB · Đọc: 6
Upvote 0
Không cần phải test đâu. Code này căn bản là không có gì sai đâu.
Anh em nào có thời gian trả lời giúp bạn này nhé.
 
Upvote 0
Không cần phải test đâu. Code này căn bản là không có gì sai đâu.
Anh em nào có thời gian trả lời giúp bạn này nhé.

dạ anh kiểm tra lại giúp, Chứ em đã test thấy không đúng nên Báo lại cho anh biết. Anh làm xong anh có test chưa hay là chỉ đọc rồi trả lời theo ý của mình. Chứ em test rồi thấy chạy không đúng
 
Upvote 0
Lưu file trước rồi thoát thì có đè. Còn không lưu file trước rồi thoát, khi có hộp thoại hỏi lưu file nhấn yes mà nhiều khi nó không đè thật
Không hiểu là sao nhỉ?
 
Upvote 0
Em có 1 File tên là Chamcong.XLSB em muốn sau khi em làm việc xong, và em Đóng file này thì nó tự lưu save as thành 1 file dự phòng Chamcong.Xlsm tại 1 thư mục chỉ định ( Nghỉa là khi em thoát File Chamcong.XLSB thì nó âm thầm Save as thành FIle Chamcong.Xlsm và nó đóng luôn 2 file luôn , rồi em tắt máy tính em đi về )
Và mỗi lần SAve as thì Xóa File cũ đã lưu trước đó đi, và chỉ giử 1 file duy nhất cho lần Đóng gần đây nhất . XIn chân thành cảm ơn


Em có dùng Đoạn code này. Save thì được rồi nhưng Mở file lên dự phòng lên không được

Mã:
Sub saveasnew()

    Dim FolderPath As String

    FolderPath = "C:\Users\VU\Desktop\Text Ma vach\" ' DIA CHI LUU

    With CreateObject("Scripting.FileSystemObject")

        If Not .FolderExists(FolderPath) Then .CreateFolder (FolderPath)

         ThisWorkbook.SaveCopyAs FolderPath & "DU LIEU " & Format(Now(), "DD-MM-YYYY") & ".Xlsm"

    End With

End Sub
Thế sao bạn không xài toàn bộ là XLSM hết cho tiện? Khi ấy thì cần gì code?
 
Upvote 0
Lưu file trước rồi thoát thì có đè. Còn không lưu file trước rồi thoát, khi có hộp thoại hỏi lưu file nhấn yes mà nhiều khi nó không đè thật
Không hiểu là sao nhỉ?
vấn đề của bạn tôi thử trên Office 2016 là vầy

1/ code Anh @quanghai1969 viết cơ bản như vậy là ok nhưng khi file bạn xài code là File *.xlsb mà sử dụng FileSystemObject copy lưu đè sang file *.xls thì chạy nó vẫn OK nhưng khi mở File *.xls lên nó báo lỗi Format ... (hình kèm theo)

2/ tại sao bạn không lưu thành 1 File *.xlsb như file gốc đi cho nó không báo lỗi Format

3/ Chép thêm dòng sau vào code anh hải viết nữa là hết thắc mắc nhe ... nên sửa lại thành *.xlsb ... còn nếu *.xls là mở file lưu dự phòng lên báo lỗi Format ... khi đó bạn phải chọn Yes

ActiveWorkbook.Save ''' No to tra ba day nha

Mã:
Sub saveasnew()
Dim FolderPath As String
Dim Source As String
Dim NewFile As String

ActiveWorkbook.Save ''' No to tra ba day nha
FolderPath = "C:\Users\Administrator\Desktop\thu nghiem\"

Source = ThisWorkbook.FullName
NewFile = FolderPath & "DuLieu " & Day(Date) & "_" & Month(Date) & "_" & Year(Date) & ".xls"
With CreateObject("Scripting.FileSystemObject")
     If Not .FolderExists(FolderPath) Then .CreateFolder (FolderPath)
     .CopyFile Source, NewFile
End With
End Sub

Capture.PNG
 
Upvote 0
vấn đề của bạn tôi thử trên Office 2016 là vầy

1/ code Anh @quanghai1969 viết cơ bản như vậy là ok nhưng khi file bạn xài code là File *.xlsb mà sử dụng FileSystemObject copy lưu đè sang file *.xls thì chạy nó vẫn OK nhưng khi mở File *.xls lên nó báo lỗi Format ... (hình kèm theo)

2/ tại sao bạn không lưu thành 1 File *.xlsb như file gốc đi cho nó không báo lỗi Format

3/ Chép thêm dòng sau vào code anh hải viết nữa là hết thắc mắc nhe ... nên sửa lại thành *.xlsb ... còn nếu *.xls là mở file lưu dự phòng lên báo lỗi Format ... khi đó bạn phải chọn Yes

ActiveWorkbook.Save ''' No to tra ba day nha

Mã:
Sub saveasnew()
Dim FolderPath As String
Dim Source As String
Dim NewFile As String

ActiveWorkbook.Save ''' No to tra ba day nha
FolderPath = "C:\Users\Administrator\Desktop\thu nghiem\"

Source = ThisWorkbook.FullName
NewFile = FolderPath & "DuLieu " & Day(Date) & "_" & Month(Date) & "_" & Year(Date) & ".xls"
With CreateObject("Scripting.FileSystemObject")
     If Not .FolderExists(FolderPath) Then .CreateFolder (FolderPath)
     .CopyFile Source, NewFile
End With
End Sub

View attachment 194414
cho mình hỏi thêm chút. Sao không save rồi chuyển kiểu file cho đỡ lỗi fomat vậy?
 
Upvote 0
dạ anh kiểm tra lại giúp, Chứ em đã test thấy không đúng nên Báo lại cho anh biết. Anh làm xong anh có test chưa hay là chỉ đọc rồi trả lời theo ý của mình. Chứ em test rồi thấy chạy không đúng
Mình đã nói code không sai tức là code không sai, có điều mình quá chủ quan không kiểm tra file của bạn.
Bạn nhìn vào chứ Workbook nhé, không phải General. Bạn cũng nên đưa về chung 1 format giống nhau, có thể là xls cũng ok
1524625409079.png

1524625494667.png
 
Upvote 0
Mình đã nói code không sai tức là code không sai, có điều mình quá chủ quan không kiểm tra file của bạn.
Bạn nhìn vào chứ Workbook nhé, không phải General. Bạn cũng nên đưa về chung 1 format giống nhau, có thể là xls cũng ok
View attachment 194426

View attachment 194427
Nếu anh phát sinh dữ liệu mà ko lưu trước khi chạy code thì nó cũng không copy lưu đè lên file cũ đó
 
Upvote 0
Nếu anh phát sinh dữ liệu mà ko lưu trước khi chạy code thì nó cũng không copy lưu đè lên file cũ đó
Nếu ai thường đọc code của mình sẽ biết tính mình không cẩn thận như những anh em khác. Cứ viết trong phạm vi yêu cầu, còn phát sinh thì tính tiếp.
Trường hợp này nên thêm câu lệnh ThisWorkBook.Save vào đâu đó trước câu lệnh CopyFile là được rồi
 
Upvote 0
Nếu ai thường đọc code của mình sẽ biết tính mình không cẩn thận như những anh em khác. Cứ viết trong phạm vi yêu cầu, còn phát sinh thì tính tiếp.
Trường hợp này nên thêm câu lệnh ThisWorkBook.Save vào đâu đó trước câu lệnh CopyFile là được rồi
thiếu cái đó nên họ la làng -0-0-0-
 
Upvote 0
Nếu ai thường đọc code của mình sẽ biết tính mình không cẩn thận như những anh em khác. Cứ viết trong phạm vi yêu cầu, còn phát sinh thì tính tiếp.
Trường hợp này nên thêm câu lệnh ThisWorkBook.Save vào đâu đó trước câu lệnh CopyFile là được rồi
Nếu ai thường đọc bài của chủ thớt này sẽ biết tính người này rất khắt khe không như những anh chị em khác. Bắt buộc phải viết code chạy đúng 100%, các phát sinh người viết phải tự đoán ra.
Trường hợp này nên lẳng lặng sửa code là được rồi.
 
Upvote 0
Web KT
Back
Top Bottom