Tách các sheets tùy chọn thành 1 file excel

Liên hệ QC

AnhNQT

Thành viên chính thức
Tham gia
6/11/18
Bài viết
61
Được thích
5
Giới tính
Nam
Nhờ các bác xem giúp em. Em export nó bị lỗi. Mục đích là tách 3 sheet kia ra 1 file khác theo tên như ô A1 ở sheet "INV".


Mã:
Sub SaveInv()

Dim xPath As String
xPath = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
    Sheets("Code").Visible = False
    Sheets(Array("INV", "PKL", "ING")).Copy
    Application.ActiveWorkbook.SaveAs Filename:=xPath & Sheets("INV").Range("A1").Value & ".xlsx"
    Application.ActiveWorkbook.Close False
    Sheets("Code").Visible = True
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • Tach excel.xlsm
    20.4 KB · Đọc: 24
Nhờ các bác xem giúp em. Em export nó bị lỗi. Mục đích là tách 3 sheet kia ra 1 file khác theo tên như ô A1 ở sheet "INV".


Mã:
Sub SaveInv()

Dim xPath As String
xPath = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
    Sheets("Code").Visible = False
    Sheets(Array("INV", "PKL", "ING")).Copy
    Application.ActiveWorkbook.SaveAs Filename:=xPath & Sheets("INV").Range("A1").Value & ".xlsx"
    Application.ActiveWorkbook.Close False
    Sheets("Code").Visible = True
Application.ScreenUpdating = True
End Sub
Thử thêm dấu "\" sau xPath
Mã:
xPath = Application.ActiveWorkbook.Path & "\"
 
Upvote 0
Viết một câu chưa đến 10 chữ mà viết tắt đến 4 chữ (ok, r, ah, e), lười biếng vừa vừa thôi.
Nếu bạn quan tâm đến VBA thì nên cụ thể, rõ ràng, ai đọc cũng hiểu được.
Nếu người nào đó giúp cho bạn 1 đoạn code bằng mã với ký tự (xxxxxxxx, iiiiiiiiii, ***********) thì bạn có tham khảo được không? hay là phải nêu anh ơi giải thích code giùm cho em.
 
Lần chỉnh sửa cuối:
Upvote 0
Viết một câu chưa đến 10 chữ mà viết tắt đến 4 chữ (ok, r, ah, e), lười biếng vừa vừa thôi.
Nếu bạn quan tâm đến VBA thì nên cụ thể, rõ ràng, ai đọc cũng hiểu được.
Nếu người nào đó giúp cho bạn 1 đoạn code bằng mã với ký tự (xxxxxxxx, iiiiiiiiii, ***********) thì bạn có tham khảo được không? hay là phải nêu anh ơi giải thích code giùm cho em.
Cảm ơn bác đã nhắc nhở! Mình sẽ rút kinh nghiệm lần sau.
 
Upvote 0
Bạn tham khảo thêm code này của Huyền thoại @ndu96081631, tôi thấy rất tuyệt.
Copy Function này vào Module
Mã:
Option Explicit
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

Copy tiếp Sub Main vào Module

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
  Set wks = ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) '>> wks bao gom nhieu sheet
  'Set wks = ThisWorkbook.Worksheets("Sheet1")             '>> wks là 1 sheet duy nhat
  FileName = "D:\ABC\Test.xls"
  FileFormat = xlExcel8
  szSaved = SaveSheet(wks, FileName, FileFormat, True)
  If Len(szSaved) Then MsgBox "File """ & szSaved & """ have been successfully saved!"
  Application.ScreenUpdating = True
End Sub

Code cho phép chọn xuất ra nhiều định dạng file excel, tạo Folder mới nếu như Folder không tồn tại...
Hy vọng có thêm giải pháp cho bạn,
Cảm ơn tác giả: @ndu96081631
 
Upvote 0
Bạn tham khảo thêm code này của Huyền thoại @ndu96081631, tôi thấy rất tuyệt.
Copy Function này vào Module
Mã:
Option Explicit
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

Copy tiếp Sub Main vào Module

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
  Set wks = ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) '>> wks bao gom nhieu sheet
  'Set wks = ThisWorkbook.Worksheets("Sheet1")             '>> wks là 1 sheet duy nhat
  FileName = "D:\ABC\Test.xls"
  FileFormat = xlExcel8
  szSaved = SaveSheet(wks, FileName, FileFormat, True)
  If Len(szSaved) Then MsgBox "File """ & szSaved & """ have been successfully saved!"
  Application.ScreenUpdating = True
End Sub

Code cho phép chọn xuất ra nhiều định dạng file excel, tạo Folder mới nếu như Folder không tồn tại...
Hy vọng có thêm giải pháp cho bạn,
Cảm ơn tác giả: @ndu96081631
Mình đã thực hiện theo code bác chia sẻ và thành công mặc dù chưa hiểu Function trên lắm. Rất cảm ơn bác.!
 
Upvote 0
Mình đã thực hiện theo code bác chia sẻ và thành công mặc dù chưa hiểu Function trên lắm. Rất cảm ơn bác.!
Có những thứ không cần phải hiểu.
Hàng nghìn hàm quá hay trên excel chúng ta đâu hiểu cơ chế vận hành thế nào. Quan trọng là ứng dụng được nó vào thực tế đã là thành công rồi.
 
Upvote 0
Sẵn đây em cũng có 1 thắc mắc tương tự nhờ các bác hỗ trợ giúp em.
Cũng là copy các sheet ra workbook mới nhưng 1 workbook có nhiều sheet pivot, em chỉ cần xuất các sheet pivot có dữ liệu, em xác định các tên sheet có dữ liệu và gán ô A1 = '"Sheet2", "Sheet3"

Dim namesheets As Interger
namesheets = range("A1").Value
Sheets(Array(namesheets)).Copy

Em đang báo lỗi ở array(namesheets)
Nhờ các bác ạ
 
Upvote 0
Sẵn đây em cũng có 1 thắc mắc tương tự nhờ các bác hỗ trợ giúp em.
Cũng là copy các sheet ra workbook mới nhưng 1 workbook có nhiều sheet pivot, em chỉ cần xuất các sheet pivot có dữ liệu, em xác định các tên sheet có dữ liệu và gán ô A1 = '"Sheet2", "Sheet3"

Dim namesheets As Interger
namesheets = range("A1").Value
Sheets(Array(namesheets)).Copy

Em đang báo lỗi ở array(namesheets)
Nhờ các bác ạ
Thử lại thế này xem. Nhưng ô A1 phải là Sheet2, Sheet3
Mã:
Dim namesheets
namesheets = Split(Range("A1").Value, ", ")
Sheets(namesheets).Copy
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom