0

I've written the following code and would ask you experts if there is an way to write it better.

in a nutshell it clears the datatable and keep the formulas,

then it imports data from another sheet and saves it asa new file. then changes columns to value and dates.

after that it copies an column to the last column and separates it and shows online the first few characters.

at last I make a new sheet within were some filtering is done.

in short the code is working but I believe it can be done better and quicker.

Sub Openstaande_inslagen()

Application.ScreenUpdating = False
Call deletekeepformulas
Call COMMISSIE_EXTRAHEREN
Call PivotC

    ActiveWorkbook.RefreshAll
End Sub


' ----------------------------------------------------------------
' Purpose: Delete table data and keep table formulas
' ----------------------------------------------------------------
Sub deletekeepformulas()

    Dim tbl As ListObject

    'Assign table to a variable
    Set tbl = ThisWorkbook.Sheets("Inslagen").ListObjects("Tabel1")

    'Delete table data and keep formulas
    If Not tbl.DataBodyRange Is Nothing Then
        tbl.DataBodyRange.Delete
    End If
    Call wb
    Call AllWorksheetPivots
    Call Save_Workbook_NewName
    Call Convert_getal
    Call Convert_getal2
    
End Sub
Sub wb()

Code:
    Dim WB1 As Workbook
    Dim WB2 As Workbook
    
'   Capture current workbook
    Set WB1 = ActiveWorkbook
    
'   Open new workbook
    Call OpenNewBox
    
'   Capture new workbook
    Set WB2 = ActiveWorkbook
    ActiveSheet.UsedRange.Copy

'   Go back to original workbook
    WB1.Activate
   Sheets("Inslagen").Cells(1, 1).PasteSpecial Paste:=xlPasteValues
 
             
End Sub

Sub OpenNewBox()

Dim xFilePath As String
Dim xObjFD As FileDialog
Set xObjFD = Application.FileDialog(msoFileDialogFilePicker)
  With xObjFD
        .AllowMultiSelect = False
        .Filters.Add "Excel Files", "*.xls; *.xlsx; *.xlsm; *.xlsb", 1
        .Show
        If .SelectedItems.Count > 0 Then
            xFilePath = .SelectedItems.Item(1)
        Else
            Exit Sub
        End If
    End With
    
    Workbooks.Open xFilePath
End Sub
Sub AllWorksheetPivots()

'Updateby20140724
Dim xTable As PivotTable
For Each xTable In Application.ActiveSheet.PivotTables
    xTable.RefreshTable
Next

End Sub

Sub Save_Workbook_NewName()
Dim workbook_Name As Variant
workbook_Name = Application.GetSaveAsFilename(FileFilter:="Excel Macro-Enabled Workbook (*.xlsm),*.xlsm")
If workbook_Name <> False Then
    ActiveWorkbook.SaveAs Filename:=workbook_Name
End If

End Sub

Sub COMMISSIE_EXTRAHEREN()
'
' COMMISSIE_EXTRAHEREN Macro
' artikelnummer laten splitsen om zo alleen het commissienummer over te houden
'

'
Sheets("inslagen").Activate
ActiveSheet.ListObjects("Tabel1").ListColumns(15).DataBodyRange.Select
Selection.Copy
ActiveSheet.ListObjects("Tabel1").ListColumns(19).DataBodyRange.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
    Range("S1").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "Commissie"
    Range("S2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.TextToColumns Destination:=Range("S2"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :=":", FieldInfo:=Array(Array(1, 1), Array(2, 9)), TrailingMinusNumbers:=True
Call MultipleRange_DATE
Call MultipleRange_NUMBER
        
End Sub

Sub Convert_getal()
    Columns("A:A").Select
    With Selection
        .NumberFormat = "dd-mm-yyyy"
        .Value = .Value
End With
End Sub


Sub Convert_getal2()
    Columns("E:F").Select
    With Selection
        .NumberFormat = "General"
        .Value = .Value
End With
End Sub

Sub MultipleRange_DATE()
 Dim r1 As Range, r2 As Range, r3 As Range, r4 As Range, r5 As Range, myMultipleRange As Range
 Set r1 = Sheets("Inslagen").Range("G:G")
 Set r2 = Sheets("Inslagen").Range("H:H")
 Set r3 = Sheets("Inslagen").Range("K:K")
 Set r4 = Sheets("Inslagen").Range("L:L")
 Set r5 = Sheets("Inslagen").Range("T:T")
 Set myMultipleRange = Union(r1, r2, r3, r4, r5)
 myMultipleRange.NumberFormat = "dd-mm-yyyy"
End Sub
Sub MultipleRange_NUMBER()
 Dim r1 As Range, r2 As Range, myMultipleRange As Range
 Set r1 = Sheets("Inslagen").Range("A:A")
 Set r2 = Sheets("Inslagen").Range("E:F")
 Set myMultipleRange = Union(r1, r2)
 myMultipleRange.NumberFormat = "General"
End Sub

Sub PivotC()

    Sheets("nog afronden").Select
        Columns("A:A").Select
    With Selection
        .NumberFormat = "dd-mm-yyyy"
        .Value = .Value
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Select
    ActiveSheet.Name = "Bijna_afgerond"
Sheets("nog afronden").PivotTables("Draaitabel2").TableRange1.Copy Destination:=Worksheets("Bijna_afgerond").Range("A1")
Call DeleteEntireRows
Sheets("Bijna_afgerond").Activate

' SPATIES Macro
    Rows("1:1").Select
    Selection.Replace What:=" ", Replacement:="_", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
End With

Call DelLR2
Call ADD_COLUMN_TO_TABLE
Call Convert_getal3
Call DetermineActiveTable
Call Calculate_AF


End Sub
Sub DeleteEntireRows()
Sheets("Bijna_afgerond").Activate
Rows("1:2").EntireRow.Delete
Call Generate_Table
End Sub

Sub Generate_Table()
    Dim tb2 As Range
    Dim wsht As Worksheet
    Set tb2 = Range("A1").CurrentRegion
    Set wsht = ActiveSheet
    wsht.ListObjects.Add(SourceType:=xlSrcRange, Source:=tb2).Name = "TEST_RANGE"
End Sub

Sub DelLR2()

Dim x As Long

With Sheets("Bijna_afgerond")
'Assumes last row of data found in column A (1)
  x = .Cells(.Rows.Count, 1).End(xlUp).Row
  .Cells(x, 2).EntireRow.Delete
End With
Worksheets("Bijna_afgerond").Cells.EntireColumn.AutoFit
End Sub



Sub DetermineActiveTable()

Dim SelectedCell As Range
Dim TableName As String
Dim ActiveTable As ListObject

Set SelectedCell = ActiveCell

'Determine if ActiveCell is inside a Table
  On Error GoTo NoTableSelected
    TableName = SelectedCell.ListObject.Name
    Set ActiveTable = ActiveSheet.ListObjects(TableName)
  On Error GoTo 0

'Do something with your table variable (ie Add a row to the bottom of the ActiveTable)
  ActiveTable.Range.AutoFilter field:=6, Criteria1:="<>"
  
Exit Sub

'Error Handling
NoTableSelected:
  MsgBox "There is no Table currently selected!", vbCritical

End Sub

Sub Convert_getal3()
Dim myRange As Range
Set myRange = Selection
ActiveSheet.ListObjects("TEST_RANGE").ListColumns("Referentie").Range.Select
    With Selection
        .NumberFormat = "general"
        .Value = .Value
End With
End Sub

Sub Bijna_afgerond()
'
' BIJNA_AFGEROND Macro
' kijken naar een lijst met Bijna_afgeronde inslagen
'

'
    Sheets("nog afronden").Select
    ActiveSheet.PivotTables("Draaitabel2").RepeatAllLabels xlRepeatLabels
    
    Range("A7").Select
    Range("A7:F94").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("nog afronden").Select
    Sheets.Add After:=ActiveSheet
    Sheets("Blad2").Select
    Sheets("Blad2").Name = "Bijna_afgerond"
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.AutoFilter
    Cells.Select
    Cells.EntireColumn.AutoFit
    ActiveSheet.Range("$A$2:$F$89").AutoFilter field:=6, Criteria1:="<>"
    Range("G3").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-1]"
    Range("G3").Select
    Selection.FillDown
    Selection.FormatConditions.AddColorScale ColorScaleType:=3
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).ColorScaleCriteria(1).Type = _
        xlConditionValueLowestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(1).FormatColor
        .Color = 8109667
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(2).Type = _
        xlConditionValuePercentile
    Selection.FormatConditions(1).ColorScaleCriteria(2).Value = 50
    With Selection.FormatConditions(1).ColorScaleCriteria(2).FormatColor
        .Color = 8711167
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(3).Type = _
        xlConditionValueHighestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(3).FormatColor
        .Color = 7039480
        .TintAndShade = 0
    End With
    Sheets("nog afronden").Select
    ActiveSheet.PivotTables("Draaitabel2").RepeatAllLabels xlRepeatLabels
    End Sub
    
    Sub ADD_COLUMN_TO_TABLE()
    Dim ws As Worksheet
Set ws = ActiveSheet
Dim tbl As ListObject
Set tbl = ws.ListObjects("TEST_RANGE")
'add a new column at the end of the table
tbl.ListColumns.Add.Name = "Percentage_voltooid"
ActiveSheet.Columns("A:G").AutoFit


    End Sub
    
Sub Calculate_AF()
Dim tbl As ListObject
Dim sFormula As String

    Set tbl = Sheets("Bijna_afgerond").ListObjects("TEST_RANGE")

    sFormula = "=[@[Som_van_Aantal_verwacht]]-[@[Som_van_Aantal_ontvangen2]]"
    

    tbl.ListColumns("Percentage_voltooid").DataBodyRange.Cells(1).Formula = sFormula
  
    tbl.ListColumns("Percentage_voltooid").DataBodyRange.Cells().Select
    Selection.FormatConditions.AddColorScale ColorScaleType:=3
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).ColorScaleCriteria(1).Type = _
        xlConditionValueLowestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(1).FormatColor
        .Color = 8109667
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(2).Type = _
        xlConditionValuePercentile
    Selection.FormatConditions(1).ColorScaleCriteria(2).Value = 50
    With Selection.FormatConditions(1).ColorScaleCriteria(2).FormatColor
        .Color = 8711167
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(3).Type = _
        xlConditionValueHighestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(3).FormatColor
        .Color = 7039480
        .TintAndShade = 0
    End With
  

End Sub

Sub VOORWAARDELIJKE_OPMAAK()
'
' VOORWAARDELIJKE_OPMAAK Macro
'

'
    Range("G45").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.FormatConditions.AddColorScale ColorScaleType:=3
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).ColorScaleCriteria(1).Type = _
        xlConditionValueLowestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(1).FormatColor
        .Color = 8109667
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(2).Type = _
        xlConditionValuePercentile
    Selection.FormatConditions(1).ColorScaleCriteria(2).Value = 50
    With Selection.FormatConditions(1).ColorScaleCriteria(2).FormatColor
        .Color = 8711167
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).ColorScaleCriteria(3).Type = _
        xlConditionValueHighestValue
    With Selection.FormatConditions(1).ColorScaleCriteria(3).FormatColor
        .Color = 7039480
        .TintAndShade = 0
    End With
End Sub
Thom Haasert
  • 119
  • 7
  • 2
    Too much code to comment on in any detail, but I would start by applying the advice from here: https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba – Tim Williams Sep 29 '22 at 19:14

0 Answers0