23. april 2013 - 07:34Der er
3 kommentarer og 1 løsning
Fordeling af data mellem flere ark ved gentagne opdatering af dataforbindelse
Jeg er igang med en makro, hvor jeg skal fordele nogle data fra et samleark til forskellige års-ark. Samlearket har en dataforbindelse til en underliggende database, hvor brugerne løbende opdatere data fra. Jeg kan ikke få to ting til at fungere:
1) Hvordan får jeg data ind, så de starter på række 6 i de ark, de skal fordeles på - jeg har nemlig en overskrift og anden info på de første linjer?
2) Hvordan får jeg overskrevet de data, der allerede er fordelt, når der sker en opdatering af dataforbindelsen og de nye data sættes ind på række 6 igen i de respektive ark?
Makroen ser sådan ud:
Dim antalRæk As Long Dim a1 As Worksheet, ræk1 As Long, AarsArk As String Dim ax As Worksheet, rækx As Long Public Sub Opdater_fordel()
Sheets("Data_samlet").Select
Set a1 = ActiveWorkbook.Sheets("Data_samlet")
Rem Antal rækker på ark1 antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
Application.ScreenUpdating = False
For ræk1 = 2 To antalRæk Rows(ræk1).Select Selection.Copy
Rem hent nr fra kolonne J AarsArk = Range("J" & ræk1)
Rem aktiver det pågældende ark On Error GoTo fejl
Set ax = ActiveWorkbook.Sheets(AarsArk) ax.Select
If AarsArk <> "" Then Selection.ClearContents Range("B6").Select rækx = ActiveCell.SpecialCells(xlLastCell).Row If rækx = 1 And ax.Range("A1") <> "" Then rækx = rækx + 1 End If
nu er jeg lidt i tvivl om hvad du vil, min kode insætter data i række 6 og skubber gamle data nedad.
Public Sub Opdater_fordel() Dim AntalRæk As Long Dim ræk1 As Long, AarsArk As String With Sheets("Data_samlet") .Activate AntalRæk = .UsedRange.Rows.Count
Application.ScreenUpdating = False
For ræk1 = 2 To AntalRæk Rem hent nr fra kolonne J
AarsArk = .Range("J" & ræk1) If AarsArk <> "" Then .Rows(ræk1).Copy On Error GoTo fejl Sheets(AarsArk).Select On Error GoTo 0 Rows("6:6").Insert Shift:=xlDown End If Next ræk1
Application.ScreenUpdating = True
MsgBox "Opdatering gennemført" End With Exit Sub
fejl: If Err.Number = 9 Then Worksheets.Add ActiveSheet.Name = AarsArk MsgBox "Ark " & AarsArk & " er blevet oprettet" Err.Clear End If
Tak for svar. Det jeg gerne vil, er at fordele data fra et ark (Data_samlet), som har en forbindelse til en database, hvor der løbende sker opdateringer i. Ud fra Data_samlet vil jeg have fordelt data ud på hver sit ark ud fra det årstal, der står i kolonne J. Data skal indsættes i det respektive årsark fra række 6. Når der sker opdatering i databasen, skal de eksisterende data i årsarkene slettes og der skal ske en ny fordeling fra Data_samlet.
Public Sub Opdater_fordel() Dim AntalRæk As Long, ad As String Dim ræk1 As Long, AarsArk As String ' TØMMER ARK For Each Ws In ThisWorkbook.Worksheets If Ws.Name <> "Data_samlet" Then ad = Range("A6").SpecialCells(xlLastCell).Address Ws.Range("A6:" & ad).ClearContents End If Next
With Sheets("Data_samlet") .Activate AntalRæk = .Range("A1").SpecialCells(xlLastCell).Row ' SIDSTE RÆKKE MED DATA
Application.ScreenUpdating = False
For ræk1 = 2 To AntalRæk Rem hent nr fra kolonne J
AarsArk = .Range("J" & ræk1) If AarsArk <> "" Then .Rows(ræk1).Copy On Error GoTo fejl ' VED FEJL OPRET ARK Sheets(AarsArk).Select On Error GoTo 0 ' VED FEJL HEREFTER FORTÆL FEJL Rows("6:6").Insert Shift:=xlDown ' INDSÆTTER DATA I RÆKKE 6 OG SKUBBER DE ANDRE NED End If Next ræk1
Application.ScreenUpdating = True
MsgBox "Opdatering gennemført" End With Exit Sub
fejl: If Err.Number = 9 Then Worksheets.Add ActiveSheet.Name = AarsArk
' HER KAN DU SKRIVE KODE SÅ HOVEDET, PÅ ARKET BLIVER UDFYLDT, DE 5 FØRSTE RÆKKER
MsgBox "Ark " & AarsArk & " er blevet oprettet" Err.Clear End If
Perfekt - det virker lige som det skal. 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.