Avatar billede alen32 Nybegynder
12. november 2005 - 14:01 Der er 9 kommentarer og
2 løsninger

Ekspert udfodring?

Hej!
Hver måned får jeg en fil med 2 kolonner: i kolonne A er kundens nummer og navn, mens i kolonne B er antal kilo han har købt på en måned.
eks.
A                    B
145623 Jens Jensen    320
Jeg har en anden fil som jeg kalder salgsoversigt hvor jeg har kolonne A med kundens nr., kolonne B med kundens navn og kolonne c - z er antal kilo som kundens har købt fra januar 2004 frem til nu.
A      B            C(jan.04) d(feb.04)
123456  Nils Jensen  245      300  osv.

Jeg vil gerne at programmet  overfører det antal kilo kunden har købt i denne måned til min salgsoversigt fil dvs programmet finder den samme kunde og i kolonne AA skriver det antal kilo kunden har købt.
Hvis kunden ikke findes i salgsoversigt så skal der oprettes en ny linie med kunde nr,navn og antal kilo kunden har købt.
12. november 2005 - 16:50 #1
Den er nem.
12. november 2005 - 20:25 #2
Denne makro er ikke testet, så det må du lige selv gøre.
Du skal kun have åbnet filen med de nye data.
Er der noget du ikke kan finde ud af, så skriv.

Public Sub Exp663895()
    Const sSalesFile As String = "C:\Temp\SalesView.xls" 'Skal ændres
    Const sSalesSheetName As String = "Sheet1" 'Skal ændres
    Dim wkbNew As Excel.Workbook
    Dim wkbSales As Excel.Workbook
    Dim wksImport As Excel.Worksheet
    Dim wksView As Excel.Worksheet
    Dim lRowFrom As Long
    Dim lRowTo As Long
    Dim bFound As Boolean

    On Error GoTo CleanUp
    Set wkbNew = ActiveWorkbook
    Set wksImport = wkbNew.ActiveSheet
    Set wksView = Application.Workbooks.Open(Filename:=sSalesFile)

    For lRowFrom = 1 To wksImport.UsedRange.Rows.Count
        bFound = False
       
        For lRowTo = 1 To wksView.UsedRange.Rows.Count

            If wksImport.Cells(lRowFrom, 1).Value = _
              wksView.Cells(lRowTo, 1).Value Then

                wksView.Cells(lRowTo, 1).End(xlToRight).Offset(0, 1).Value = _
                    wksImport.Cells(lRowFrom, 2).Value
                bFound = True
                Exit For

            End If

        Next lRowTo

        If Not bFound Then
            'Cellen bliver rød, hvis ikke den er overført til opsummeringsarket
            wksImport.Cells(lRowFrom, 1).Interior.ColorIndex = 3
        End If
    Next lRowFrom


CleanUp:
    Set wksImport = Nothing
    Set wksView = Nothing
    Set wkbNew = Nothing
    Set wkbSales = Nothing
End Sub
Avatar billede alen32 Nybegynder
13. november 2005 - 08:46 #3
Makroen åbner filen salgsoversigt men overfører ikke tallene.Der kommer ingen fejlmeddelelse.
Muligvis skyldes fejlen det her:
I mit regneark "update" som jeg får hver måned er kundens nr og kundens navn i samme kolonne nemlig kolonne A, mens i mit ragneark salgsoversigt er kunde nr i kolonne A og kunde navn i kolonne B.
13. november 2005 - 13:48 #4
Ændre if-sætningen til:
If Val(wksImport.Cells(lRowFrom, 1).Value) = _

det skulle virke, hvis kundenr. står først.
Avatar billede alen32 Nybegynder
13. november 2005 - 15:17 #5
Det er ikke hjulpet. Makroen åbner filen salgsoversigt men overfører ikke tallene.Der kommer ingen fejlmeddelelse.
13. november 2005 - 16:17 #6
Vil du sende mig filerne eller et uddrag af dem, så fixer vi lige det sidste. fvd@smartoffice.dk
Avatar billede alen32 Nybegynder
13. november 2005 - 19:44 #7
Filerne er sendt.
13. november 2005 - 20:03 #8
Private Sub CommandButton1_Click()
'Public Sub Exp663895()
    Const sSalesFile As String = "d:\salgsoversigt.xls" 'Skal ændres
    Const sSalesSheetName As String = "Ark1" 'Skal ændres
    ' sCellToWriteIn - Skal ændres hver måned, så der skrives i den
    ' rigtige kolonne det er nødvendigt fordi kolonnen ikke kan findes
    ' automatisk, når ikke der er tal i alle celler.
    Const sCellToWriteIn As String = "Z1"
    Dim wkbNew As Excel.Workbook
    Dim wkbSales As Excel.Workbook
    Dim wksImport As Excel.Worksheet
    Dim wksView As Excel.Worksheet
    Dim lRowFrom As Long
    Dim lRowTo As Long
    Dim bFound As Boolean

    'On Error GoTo CleanUp
    Set wkbNew = ActiveWorkbook
    Set wksImport = wkbNew.ActiveSheet
    Set wkbSales = Application.Workbooks.Open(Filename:=sSalesFile)
    Set wksView = wkbSales.Worksheets(sSalesSheetName)

    ' 2-tallet her bestemmer hvilken række det første kundenr findes i (Update-filen)
    For lRowFrom = 2 To wksImport.UsedRange.Rows.Count
        bFound = False
       
        ' 3-tallet her bestemmer hvilken række det første kundenr findes i (Salgsview-filen)
        For lRowTo = 3 To wksView.UsedRange.Rows.Count

            If Val(wksImport.Cells(lRowFrom, 1).Value) = _
              wksView.Cells(lRowTo, 1).Value Then

                wksView.Cells(lRowTo, wksView.Range(sCellToWriteIn).Column).Value = _
                    wksImport.Cells(lRowFrom, 2).Value
                bFound = True
                Exit For

            End If

        Next lRowTo

        If Not bFound Then
            'Cellen bliver rød, hvis ikke den er overført til opsummeringsarket
            wksImport.Cells(lRowFrom, 1).Interior.ColorIndex = 3
        End If
    Next lRowFrom


CleanUp:
    Set wksImport = Nothing
    Set wksView = Nothing
    Set wkbNew = Nothing
    Set wkbSales = Nothing
'End Sub
End Sub
Avatar billede alen32 Nybegynder
13. november 2005 - 20:39 #9
Den virker så længe det er en eksisterende kunde, men hvis der er en ny kunde oprettes ikke en ny linie i salgsoverigt filen med kundens navn og mængde. Kunden bliver bare markeret med rødt.
14. november 2005 - 07:48 #10
Nej, de nye kunder bliver RØDE i Update arket - dem må du oprette manuelt (læs at jeg ikke laver det for dig)
Avatar billede alen32 Nybegynder
14. november 2005 - 10:40 #11
Ok, du får 100 point.
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