Avatar billede vegaz Juniormester
24. marts 2015 - 21:18 Der er 6 kommentarer og
1 løsning

VBA: Dataoverførsel mellem workbooks (+ lastrow)

Godaften :)

Jeg prøver at overfører data mellem en master data workbook og så den her CIF Liste. Det går egentlig også fint nok, men den bliver ved at overskrive det gamle data. Men den indsætter det på samme rækkes plads som den stod i min master data fil. Jeg vil gerne ha den til at skrive det efter den sidste række.


Sub CopyData()
    Dim wkbCurrent, wkbNew As Workbook
    Set wkbCurrent = ActiveWorkbook
    Dim valg, c As Range
    Set valg = Selection
    Dim wkbPath, wkbFileName, lastRow As String
 
    wkbPath = ActiveWorkbook.Path & "\"
    wkbFileName = Dir(wkbPath & "CIF LISTEN.xlsm")

    Set wkbNew = Workbooks.Open(wkbPath & "CIF LISTEN.xlsm")
       
    For Each c In valg.Cells
        wkbCurrent.ActiveSheet.Range("A" & c.Row).Copy Destination:=wkbNew.Worksheets(1).Cells(13, 1).Range("B" & c.Row)
        wkbCurrent.ActiveSheet.Range("B" & c.Row).Copy Destination:=wkbNew.Worksheets(1).Cells(13, 2).Range("D" & c.Row)
        wkbCurrent.ActiveSheet.Range("D" & c.Row).Copy Destination:=wkbNew.Worksheets(1).Cells(13, 2).Range("F" & c.Row)
    Next
 
    Range("A10").Value = "COMMENTS: " & Selection.Rows.Count & " Suppliers Added"
 
    MsgBox "COMMENTS: " & Selection.Rows.Count
    ' wkbNew.Close False
    ' wkbfilename = Dir
    End Sub


Mvh
25. marts 2015 - 05:59 #1
dim lrow as long

For Each c In valg.Cells
lrow = wkbNew.Worksheets(1).range("A1").offset(wkbNew.Worksheets(1).rows.count-1,0).end(xlup) + 1

        wkbCurrent.ActiveSheet.Range("A" & c.Row).Copy Destination:=wkbNew.Worksheets(1).Cells(13, 1).Range("B" & lrow)
        wkbCurrent.ActiveSheet.Range("B" & c.Row).Copy Destination:=wkbNew.Worksheets(1).Cells(13, 2).Range("D" & lrow)
        wkbCurrent.ActiveSheet.Range("D" & c.Row).Copy Destination:=wkbNew.Worksheets(1).Cells(13, 2).Range("F" & lrow)
    Next
Avatar billede vegaz Juniormester
25. marts 2015 - 12:09 #2
Jeg får en Run-time error '13': Type mismatch
når jeg bruger din kode der.

Hvis jeg ændrer A1 til A13 får jeg denne error:
Run-time error '1004': Application-defined or object defined error.

Det kopieret data skal starte starte i A13, B13, osv. men skal ikke overwrite det gamle :)
25. marts 2015 - 12:14 #3
Det er da også en lidt mystisk konstruktion du har valgt.
Prøv med

dim lrow as long

For Each c In valg.Cells
lrow = wkbNew.Worksheets(1).range("A1").offset(wkbNew.Worksheets(1).rows.count-1,0).end(xlup).row + 1

        wkbCurrent.ActiveSheet.Range("A" & c.Row).Copy Destination:=wkbNew.Worksheets(1).Range("B" & lrow)
        wkbCurrent.ActiveSheet.Range("B" & c.Row).Copy Destination:=wkbNew.Worksheets(1).Range("D" & lrow)
        wkbCurrent.ActiveSheet.Range("D" & c.Row).Copy Destination:=wkbNew.Worksheets(1).Range("F" & lrow)
    Next
Avatar billede vegaz Juniormester
25. marts 2015 - 13:00 #4
Sådan er det vel når man er ny til det, prøver jo at lære.
Hvordan foreslår du ellers at man gør det? :)

Synes stadig ikke det virker, men det har måske noget med min konstruktion at gøre? Altså den giver ingen fejl nu, men hvis jeg vælger flere, så skriver den kun den sidst valgte og overwriter første i B.
25. marts 2015 - 13:02 #5
dim lrow as long

For Each c In valg.Cells
lrow = wkbNew.Worksheets(1).range("B1").offset(wkbNew.Worksheets(1).rows.count-1,0).end(xlup).row + 1

        wkbCurrent.ActiveSheet.Range("A" & c.Row).Copy Destination:=wkbNew.Worksheets(1).Range("B" & lrow)
        wkbCurrent.ActiveSheet.Range("B" & c.Row).Copy Destination:=wkbNew.Worksheets(1).Range("D" & lrow)
        wkbCurrent.ActiveSheet.Range("D" & c.Row).Copy Destination:=wkbNew.Worksheets(1).Range("F" & lrow)
    Next

Ikke så mærkeligt - regnede med at du havde data i kolonne A i wkbNew, men det ser ikke ud til at være tilfældet.
Avatar billede vegaz Juniormester
25. marts 2015 - 13:13 #6
Perfekt, tak! Nu ser det ud til at det virker :)

Min Selection.Rows.Count virker dog ikke, den giver bare 1 uanset, vil gerne skrive i A10 en kommentar med hvor mange jeg har "importeret".

Er det muligt?

Range("A10").Value = "COMMENTS: " & Selection.Rows.Count & " Suppliers Added"
Avatar billede vegaz Juniormester
25. marts 2015 - 14:21 #7
Sub Count_Selection()
    Dim cell As Object
    Dim count As Integer
    count = 0
    For Each cell In Selection
        count = count + 1
    Next cell
    MsgBox count & " item(s) selected"
End Sub
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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