Det vil sige, at i din bestående liste af rækker med productID i kolonne 2 - ønsker du at tilføje et "løbenr", når et produktID findes i forvejen. -- JA præcis
- Skal dette løbenr begynde med 1 når produktID skifter?-- JA
- Hvad mener du med følgende:"men system kan ikke indlæse produkter som har det samme ID" -- Det er bare at vores produkt system kan ikke håndtere at der findes flere varer med samme ID. Vi sælger dele til biler, og derfor kan en vare som passer til en vw godt passe til en audi også. derfor opstår problemet, da de skal tilføjes under begge mærker.
Her er koden, der kan ændre de bestående nr. på arket - hvad med fremover???
Tag en kopi af filen/arket inden.
Hver opmærksom på, at datatypen ændres når et produktnr. får tilføjet et løbenr, fra tal til tekst.
Lægges ind på det pågældende ark i VBA (Alt+F11) =====================================================
Dim antalRæk, idTabel() Sub ProductID() Dim idnr antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
ReDim idTabel(antalRæk, 2) For ræk = 2 To antalRæk idnr = Cells(ræk, 2) løbenr = findesID(idnr) If løbenr > 0 Then Cells(ræk, 2) = CStr(Cells(ræk, 2)) + "-" + CStr(løbenr) End If Next ræk End Sub Private Function findesID(idnr) Dim f For f = 0 To antalRæk - 1 If idTabel(f, 0) = "" Then idTabel(f, 0) = idnr idTabel(f, 1) = 1 findesID = 0 Exit Function End If
If idTabel(f, 0) = idnr Then findesID = idTabel(f, 1) idTabel(f, 1) = idTabel(f, 1) + 1 Exit Function End If Next f Stop End Function
Det gør jeg. Har en version 2, der kan anvendes når version 1 er udført - d.v.s. ved efterfølgende oprettelse af nye productId. Den kan du også få, hvis du er interesseret.
Rem Version 2 Rem ========= Dim antalRæk, idTabel() Sub ProductID() Dim idnr antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
ReDim idTabel(antalRæk, 2)
Rem opdatering af alle allerede udvidede productID For ræk = 2 To antalRæk idnr = Cells(ræk, 2)
If InStr(idnr, "-") > 0 Then OpdaterTabel idnr End If Next ræk
Rem opdatering af nye productID uden løbenr For ræk = 2 To antalRæk idnr = Cells(ræk, 2)
If InStr(idnr, "-") = 0 Then løbenr = findesID(CStr(idnr)) If løbenr > 0 Then Cells(ræk, 2) = CStr(Cells(ræk, 2)) + "-" + CStr(løbenr) End If End If Next ræk
MsgBox ("Opdatering af productID afsluttet") End Sub Private Function findesID(idnr) Dim f For f = 0 To antalRæk - 1 If idTabel(f, 0) = "" Then idTabel(f, 0) = idnr idTabel(f, 1) = 1 findesID = 0 Exit Function End If
If idTabel(f, 0) = idnr Then findesID = idTabel(f, 1) idTabel(f, 1) = idTabel(f, 1) + 1 Exit Function End If Next f Stop End Function Private Function OpdaterTabel(idnr) Dim f, p, id, løbenr p = InStr(idnr, "-") id = Left(idnr, p - 1) løbenr = Mid(idnr, p + 1)
For f = 0 To antalRæk - 1 If idTabel(f, 0) = id Then idTabel(f, 0) = id idTabel(f, 1) = løbenr + 1 Exit Function Else If idTabel(f, 0) = "" Then idTabel(f, 0) = id idTabel(f, 1) = løbenr + 1 Exit Function End If End If Next f End Function
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.