This is my first post so forgive me if I do anything incorrectly. I have a test file with about 50 records. Each record contains a serial number of a device and an application that is installed on that device as well as additional information. My ultimate goal is to have the macro break this report into individual reports for each workstation. In addition to that I would like certain records to be deleted and others sorted into sections based on whether or not the application appears in a preset list in another worksheet. I've attached 3 files. The Mock file contains the macro. It has 4 sheets (EXAMPLE, DELETE, SECTION1, SECTION2). TestFile contains test data. Machine1 contains what the macro currently outputs. Right now the output is just a sheet with the list of apps for a specific machine. Looking at the EXAMPLE worksheet you can see how I would like it ultimately formatted. Any apps present in the DELETE Worksheet should be deleted. Any apps in the REPLACE worksheet should have the replacement put in section 1. Any Apps in the SECTION2 worksheet should be put in Section 2. All remaining records should be put in Section 3. I've never used VBA but what code you see I was able to put together in a day and a half so i'm a quick learner. Any help would be appreciated!
Note: some code is for future purposes such as SetHeaderInfo(). Also this requires a directory of "C:\WKSTEMP\" to save the files.
Here is the current macro:
![]()
Sub MultiFormat() ' ' Keyboard Shortcut: Ctrl+m ' ' This macro will process an exported report with multiple machine data into individual machine reports and save the reports using the MachineID as the file name. ' ' Macro begins now... ' Dimension variables Dim OrigWS As String OrigWS = ActiveSheet.Name ' Strip Header Row Rows("1:1").Select Selection.Delete Shift:=xlUp ' Parse file 'Based on column A, data is filtered to individual sheets 'Creates sheets and sorts alphabetically in workbook Dim LR As Long, i As Long, MyArr Dim MyCount As Long, ws As Worksheet Application.ScreenUpdating = False Set ws = Sheets(OrigWS) 'edit to sheet with master data ws.Activate Rows(1).Insert xlShiftDown Range("A1") = "Key" Columns("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("CC1"), Unique:=True Columns("CC:CC").Sort Key1:=Range("CC2"), Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal MyArr = Application.WorksheetFunction.Transpose(Range("CC2:CC" & Rows.Count).SpecialCells(xlCellTypeConstants)) Range("CC:CC").Clear Range("A1").AutoFilter For i = 1 To UBound(MyArr) ws.Range("A1").AutoFilter Field:=1, Criteria1:=MyArr(i) LR = ws.Range("A" & Rows.Count).End(xlUp).Row If LR > 1 Then If Not Evaluate("=ISREF('" & MyArr(i) & "'!A1)") Then Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = MyArr(i) Else Sheets(MyArr(i)).Move After:=Sheets(Sheets.Count) Sheets(MyArr(i)).Cells.Clear End If ws.Range("A2:A" & LR).SpecialCells(xlCellTypeVisible).EntireRow.Copy _ Sheets(MyArr(i)).Range("A1") ws.Range("A1").AutoFilter Field:=1 MyCount = MyCount + Sheets(MyArr(i)).Range("A" & Rows.Count).End(xlUp).Row - 1 Sheets(MyArr(i)).Columns.AutoFit SetHeaderInfo FormatData SaveTitleClose End If Next i ' Display success message ws.Activate ws.AutoFilterMode = False LR = ws.Range("A" & Rows.Count).End(xlUp).Row - 1 Rows(1).Delete xlShiftUp MsgBox "Rows with data: " & LR & vbLf & "Your files have been created! Please check them." Application.ScreenUpdating = True ' Close the report data file ActiveWorkbook.Close Saved = True End Sub Public Function FormatData() ' Delete unused columns and rows Columns("A:K").Select Selection.Delete Shift:=xlToLeft Columns("G:I").Select Selection.Delete Shift:=xlToLeft ' Change font size Cells.Select With Selection.Font .Name = "Calibri" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .ThemeFont = xlThemeFontMinor End With ' Set column width to auto Columns("A:G").Select Selection.Columns.AutoFit End Function Public Function SaveTitleClose() ' Save worksheet as new workbook, set title, and close. Dim wb As Workbook Dim Name As String Name = ActiveSheet.Name Worksheets(Name).Copy Set wb = ActiveWorkbook wb.BuiltinDocumentProperties("title") = Name & " Applications List" wb.SaveAs FileName:="C:\WKSTEMP\" & Name & ".xlsx", FileFormat:=51 wb.Close ' Close the new worksheet Application.DisplayAlerts = False Worksheets(Name).Delete Application.DisplayAlerts = True End Function Public Function SetHeaderInfo() Dim UserID As String UserID = Range("B2").Value Dim UserDep As String UserDep = Range("D2").Value End Function











LinkBack URL
About LinkBacks
Register To Reply
Bookmarks