04. april 2007 - 11:39Der er
7 kommentarer og 1 løsning
Udvælge data ud fra variabel og kopiere til andet ark
Jeg har en lang række ark - et for hvert projektnr.
Og jeg har et ark med data for alle projekterne. Der kan være et variabelt antal linier for hvert projekt. Hver række består af data der står fra kolonne A til P. Projektnr. står i kolonne D. Data er sorteret ud fra projektnr.
Nu skal jeg have lavet en makro, der kopiere rækker fra arket data til de enkelte ark for projekterne. Jeg forestiller mig, at jeg står i arket "Projekt 1001" og aktiverer makroen. Den skal så hente data fra arket "data" som vedrører dette projektnr.
Rem Koden anbringes i Module - evt. forbindes med "en knap" Rem projektArk hedder Projekt xxxx Dim detteArk, detteProjekt, denLedigeRæk Sub opdaterFraData() Rem hent data om projekt-ark
denLedigeRæk = førsteLedigerække 'første ledige række i projekt - ellers sæt den til 1 detteArk = ActiveSheet.Name detteProjekt = Mid(ActiveSheet.Name, 9)
Rem Hent data fra data-ark findData Val(detteProjekt) End Sub Private Sub findData(pnr) ActiveWorkbook.Sheets("data").Activate antalræk = ActiveCell.SpecialCells(xlLastCell).Row For r = 1 To antalræk If Cells(r, 4) = pnr Then Range("A" + CStr(r) + ":P" + CStr(r)).Select Selection.Copy ActiveWorkbook.Sheets(detteArk).Select Cells(denLedigeRæk, 1).Select ActiveSheet.Paste Cells(denLedigeRæk, 4).Select Exit Sub End If Next r End Sub Private Function førsteLedigerække() For r = 1 To 65000 If Cells(r, 4) = "" Then førsteLedigerække = r Exit Function End If Next r End Function
Koden sletter det der står i forvejen. Om du kalder det ark som der skal data over på, for "Projekt 1001" eller kun "1001", er lige meget, koden tager det der står efter det sidste mellemrum i navnet, ellers kun navnet.
Public Sub OverførData() Dim Data As Variant, I As Long, R As Long, T As Integer, Søg As Integer, A As Variant Data = ActiveWorkbook.Sheets("data").UsedRange A = Split(ActiveSheet.Name, " ") Søg = A(UBound(A)) Application.ScreenUpdating = False ActiveSheet.UsedRange.ClearContents For T = 1 To UBound(Data, 2) Cells(1, T) = Data(1, T) ' overskrifter, fra data arket, ' jeg går ud fra at de står i første række Next R = 2 ' starter i række 2 For I = 2 To UBound(Data) If Data(I, 4) = Søg Then For T = 1 To UBound(Data, 2) Cells(R, T) = Data(I, T) Next R = R + 1 End If Next Application.ScreenUpdating = True End Sub
ActiveWorkbook.Sheets("Timeregistrering").Activate antalræk = ActiveCell.SpecialCells(xlLastCell).Row 'finder antallet af rækker i arket
For R = 1 To antalræk If Cells(R, 4) = pronr Then Range("A" + CStr(R) + ":P" + CStr(R)).Select Selection.Copy ActiveWorkbook.Sheets(detteArk).Select Cells(denledigeRæk, 1).Select ActiveSheet.Paste denledigeRæk = denledigeRæk + 1 End If Next R
End Sub
Men .... det er som om den kun finder den første linie i arket "Timeregistrering" og så stopper der. Er det "next" funktionen jeg har lavet ged i?
ActiveWorkbook.Sheets("Timeregistrering").Activate antalræk = ActiveCell.SpecialCells(xlLastCell).Row 'finder antallet af rækker i arket
For R = 1 To antalræk If Cells(R, 4) = pronr Then Range("A" + CStr(R) + ":P" + CStr(R)).Copy ActiveWorkbook.Sheets(detteArk).Cells(denledigeRæk, 1) denledigeRæk = denledigeRæk + 1 End If Next R
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.