Các thầy cho e hỏi về đoanj code để saveas sheet hiện hành với ah. Cụ thể e có 1 file có khoảng 10 sheet, giờ e muốn tạo 1 code saveas để khi chạy code này thì sẽ saveas file dưới dạng .xls nhưng chỉ save sheet hiện hành thui.E có viết code nhưng nó save cả file tìm mãi ma không ra.mong các thầy giúp
Mình cũng hay lưu sheet hiện hành để gửi báo cáo riêng 1 sheet. Code mình viết bằng Record rồi thực hiện thôi (tạo một workbook mới > move copy sheet hiện hành qua workbook mới > lưu file .xls > close workbook.
Mã:
Sub ChonNoiLuuBaoCao()
Dim MyFolder As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
MyFolder = .SelectedItems(1)
Call LuuBaoCao
Else
Exit Sub
End If
End With
End Sub
Sub LuuBaoCao()
On Error Resume Next
Application.ScreenUpdating = False
Dim x As String, a As String, b As String
x = ThisWorkbook.Name
b = ActiveSheet.Name 'Ten sheet hien hanh
Workbooks.Add 'Tao moi 01 workbook
a = b & " " & Day(Now()) & "-" & Month(Now()) & "-" & Right(Year(Now()), 2) 'Ten sheet + ngay thang nam
y = a & ".xls" 'Ten file khi save as type *xls
[B][COLOR=#ff0000]ActiveWorkbook.SaveAs Filename:=y, FileFormat:= _
xlExcel8, CreateBackup:=False 'save as type *xls[/COLOR][/B]
Windows(x).Activate
With ActiveSheet
.Select
.Copy Before:=Workbooks(y).Sheets(1)
End With
With Workbooks(y)
.Activate
.Save
.Close
End With
MsgBox "SaveAs file thanh cong", vbInformation, "Thong Bao"
Application.ScreenUpdating = True
End Sub
anh NDU ơi góp ý giúp em nếu bỏ qua thông báo replace file khi trùng tên cũ thì em nên viết vào code này thêm dòng lệnh nào nữa vậy anh.
Ah thầy ơi ý e là thế này.
Ví dụ file chính có các macro thì khi saveas file saveas vẫn phải có các macro đó. Không biết có được không ah mong thầy giúp
Tôi không dùng Excel 2003 nên không biết đâu
Vậy có vấn đề gì, bạn cứ quay phim quá trình bạn thao tác rồi đưa lên đây nhé
Ngoài ra, nếu nghi ngờ file này bị lỗi, bạn có thể thí nghiệm bằng 1 file mới khác xem quá trình SaveSheet có trục trặc gì không?
Tôi không dùng Excel 2003 nên không biết đâu
Vậy có vấn đề gì, bạn cứ quay phim quá trình bạn thao tác rồi đưa lên đây nhé
Ngoài ra, nếu nghi ngờ file này bị lỗi, bạn có thể thí nghiệm bằng 1 file mới khác xem quá trình SaveSheet có trục trặc gì không?
Cám ơn anh nhiều , mình có làm rồi nhưng xuất ra là thư mục rỗng, mình cũng biết tại sao nữa. Anh xem code này nhé
Sub SaveFile()
Dim Ans As Integer
Dim Filt As String
Ans = MsgBox("Confirm you want to save this File." _
& (Chr(13) & Chr(10)) & (Chr(13) & Chr(10)) & _
"File will save as: Backup - (SheetNumber).xls in current directory", vbYesNo)
If Ans = vbNo Then Exit Sub
Application.DisplayAlerts = False
ThisWorkbook.SaveCopyAs Filename:=ActiveWorkbook.Path & "\Backup - " & ThisWorkbook.Name
Application.DisplayAlerts = True
ThisWorkbook.Close
End Sub
code này lưu (backup) nguyên cả 1 file trong cùng 1 thư mục.
Nhưng mình chỉ cần save sheet hiện hành thành 1 file riêng.
file đính kèm View attachment backup.xls
Xin lỗi thầy ndu vì e hỏi lại chủ đề này.
E hiện tại đang dùng 2 addin liên quan đến sheet.
1 cái là có phím tắt ctrl shift c để mở sheet hiện hành ra 1 file mới.
Còn 1 cái của thầy là lưu luôn ra 1 file riêng mà ko mở file đấy.
Có cách nào để chỉ dùng 1 addin của thầy mà có lựa chọn là lưu file hoặc lưu và mở file ko ạ?
Function SaveSheet(ByVal Sheets2Save As Object, ByVal FileName2Save As String, _
ByVal FileFormat As XlFileFormat, ByVal OverWrite As Boolean) As String
Dim bChk As Boolean
Dim Folder2Save As String, sComm As String, Ext As String, ErrMsg As String
Dim fso As Object, oWsh As Object, wkb As Workbook
On Error GoTo ExitFunc
Set fso = CreateObject("Scripting.FileSystemObject")
bChk = fso.FileExists(FileName2Save)
If (bChk = False) Or OverWrite Then
Folder2Save = Mid(FileName2Save, 1, InStrRev(FileName2Save, "\") - 1)
If fso.FolderExists(Folder2Save) = False Then
Set oWsh = CreateObject("Wscript.Shell")
sComm = "MkDir " & """" & Folder2Save & """"
oWsh.Run "cmd /u /c " & sComm, 0, True
End If
If fso.FolderExists(Folder2Save) Then
Ext = fso.GetExtensionName(FileName2Save)
If Len(Ext) Then FileName2Save = Left(FileName2Save, Len(FileName2Save) - Len(Ext) - 1)
If (TypeName(Sheets2Save) = "Sheets") Or (TypeName(Sheets2Save) = "Worksheet") Then
Application.DisplayAlerts = False
Sheets2Save.Copy
Set wkb = ActiveWorkbook
With wkb
.SaveAs FileName2Save, FileFormat
SaveSheet = .FullName
.Close (True)
End With
Application.DisplayAlerts = True
End If
End If
End If
ExitFunc:
ErrMsg = Err.Description
If Err.Number = 1004 Then
If Not wkb Is Nothing Then
If UCase(wkb.Name) <> UCase(Sheets2Save.Parent.Name) Then wkb.Close (False)
End If
MsgBox ErrMsg
End If
Set fso = Nothing: Set oWsh = Nothing
End Function
Mã:
Sub Main()
' XlFileFormat = xlExcel8 <===> File Extension = "xls"
' XlFileFormat = xlOpenXMLWorkbook <===> File Extension = "xlsx"
' XlFileFormat = xlExcel12 <===> File Extension = "xlsb"
' XlFileFormat = xlOpenXMLWorkbookMacroEnabled <===> File Extension = "xlsm"
Dim wks As Object, FileFormat As XlFileFormat
Dim FileName As String, szSaved As String
Application.ScreenUpdating = False
[COLOR=#ff0000]Set wks = ThisWorkbook.Sheets(Array("Sheet1", "Sheet2"))[/COLOR] '>> wks bao gom nhieu sheet
'Set wks = ThisWorkbook.Worksheets("Sheet1") '>> wks là 1 sheet duy nhat
[COLOR=#ff0000] FileName = "D:\ABC\Test.xls"
FileFormat = xlExcel8[/COLOR]
szSaved = SaveSheet(wks, FileName, FileFormat, True)
If Len(szSaved) Then MsgBox "File """ & szSaved & """ have been successfully saved!"
Application.ScreenUpdating = True
End Sub
Hàm SaveSheet bạn không cần quan tâm, chỉ cần biết áp dụng tại sheet Main
Cú pháp hàm: SaveSheet(Sheet cần lưu, Đường dẫn file sẽ lưu, kiểu định dạng file, cho lưu đè hay không?)
Lưu ý:
- Sheet cần lưu (Sheets2Save) có thể là 1 hoặc nhiều sheet
Ví dụ: Set wks = ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) ---> Lưu 2 sheet thành file Set wks = ThisWorkbook.Worksheets("Sheet1") ---> Lưu 1 sheet duy nhất
- Đường dẫn file sẽ lưu (FileName2Save): Thư mục chứa đường dẫn đến file có thể đã tồn tại hoặc chưa. Nếu thư mục lưu file chưa tồn tại thì code sẽ tự động tạo ra nó
- kiểu định dạng file (FileFormat):
- Cho lưu đè (OverWrite): OverWrite = TRUE sẽ cho lưu đè và ngược lại
-------------------
Vậy bạn chỉ cần quan tâm 3 dòng code màu đỏ và khai báo cho đúng là đủ
Anh Tuấn ơi! em cũng đang sử dụng code này của anh. Nếu mà muốn bỏ các công thức (chỉ lây giá trị) trong sheet khi lưu thành file mới thì sửa code thế nào vậy anh.
Anh Tuấn ơi! em cũng đang sử dụng code này của anh. Nếu mà muốn bỏ các công thức (chỉ lây giá trị) trong sheet khi lưu thành file mới thì sửa code thế nào vậy anh.
Function SaveSheet(ByVal Sheets2Save As Object, ByVal FileName2Save As String, _
ByVal FileFormat As XlFileFormat, ByVal OverWrite As Boolean) As String
Dim bChk As Boolean
Dim Folder2Save As String, sComm As String, Ext As String, ErrMsg As String
Dim fso As Object, oWsh As Object, wkb As Workbook
On Error GoTo ExitFunc
Set fso = CreateObject("Scripting.FileSystemObject")
bChk = fso.FileExists(FileName2Save)
If (bChk = False) Or OverWrite Then
Folder2Save = Mid(FileName2Save, 1, InStrRev(FileName2Save, "\") - 1)
If fso.FolderExists(Folder2Save) = False Then
Set oWsh = CreateObject("Wscript.Shell")
sComm = "MkDir " & """" & Folder2Save & """"
oWsh.Run "cmd /u /c " & sComm, 0, True
End If
If fso.FolderExists(Folder2Save) Then
Ext = fso.GetExtensionName(FileName2Save)
If Len(Ext) Then FileName2Save = Left(FileName2Save, Len(FileName2Save) - Len(Ext) - 1)
If (TypeName(Sheets2Save) = "Sheets") Or (TypeName(Sheets2Save) = "Worksheet") Then
Application.DisplayAlerts = False
Sheets2Save.Copy
Set wkb = ActiveWorkbook
With wkb
.SaveAs FileName2Save, FileFormat
SaveSheet = .FullName
.Close (True)
End With
Application.DisplayAlerts = True
End If
End If
End If
ExitFunc:
ErrMsg = Err.Description
If Err.Number = 1004 Then
If Not wkb Is Nothing Then
If UCase(wkb.Name) <> UCase(Sheets2Save.Parent.Name) Then wkb.Close (False)
End If
MsgBox ErrMsg
End If
Set fso = Nothing: Set oWsh = Nothing
End Function
Mã:
Sub Main()
' XlFileFormat = xlExcel8 <===> File Extension = "xls"
' XlFileFormat = xlOpenXMLWorkbook <===> File Extension = "xlsx"
' XlFileFormat = xlExcel12 <===> File Extension = "xlsb"
' XlFileFormat = xlOpenXMLWorkbookMacroEnabled <===> File Extension = "xlsm"
Dim wks As Object, FileFormat As XlFileFormat
Dim FileName As String, szSaved As String
Application.ScreenUpdating = False
[COLOR=#ff0000]Set wks = ThisWorkbook.Sheets(Array("Sheet1", "Sheet2"))[/COLOR] '>> wks bao gom nhieu sheet
'Set wks = ThisWorkbook.Worksheets("Sheet1") '>> wks là 1 sheet duy nhat
[COLOR=#ff0000] FileName = "D:\ABC\Test.xls"
FileFormat = xlExcel8[/COLOR]
szSaved = SaveSheet(wks, FileName, FileFormat, True)
If Len(szSaved) Then MsgBox "File """ & szSaved & """ have been successfully saved!"
Application.ScreenUpdating = True
End Sub
Hàm SaveSheet bạn không cần quan tâm, chỉ cần biết áp dụng tại sheet Main
Cú pháp hàm: SaveSheet(Sheet cần lưu, Đường dẫn file sẽ lưu, kiểu định dạng file, cho lưu đè hay không?)
Lưu ý:
- Sheet cần lưu (Sheets2Save) có thể là 1 hoặc nhiều sheet
Ví dụ: Set wks = ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) ---> Lưu 2 sheet thành file Set wks = ThisWorkbook.Worksheets("Sheet1") ---> Lưu 1 sheet duy nhất
- Đường dẫn file sẽ lưu (FileName2Save): Thư mục chứa đường dẫn đến file có thể đã tồn tại hoặc chưa. Nếu thư mục lưu file chưa tồn tại thì code sẽ tự động tạo ra nó
- kiểu định dạng file (FileFormat):
- Cho lưu đè (OverWrite): OverWrite = TRUE sẽ cho lưu đè và ngược lại
-------------------
Vậy bạn chỉ cần quan tâm 3 dòng code màu đỏ và khai báo cho đúng là đủ
bác NuNu ơi cho em hỏi thêm một chút nếu chỉ muốn copy giá trị có được không bác. Ý em là khi save ra file mới vẫn còn công thức bác ạ. Em cảm ơn bác nhiều nhiều....
Function SaveSheet(ByVal Sheets2Save As Object, ByVal FileName2Save As String, _
ByVal FileFormat As XlFileFormat, ByVal OverWrite As Boolean) As String
Dim bChk As Boolean
Dim Folder2Save As String, sComm As String, Ext As String, ErrMsg As String
Dim fso As Object, oWsh As Object, wkb As Workbook
On Error GoTo ExitFunc
Set fso = CreateObject("Scripting.FileSystemObject")
bChk = fso.FileExists(FileName2Save)
If (bChk = False) Or OverWrite Then
Folder2Save = Mid(FileName2Save, 1, InStrRev(FileName2Save, "\") - 1)
If fso.FolderExists(Folder2Save) = False Then
Set oWsh = CreateObject("Wscript.Shell")
sComm = "MkDir " & """" & Folder2Save & """"
oWsh.Run "cmd /u /c " & sComm, 0, True
End If
If fso.FolderExists(Folder2Save) Then
Ext = fso.GetExtensionName(FileName2Save)
If Len(Ext) Then FileName2Save = Left(FileName2Save, Len(FileName2Save) - Len(Ext) - 1)
If (TypeName(Sheets2Save) = "Sheets") Or (TypeName(Sheets2Save) = "Worksheet") Then
Application.DisplayAlerts = False
Sheets2Save.Copy
Set wkb = ActiveWorkbook
With wkb
.SaveAs FileName2Save, FileFormat
SaveSheet = .FullName
.Close (True)
End With
Application.DisplayAlerts = True
End If
End If
End If
ExitFunc:
ErrMsg = Err.Description
If Err.Number = 1004 Then
If Not wkb Is Nothing Then
If UCase(wkb.Name) <> UCase(Sheets2Save.Parent.Name) Then wkb.Close (False)
End If
MsgBox ErrMsg
End If
Set fso = Nothing: Set oWsh = Nothing
End Function
Mã:
Sub Main()
' XlFileFormat = xlExcel8 <===> File Extension = "xls"
' XlFileFormat = xlOpenXMLWorkbook <===> File Extension = "xlsx"
' XlFileFormat = xlExcel12 <===> File Extension = "xlsb"
' XlFileFormat = xlOpenXMLWorkbookMacroEnabled <===> File Extension = "xlsm"
Dim wks As Object, FileFormat As XlFileFormat
Dim FileName As String, szSaved As String
Application.ScreenUpdating = False
[COLOR=#ff0000]Set wks = ThisWorkbook.Sheets(Array("Sheet1", "Sheet2"))[/COLOR] '>> wks bao gom nhieu sheet
'Set wks = ThisWorkbook.Worksheets("Sheet1") '>> wks là 1 sheet duy nhat
[COLOR=#ff0000] FileName = "D:\ABC\Test.xls"
FileFormat = xlExcel8[/COLOR]
szSaved = SaveSheet(wks, FileName, FileFormat, True)
If Len(szSaved) Then MsgBox "File """ & szSaved & """ have been successfully saved!"
Application.ScreenUpdating = True
End Sub
Hàm SaveSheet bạn không cần quan tâm, chỉ cần biết áp dụng tại sheet Main
Cú pháp hàm: SaveSheet(Sheet cần lưu, Đường dẫn file sẽ lưu, kiểu định dạng file, cho lưu đè hay không?)
Lưu ý:
- Sheet cần lưu (Sheets2Save) có thể là 1 hoặc nhiều sheet
Ví dụ: Set wks = ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) ---> Lưu 2 sheet thành file Set wks = ThisWorkbook.Worksheets("Sheet1") ---> Lưu 1 sheet duy nhất
- Đường dẫn file sẽ lưu (FileName2Save): Thư mục chứa đường dẫn đến file có thể đã tồn tại hoặc chưa. Nếu thư mục lưu file chưa tồn tại thì code sẽ tự động tạo ra nó
- kiểu định dạng file (FileFormat):
- Cho lưu đè (OverWrite): OverWrite = TRUE sẽ cho lưu đè và ngược lại
-------------------
Vậy bạn chỉ cần quan tâm 3 dòng code màu đỏ và khai báo cho đúng là đủ
Thầy ơi cho em hỏi tý ạ
Hiện tại đường dẫn lưu file đang cố định (vd: D:\ABC\Test.xls)
Thay vì vậy thì chọn bảng hiện đường dẫn lưu file thì mình chỉnh thế nào vậy ạ
em cảm ơn thầy
Thầy ơi cho em hỏi tý ạ
Hiện tại đường dẫn lưu file đang cố định (vd: D:\ABC\Test.xls)
Thay vì vậy thì chọn bảng hiện đường dẫn lưu file thì mình chỉnh thế nào vậy ạ
em cảm ơn thầy
Thầy ơi cho em hỏi tý ạ
Hiện tại đường dẫn lưu file đang cố định (vd: D:\ABC\Test.xls)
Thay vì vậy thì chọn bảng hiện đường dẫn lưu file thì mình chỉnh thế nào vậy ạ
em cảm ơn thầy
à nếu file bảo vệ bằng lockxls khi save as sheet hiện hành thì bị lỗi định dạng thầy ạ
còn nếu để file ko bảo vệ thì không bị lỗi này
@ndu96081631 :Nhưng nếu dùng lockxls mà bảo vệ thì làm sao khắc phục thầy nhỉ
em cảm ơn thầy
à nếu file bảo vệ bằng lockxls khi save as sheet hiện hành thì bị lỗi định dạng thầy ạ
còn nếu để file ko bảo vệ thì không bị lỗi này
@ndu96081631 :Nhưng nếu dùng lockxls mà bảo vệ thì làm sao khắc phục thầy nhỉ
em cảm ơn thầy
dạ bảng tính nhiều sheet thì nặng. mà gửi cho người khác thì cũng chỉ cần bảng kết quả
nên em chỉ muốn save as bảng kết quả anh à
nhưng vẫn chưa tìm ra cách để bảo vệ xls mà vẫn đúng định dạng file ạ