19. april 2013 - 10:21Der er
25 kommentarer og 1 løsning
VBA: kopier linier ud fra kriterie og indsæt i samme linie i anden fil
Hej Eksperter
Jeg arbejder i Excel 2010 engelsk version.
Jeg har en fil (Fil1) som indeholder en liste med projektnumre i kolonne A, angivelse af aktiv/lukket i kolonne B og et forecast pr. måned i kolonne L til W (ialt 1000 rækker).
I en anden fil (fil2) har jeg den samme opstilling som i Fil1, hvor forecastet pr. måned er fundeet vha formler der linker til en stor datatabel.
Jeg vil gerne lave en VBA kode der skal køres fra Fil1: 1) Kopierer celle A1:A1000 fra Fil1 og indsætter dem i celle A1:A1000 i Fil2 2) I Fil2 skal data fra cellerne i kolonnen L:W kopieres, på alle de projekter der har en markering (et X) i kolonne B (angivelse af at projektet er aktivt) 3) Indsæt de kopierede celler SOM VÆRDIER i Fil1 i de samme rækkenumre som de blev kopieret fra.
Der må IKKE laves om på rækkefølgen af projekterne i kolonne A i Fil1!
Er er nogen der kan hjælpe med det?? Venligst skriv forklaring til hvad der sker i de forskellige linier i VBA'en så jeg har en chance for at forstå hvad der sker i koden.
'2) og 3) Dim c as range for each c in range(wkb2.worksheets(1).range("A1"), wkb2.worksheets(1).range("A1").end(xldown)).cells if lcase(c.offset(0,1).value) = "x" then range(c.offset(0,11), c.offset(0,22)).copy wkb1.worksheets(1).range("L1").offset(c.row -1,0).pastespecial xlvalues end if next
Kan du ikke lige forklarer hvad det er der sker i hver af de her linier. Jeg har nemlig brug for at kunne rette dem lidt til efter at mine ark har ændret sig lidt.
if lcase(c.offset(0,1).value) = "x" then range(c.offset(0,11), c.offset(0,22)).copy wkb1.worksheets(1).range("L1").offset(c.row -1,0).pastespecial xlvalues end if
FileToOpen = Application.GetOpenFilename _ (Title:="Please choose a file to import", _ FileFilter:="Excel Files *.xlsx (*.xlsx),") '' If FileToOpen = False Then MsgBox "No file specified.", vbExclamation, "Duh!!!" Exit Sub Else set wkb2 = Workbooks.Open Filename:=FileToOpen End If
Jeg prøver at køre den i breakmode og med det samme jeg prøver at sætte den igang med F8, så går den ned og fejler:"Compile error: Syntax error" på linien: "Set wkb2 = Workbooks.Open Filename:=FileToOpen"
Hvad betyder denne linie: wkb1.worksheets(1).range("L1").offset(c.row -1,0).pastespecial xlvalues
Jeg syntes nemlig ikke at jeg får indsat mine copierede celler i de korrekte linier..... Området med tal som jeg kopierer i wkb2 starter i celle L1, så derfor skal området som dataene indsættes is i wkb1 vel også starte med L1. Men hvad betyder .offset(c.row -1,0) så?
Koden looper over linjerne i wkb2 og hvis der er x bliver L... kopieret og sat ind i samme række i wkb1. offset sørger for at komme ned i samme række som informationerne kommer fra.
hmmm, jeg forstår ikke hvad det er der går galt...... Kan du gennemskue hvad det er der sker ifht det jeg skriver i #20? Jeg har ændret noget på de celler der henvises til og det offset der laves, så koden nu ser således ud:
Sub test()
Dim wkb1 As Workbook Dim wkb2 As Workbook
Set wkb1 = ActiveWorkbook ' RDPortfolio filen
FileToOpen = Application.GetOpenFilename _ (Title:="Please choose an excel file to import data from", _ FileFilter:="Excel Files *.xls* (*.xls*),") '' If FileToOpen = False Then MsgBox "No file specified.", vbExclamation, "Duh!!!" Exit Sub Else Set wkb2 = Workbooks.Open(Filename:=FileToOpen) ' Consolidation filen End If
'2) og 3) Dim c As Range For Each c In Range(wkb2.Worksheets("Consolidation").Range("B6"), wkb2.Worksheets("Consolidation").Range("B6").End(xlDown)).Cells If LCase(c.Offset(0, -1).Value) = "x" Then Range(c.Offset(0, 1), c.Offset(0, 12)).Copy wkb1.Worksheets("Portfolio file").Range("C6").Offset(c.Row - 1, 0).PasteSpecial xlValues End If Next
End Sub
Så spørgsmålet er om jeg har ændret noget forkert i den sidste linie i koden???
Undskyld ventetiden, jeg er lige blevet hængt op af et budget! Jeg har ikke nået at teste din rettelse i #23, så vil gerne lige holde den åben. .....jeg forstår dog ikke hvorfor det skal være C1 istedet for C6.....?
Så fik jeg endelig testet færdig. Det med offset har jeg ikke arbejdet med før, så det gav mig nogle udfordringer ifht at få rettet koden til så den passede i min originale fil som var noget anderledes end det eksempel jeg havde opstillet i dette spørgsmål. Men det lykkedes :-)
Mange tak for hjælpen.
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.