Just nu i M3-nätverket
Gå till innehåll
pWn

VBA-kod för att kunna subtrahera mellan olika blad i Excel

Rekommendera Poster

pWn

Hej!

 

Ska försöka formulera vad jag behöver hjälp med. Det är inte lätt när man är novis i Excel.

 

Jag har en lagerlista med två flikar; Lagerlista (flik 1) och Lageplocklista (flik 2).

 

Lagerlistan visar vad som finns på lager, och kolumn G (Antal) anger hur många som finns på lager.

 

Lagerplocklistan används för att dokumentera vad som tas ur lagret. I den fliken i kolumn D (Plockantal) anges hur många enheter som ska tas från lagret. Jag vill kunna ange ett värde här som subtraheras från Kolumn G (Antal) i Lagerlistan där vald enhet matchas i kolumn A.

 

Någon som kan hjälpa mig?

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
MH_

Du säger inte hur du har tänkt att starta själva borttagandet. Exemplet nedan är tänkt att startas med en knapp eller liknande. Du skulle även kunna ha en händelsestyrd variant som triggas när ett värde i plocklistans kolumn D ändras.

 

Nedanstående exempel bygger på en fil där du har två flikar "Lagerplocklistan" och "Lagerlistan". 

 

Obs! Makrot skriver in en text i kolumn E i plocklistan när det har minskat lagret för att undvika dubbelräkning. Jag vet inte hur du skall lösa det annars. 

 

Nu är adressen till plocklistan hårdkodad (en flik som heter "Lagerplocklistan"). Du kanske skall fundera ut något smartare system. Jag antar att varje order skall ha en egen plocklista eller liknande?

Sub tjoh()
Dim rPlock As Range
Dim prod As String
Dim iPlockade As Integer
Dim rLager As Range

' ange startpunkt
Set rPlock = Sheets("Lagerplocklistan").Range("A2")

' startar en loop som går igenom hela plocklistan

Do Until rPlock.Value = ""
'Kollar så att raden inte är avdragen redan (dvs att Kolumn E är tom)
    If rPlock.Offset(0, 4).Value = "" Then
        prod = rPlock.Value
        iPlockade = rPlock.Offset(0, 3).Value
        'Hitta produkten i lagerlistans kolumn a
        Set rLager = Sheets("Lagerlistan").Columns("A:A").Find(prod)
        
        ' om du plockar en vara som inte finns i lagret så avbryts makrot:
        If rLager Is Nothing Then
            MsgBox prod & " saknas i lager"
            rPlock.Select
            Exit Sub
        End If
        
        ' Annars, gå 6 steg till höger (kolumn G)
        Set rLager = rLager.Offset(0, 6)
        
        'Minska lagervärdet med antal plockade
        rLager.Value = rLager.Value - iPlockade
        
        'ange att lagret är minskat med plocklistans värde
        rPlock.Offset(0, 4).Value = "hämtad"
    End If
    
    ' Gå ner ett steg i plocklistan och loopa
    Set rPlock = rPlock.Offset(1, 0)
Loop
End Sub

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
pWn

Tack för svar och ditt arbete!

 

Jag var slarvig med referenserna i flikarna när jag skrev förut och det ber jag om ursäkt för. Men jag ska försöka ändra så det pekar på rätt kolumner och rader.

 

Återkommer. Tack så länge!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
pWn

Får det inte att funka, men det är mitt eget fel som var otydlig.

 

Det jag vill är att det värdet som skrivs under PLOCKANTAL i Lagerplocklista (flik 2)...

image.thumb.png.86fd1ba8b7d3b2b4cf1b424c8f00ada4.png

 

..ska subtraheras från Lagerlista (flik 1) under ANTAL så att det i det här fallet blir en mindre där.

image.thumb.png.324b311d6e7cab3c98285f83cd1aafd0.png

 

Sedan sköter sig resten själv.

Tacksam för all hjälp jag kan få.

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
MH_

Jag hade skrivit Lagerlistaetc. Gå igenom och kolla att startpunkterna är rätt och att data verkligen ligger xx kolumner till höger:

Sub tjoh()
Dim rPlock As Range
Dim rLager As Range

' ange startpunkt
Set rPlock = Sheets("Lagerplocklista").Range("C5")

' startar en loop som går igenom hela plocklistan

Do Until rPlock.Value = ""
'Kollar så att raden inte är avdragen redan (dvs att Kolumn J är tom)
    If rPlock.Offset(0, 7).Value = "" Then
        
        'Hitta produkten i lagerlistans kolumn B
        Set rLager = Sheets("Lagerlista").Columns("B:B").Find(What:=rPlock.Value, After:=Range("B4"))
        
        ' om du plockar en vara som inte finns i lagret så avbryts makrot:
        If rLager Is Nothing Then
            MsgBox rPlock.Value & " saknas i lager"
            rPlock.Select
            Exit Sub
        End If
        
        ' Annars, Minska lagervärdet (kolumnG) med antal plockade
        rLager.Offset(0, 5) = rLager.Offset(0, 5) - rPlock.Offset(0, 1).Value
        
        'ange att lagret är minskat med plocklistans värde (kolumn J)
        rPlock.Offset(0, 7).Value = "avdraget i lagret"
    End If
    
    ' Gå ner ett steg i plocklistan och loopa
    Set rPlock = rPlock.Offset(1, 0)
Loop
End Sub

När du rensar plocklistan så får du se till att Kolumn J ingår i rensningen

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
pWn

Tusen tack!

 

Det tog en stund innan jag fattade att jag måste köra makrot, och det fungerar perfekt!

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...