Avatar billede srsten Nybegynder
23. april 2013 - 07:34 Der 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
           
            ActiveSheet.Rows(CStr(rækx)).Select
            Selection.Insert Shift:=xlDown
            Application.CutCopyMode = False
           
        End If
        a1.Select
        Application.CutCopyMode = False
    Next ræk1
   
    Application.ScreenUpdating = True
   
    MsgBox "Opdatering gennemført"
    Exit Sub
   
fejl:
    If AarsArk <> "" Then
        MsgBox "Ark " & AarsArk & " er ikke oprettet"
    End If
   
    Application.CutCopyMode = False
    AarsArk = ""
    Resume Next
End Sub



På forhånd tak for hjælpen
Avatar billede kabbak Professor
23. april 2013 - 20:39 #1
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
   
    Resume Next
End Sub
Avatar billede srsten Nybegynder
24. april 2013 - 08:13 #2
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.

Giver det mening?
Avatar billede kabbak Professor
24. april 2013 - 19:52 #3
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
   
    Resume Next
End Sub
Avatar billede srsten Nybegynder
25. april 2013 - 08:20 #4
Perfekt - det virker lige som det skal. Tak for hjælpen
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB