Just nu i M3-nätverket
Jump to content

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


pWn
 Share

Recommended Posts

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?

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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å.

 

 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share



×
×
  • Create New...