VB kode i Excel - må kunne gøres smartere
Vi opretter nye varer i vores ERP system via upload fra en Excelfil.Varebeskrivelserne skal gerne være ensartede, og derfor udfører vi en række tweaks på hver varetekst, inden upload:
1. Vi bruger STORE.FORBOGSTAVER()
2. Vi bruger ERSTAT() ud fra et andet ark i Excelfilen, så vi kan erstatte et dynamisk antal.
De nye varer med varetekster ligger i ark "Automakroark"
Erstatningerne ligger i ark "Erstat".
https://www.dropbox.com/s/a86jwyv0h0jpth0/Automakroark.jpg?dl=0
https://www.dropbox.com/s/wk6o61mz4z4waxc/ErstatArk.jpg?dl=0
Ved klik på "Kør" knappen, eksekveres koden, der for hver varelinie gennemlæser alle Erstat-linierne, og erstatter i vareteksten.
Altså, et loop over linierne, med et loop over Erstatningslinierne inden i.
Dim Erstats As Integer
Dim Linier As Integer
Dim Lin As Integer
Dim Elin As Integer
Linier = Worksheets("Automakroark").Cells(1, "C").Value
Erstats = Worksheets("Erstat").Cells(1, "E").Value
Elin = 1
Lin = 1
Sheets("Automakroark").Select
' Stort.forbogstav i arbejdscelle:
Range("D3").Select
ActiveCell.FormulaR1C1 = "=PROPER(RC[-1])"
' Kopier første linjes formatering til de øvrige
If Linier > 1 Then
Range("D3:D3").Select
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("D3:D" & Linier + 2)
End If
Do While Lin <= Linier
Elin = 1
Do While Elin <= Erstats
' Opbyg ny værdi i arbejdscelle
Range("E" & Lin + 2).Select
ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-1], """ & _
Worksheets("Erstat").Cells(Elin, "A").Value & """, """ & _
Worksheets("Erstat").Cells(Elin, "B").Value & """)"
' Kopier Value til forrige celle
Selection.Copy
Range("D" & Lin + 2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Elin = Elin + 1
Loop
Lin = Lin + 1
Loop
' Nulstil arbejdsceller
If Linier > 1 Then
Range("E3:E3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
End If
Det virker, men jeg har på fornemmelsen, at det ikke er den hurtigste kode jeg har fået banket sammen. Jeg tror også, at det må kunne gøres lidt smartere.