Nhờ sửa code mỗi lần sao lưu có thể đặt được tên mới

Liên hệ QC

vudinhgiao

Thành viên mới
Tham gia
31/7/16
Bài viết
47
Được thích
10
Em có file Book1 gắn Maccro sao lưu sheet ML thành 1 file độc lập, lưu cùng vị trí chứa file gốc. Tuy nhiên mỗi lần sao lưu do trung tên ML nên bị lưu đè nên file cũ. Các bác sửa giúp em để mỗi lần sao lưu có thể đặt được tên mới với ạ, đồng thời loại bỏ luân công thức chỉ lấy giá trị thì càng tuyệt ạ. em cảm ơn
 

File đính kèm

  • Book1.xlsm
    13.8 KB · Đọc: 12
Em có file Book1 gắn Maccro sao lưu sheet ML thành 1 file độc lập, lưu cùng vị trí chứa file gốc. Tuy nhiên mỗi lần sao lưu do trung tên ML nên bị lưu đè nên file cũ. Các bác sửa giúp em để mỗi lần sao lưu có thể đặt được tên mới với ạ, đồng thời loại bỏ luân công thức chỉ lấy giá trị thì càng tuyệt ạ. em cảm ơn
Mã:
Sub abc()
  Dim FSo As Object, i&
  Set FSo = CreateObject("Scripting.FileSystemObject")
  With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
    Sheets("ML").Copy
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
    If FSo.FileExists(ThisWorkbook.Path & "\ML.xlsx") = False Then
      ActiveWorkbook.Close True, ThisWorkbook.Path & "\ML"
    Else
      For i = 2 To 1000
        If FSo.FileExists(ThisWorkbook.Path & "\ML" & i & ".xlsx") = False Then
          ActiveWorkbook.Close True, ThisWorkbook.Path & "\ML" & i
          Exit For
        End If
      Next i
    End If
    .DisplayAlerts = True
    .ScreenUpdating = True
  End With
  Set FSo = Nothing
End Sub
 
Upvote 0
Mã:
Sub Macro2()
With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
            Sheets("ML").Copy
            ActiveWorkbook.Close True, ThisWorkbook.Path & "\ML" & Format(Now, "yyyy-mm-dd-hh-mm-ss")
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
End Sub
 
Upvote 0
Mã:
Sub abc()
  Dim FSo As Object, i&
  Set FSo = CreateObject("Scripting.FileSystemObject")
  With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
    Sheets("ML").Copy
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
    If FSo.FileExists(ThisWorkbook.Path & "\ML.xlsx") = False Then
      ActiveWorkbook.Close True, ThisWorkbook.Path & "\ML"
    Else
      For i = 2 To 1000
        If FSo.FileExists(ThisWorkbook.Path & "\ML" & i & ".xlsx") = False Then
          ActiveWorkbook.Close True, ThisWorkbook.Path & "\ML" & i
          Exit For
        End If
      Next i
    End If
    .DisplayAlerts = True
    .ScreenUpdating = True
  End With
  Set FSo = Nothing
End Sub
Thật tuyệt vời. Em cảm ơn thầy nhiều. Chúc thầy sức khỏe, thành công ạ
Bài đã được tự động gộp:

Mã:
Sub Macro2()
With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
            Sheets("ML").Copy
            ActiveWorkbook.Close True, ThisWorkbook.Path & "\ML" & Format(Now, "yyyy-mm-dd-hh-mm-ss")
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
End Sub
Em cảm ơn thầy, chúc thầy sức khỏe, hạnh phúc
 
Upvote 0
Bạn lưu file nên format giống như anh batman1 để hạn chế trùng tên
Lưu tên 1, 2, 3, ... cũng chả sao. Nhưng tùy nhu cầu thôi. Vd. nhìn 1, 2, 3 bạn biết phiên bản nào mới hơn. Nhưng với điều kiện sau một thời gian không xóa bớt rồi sau đó lại lưu tiếp.
Với đề nghị của tôi nếu sheet sau một thời gian được chỉnh sửa rất nhiều và lưu lại thì nhìn vào tên tập tin có thể thấy ngay mà không cần kiểm tra thêm, tập tin là phiên bản của ngày nào, giờ nào. Xóa bớt không ảnh hưởng.
 
Upvote 0
Lưu tên 1, 2, 3, ... cũng chả sao. Nhưng tùy nhu cầu thôi. Vd. nhìn 1, 2, 3 bạn biết phiên bản nào mới hơn. Nhưng với điều kiện sau một thời gian không xóa bớt rồi sau đó lại lưu tiếp.
Nếu sheet sau một thời gian được chỉnh sửa rất nhiều và lưu lại thì nhìn vào tên tập tin có thể thấy ngay mà không cần kiểm tra thêm, tập tin là phiên bản của ngày nào, giờ nào. Xóa bớt không ảnh hưởng.
Tùy mục đích của mỗi người anh, hồi xưa em cũng hay save theo 1,2,3 xóa file tới lui lúc save dễ lỗi trùng tên file, format ngày giờ cho lẹ hihi
 
Upvote 0
Cách của thầy nào cũng hay cả, tùy mục đích sử dụng của từng người ạ. lưu 1, 2, 3 gọn, dễ nhìn, lưu ngày tháng thì khi lục lại các file đã lưu cung dễ thấy. Nối chung là em cảm ơn các thầy ạ
 
Upvote 0
Tiễn điểu kinh cung?
Hổng biết có mặc cảm hay khong. Sao bay giờ nghe cái câu "chúc thầy..." thấy hơi ơn ớn. :p:p

Tôi chỉ thấy ơn ớn thôi chứ không cố ý nói gì thớt hết nghen.
 
Upvote 0
Người giúp mình xong việc, gửi 1 lời cảm ơn lẽ nào không được ?
Cái người mà tôi sợ có tật gõ sai lỗi chính tả một vài chỗ. Bạn chỉ cần gõ tiếng Việt cho đúng chính tả thì không ai nhận lầm cả.

Lưu tên 1, 2, 3, ... cũng chả sao. Nhưng tùy nhu cầu thôi. Vd. nhìn 1, 2, 3 bạn biết phiên bản nào mới hơn. ...
Chưa chắc bác ơi. Nếu tôi muốn dùng phiên bản thì tôi ghi thẳng tên V01, V02...
Tên 1, 2, 3 cũng có thể bị người ta hiểu lầm là phần 1, 2. Tuy rằng nếu tôi dùng thì tôi cũng nói rõ Part1, Part2.

Dùng ngày tháng trong tên file thì có hai cái lợi là:
1. biết chính xác nó ra ngày nào. Tuy date last modifed cũng cho biết nhưng tôi có thể phân biệt được ra một ngày và chỉnh sửa ngày khác.
2. dễ tìm. Tuy Win Explorer cũng cho lọc theo ngày nhưng không nhanh bằng.
 
Upvote 0
Kkk kiến thức của 2 người thì trong diễn đàn này thì khỏi tranh luận chi cho mệt. Thần tượng của tôi đó kkkk quên nói theo tuổi teen Idol chứ
 
Upvote 0
Mã:
Sub Macro2()
With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
            Sheets("ML").Copy
            ActiveWorkbook.Close True, ThisWorkbook.Path & "\ML" & Format(Now, "yyyy-mm-dd-hh-mm-ss")
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
End Sub
Thầy batman1 giúpi thêm chút ạ. em mò mãi không được. Cụ thể là phải thêm hay sửa code của thầy như thế nào để khi sheet ML đang ẩn mà ta vẫn lưu và in được ạ.

code in đây ạ:

Private Sub inML_Click()
Sheets("M97").Range("A:H").PrintOut
Sheets("ML").Select
Columns("A:H").Select
ActiveWindow.SmallScroll Down:=24
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
:=True, IgnorePrintAreas:=False
End Sub
 
Upvote 0
Thầy batman1 giúpi thêm chút ạ. em mò mãi không được. Cụ thể là phải thêm hay sửa code của thầy như thế nào để khi sheet ML đang ẩn mà ta vẫn lưu và in được ạ.
Tôi không dùng máy in nên không biết thế nào. Nhưng nếu không in được khi sheet ẩn thì trước tiên hiện sheet, sau khi in xong thì lại ẩn đi. Thế thôi.
Kiểu như
Mã:
Dim currVisible As Long
'    ghi nho trang thai hien tai
    currVisible = ThisWorkbook.Worksheets("ML").Visible
'    hien sheet
    ThisWorkbook.Worksheets("ML").Visible = xlSheetVisible
'    Lam gi do ...
'    tra lai trang thai cu
    ThisWorkbook.Worksheets("ML").Visible = currVisible
 
Upvote 0
Mã:
Sub Macro2()
With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
            Sheets("ML").Copy
            ActiveWorkbook.Close True, ThisWorkbook.Path & "\ML" & Format(Now, "yyyy-mm-dd-hh-mm-ss")
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With
End Sub

Thầy cho em hỏi trường hợp em muốn xuất nguyên file đó thì em đã xóa đoạn code Sheets("ML").Copy sao nó vẫn không được hả thầy
 
Upvote 0
Thầy cho em hỏi trường hợp em muốn xuất nguyên file đó thì em đã xóa đoạn code Sheets("ML").Copy sao nó vẫn không được hả thầy
Xuất nguyên file đó là gì? Là lưu lại với tên khác? Thì save as thôi chứ cần gì code?

Không được? Tôi không nói chuyện với những ai nói "không được". Nó chả nói về cái gì cụ thể.

Không được là:
- lực bất tòng tâm, bên phải bảo bên trái không nghe?
- mạnh nhưng cầy không đúng chỗ?
- mạnh, đúng chỗ, nhưng kỹ thuật sai?

Hãy tập nói rõ ràng.

Sau khi bỏ " Sheets("ML").Copy" và chạy code có thấy tập tin nào có tên "ML..."? Có nhưng không như mong đợi? Vậy mong đợi cụ thể như thế nào? Không nói ra thì bó tay toàn tập, không ai hiểu được.

Tôi dừng ở đây.
 
Upvote 0
Web KT
Back
Top Bottom