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

Macro VBA? - kopiera med vilkor vilken månad


Misspearl

Rekommendera Poster

Book1.xlsxHej,

 

Jag är väldigt ny på det här med VBA och har hittat ett exempel på nätet (https://www.youtube.com/watch?v=t3TQ49duBgQ) som mer eller mindre gör det som jag skulle vilja ha göra. Har försökt kopiera macrot och anpassa det efter mina önskemål. Tyvärr måste jag missat något för jag får det inte rikigt att fungera utan får ett felmeddelande (Run_time error '13' Type mismatch).

 

Det jag vill att macrot ska göra är att kopiera från blad "P&L", E6:E37, till blad "Statistics" som värden, vill inte att formler ska följa med. Var det ska klistras in beror på vilken siffra som står i cell L1 i "P&L" och sedan ska den "hitta" motsvarande siffra i Q3-3AB i "Statistics". Det ska klistras in i kolumnerna Q-AB raderna 4-35.

 

Macrot som jag provat in ser ut enligt nedan. Bifogar fil utan macro.

 

Sub CopyTotals()
    Dim WSD As Worksheet
    Set WSD = Worksheets("P&L")
    Dim WSS As Worksheet
    Set WSS = Worksheets("Statistics")
   
    ValueToFind = WSD.Range("L1").Value
   
    CopyToColumn = WSS.Columns(17).Find(What:=ValueToFind, _
        After:=WSS.Cells(1, 2), _
        LookIn:=x1Values, _
        LookAt:=xlWhole, _
        SearchOrder:=x1ByRows, _
        SearchDirection:=x1Next, _
        MatchCase:=False, _
        SearchFormat:=False).Column
       
    MsgBox "Copy to column" & CopyToColumn
    'Copy from WSD
    WSD.Range("E6:E37").Copy
    'Paste Special to WSS
    WSS.Cells(CopyToColumn, 17).PasteSpecial _
        x1PasteValues
       
End Sub

 

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

Undrar om det inte är så att där det står t.ex. LookIn:=x1Values, att du måste ändra x1 till xl (gemena X och L). Detta eftersom jag misstänker att koden anropar interna värden/datatyper och i Excel VBA brukar dessa benämnas just xl<något variabelnamn>.

Länk till kommentar
Dela på andra webbplatser

Jaha, tack för era snabba svar!

Jag provade att byta ut x1 mot xl men får tyvärr ändå samma felmeddelande...

Länk till kommentar
Dela på andra webbplatser

Okej, det var lite mer som var galet i koden.

 

Här har du en fungerande variant, om den verkligen gör det du vill vette tusan men det kanske du kan ordna.

Sub CopyTotals()
    Dim WSD As Worksheet
    Set WSD = Worksheets("P&L")
    Dim WSS As Worksheet
    Set WSS = Worksheets("Statistics")
    Dim ValueToFind As Variant
    Dim c As Range
    Dim CopyToColumn As Integer
    ValueToFind = WSD.Range("L1").Value
    
    Set c = WSS.Columns(17).Find(What:=ValueToFind, _
        LookIn:=xlValues, _
        LookAt:=xlWhole, _
        SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, _
        MatchCase:=False, _
        SearchFormat:=False)
    If c Is Nothing Then Exit Sub
    CopyToColumn = c.Column
    MsgBox "Copy to column" & CopyToColumn
    'Copy from WSD
    WSD.Range("E6:E37").Copy
    'Paste Special to WSS
    WSS.Cells(CopyToColumn, 17).PasteSpecial _
        xlPasteValues
       
End Sub
Länk till kommentar
Dela på andra webbplatser

Tack så mycket.

Makrot fungerar men det händer "inget", inga siffror blir kopierade.

Länk till kommentar
Dela på andra webbplatser

Sådär, här får du kod som faktiskt fungerar även. Det var lite omkastningar mellan kolumn och radindex i anrop vid cells och den sökte även på fel plats på bladet.

Sub CopyTotals()
    Dim WSD As Worksheet
    Set WSD = Worksheets("P&L")
    Dim WSS As Worksheet
    Set WSS = Worksheets("Statistics")
    Dim ValueToFind As Variant
    Dim c As Range
    Dim CopyToColumn As Integer
    ValueToFind = WSD.Range("L1").Value
    
    Set c = WSS.Rows(3).Find(What:=ValueToFind, _
        LookIn:=xlValues, _
        LookAt:=xlWhole, _
        SearchOrder:=xlByRows, _
        SearchDirection:=xlNext, _
        MatchCase:=False, _
        SearchFormat:=False)
    If c Is Nothing Then Exit Sub
    CopyToColumn = c.Column
   ' MsgBox "Copy to column " & CopyToColumn
    'Copy from WSD
    WSD.Range("E6:E37").Copy
    'Paste Special to WSS
    WSS.Cells(4, CopyToColumn).PasteSpecial _
        xlPasteValues
       
End Sub
Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...