m5edward

New Member
Joined
Jul 20, 2016
Messages
42
Hi Everyone,

Just looking for some code to help me delete tabs after a workbook split.

Basically, I have a macro that splits a worksheets (not workbooks) by a unique identifier found in column A. I would like all tabs except the relevant one to be deleted from the new file, and there are too many tabs to name them in the code. Any ideas?

Here is the code I have so far.

Code:
Sub SplitWB()
Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.ScreenUpdating = False


ActiveWorkbook.Save


Dim OutputFolderName As String
 OutputFolderName = ""
    Set myDlg = Application.FileDialog(msoFileDialogFolderPicker)
    myDlg.AllowMultiSelect = False
    myDlg.Title = "Select Output Folder for Touchstone Files:"
    If myDlg.Show = -1 Then OutputFolderName = myDlg.SelectedItems(1) & "\" Else Exit Sub
    Set myDlg = Nothing
      
    Application.CutCopyMode = False
    
    '''''''''''''''''''''''''''''
    '''''''''''''''''''''''''''''
           
    Dim d As Object, c As Range, k, tmp As String, unique(500)
    i = 0
    
    With ActiveSheet
        lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With


    Set d = CreateObject("scripting.dictionary")
    For Each c In Range(Cells(1, 1), Cells(lastRow, 1))
        tmp = Trim(c.Value)
        If Len(tmp) > 0 Then d(tmp) = d(tmp) + 1
    Next c


    For Each k In d.keys
        Debug.Print k, d(k)
         i = i + 1
         unique(i) = k
    Next k
    
    UniqueCount = i
           
'start deleting
    
For i = 1 To UniqueCount
    
    'Actions for new workbook
    wpath = Application.ActiveWorkbook.FullName
    wbook = ActiveWorkbook.Name
    wsheet = ActiveSheet.Name
    
    ActiveWorkbook.SaveAs Filename:=OutputFolderName & unique(i), FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False


    For j = 1 To lastRow
        If Range("A" & j) <> "" And Range("A" & j) <> unique(i) Then
            Rows(j).Delete
            j = j - 1
        End If
    Next
    
    'hide helper columns
    
    If HideC = False And DeleteC = True Then
       ' Columns("A:D").Hidden = True
    End If




       
    Range("E8").Select
    
    
    'Select Instructions tab
    'Worksheets("Guidelines").Activate
                  
    'Save new workbook
    ActiveWorkbook.Close SaveChanges:=True
    Workbooks.Open (wpath)
    
    'ActiveWorkbook.Close False
      
    Workbooks(wbook).Activate
    
Next




Application.DisplayAlerts = True
Application.ScreenUpdating = True




MsgBox ("Macro has completed successfully!" & vbNewLine & vbNewLine & "Generated files can be found in the following directory:" & vbNewLine & OutputFolderName)
    
Application.AskToUpdateLinks = True
End Sub

And here is background on the project.

The project: It deals with very sensitive HR/performance data, and I need to send 1000s of employees' data to their individual managers (about 100 managers who can only see their team's data, and no one else's), so I need about 100 files split (1 each for each manager).

The file:
- Many different tabs, separated by role.
- First column is a unique identifier made by concatenating the Manager's name with the job title ex. John Stevens_Office Manager

The task:
- John Stevens will have team members in many different job roles, and needs all that data in one file, separated into tabs by job role.

Sample Data

Tab 1: Office Manager
IdentifierLast NameFirst NamePerformance
John Stevens_Office ManagerKilljoyHeidi8/10
Lindsay Brown_Office ManagerWilcoxTommy9/10
Tom Fields_Office ManagerThorneRonald7/10

<tbody>
</tbody>


Tab 2: Office Coordinator
IdentifierLast NameFirst NamePerformance
John Stevens_Office CoordinatorShieldsBetty7/10
Lindsay Brown_Office CoordinatorJohnsonCraig9/10
Tom Fields_Office CoordinatorCorganBilly10/10

<tbody>
</tbody>


Tab 3: AR Associate
IdentifierLast NameFirst NamePerformance
John Stevens_AR AssociateSpearsBritney4/10
Lindsay Brown_AR AssociateCobainKurt10/10
Tom Fields_AR AssociateWilsonBrian9/10

<tbody>
</tbody>



Based on that sample data, the ideal macro would give me 3 files with 3 worksheets in each, and 1 row of data in each worksheet. Ideally, the file name would just be the manager's name and the worksheets' names would be the job titles.



Thanks,


Mark
 

Excel Facts

Excel Can Read to You
Customize Quick Access Toolbar. From All Commands, add Speak Cells or Speak Cells on Enter to QAT. Select cells. Press Speak Cells.
This will delete all tabs except the one named "Not This One"

Rich (BB code):
Sub DeleteTabs()
Dim ws As Worksheet, MySheet As String

'Define Which Sheet to Keep
MySheet = "Not This One"

'Set that sheet as visible, there must be at least 1 visible sheet in a book
Sheets(MySheet).Visible = True

'Suppress prompt to confirm deleting sheets.
Application.DisplayAlerts = False

'Delete all other sheets
For Each ws In Sheets
    If ws.Name <> MySheet Then ws.Delete
Next ws
End Sub
 
Last edited:
Upvote 0

Forum statistics

Threads
1,216,031
Messages
6,128,424
Members
449,450
Latest member
gunars

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top