02. december 2005 - 20:51Der er
40 kommentarer og 2 løsninger
Prøver igen?!
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 har fået her på eksperten nedenstående makro som 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 i salgsoversigt filen skriver det antal kilo kunden har købt.
Problemet er at jeg nu har 15 salgsoversigt filer dvs. at hvis kundensnr starter med 15 så skal der overføres til filen salgsoversigt15.xls, hvis kundensnr starter med 16 så skal der overføres til filen salgsoversigt16.xls. Er der nogen der kan hjælpe?
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
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
Jeg er ikke lige helt sikker på hvor kundenummeret læses i din makro, men du skal bruge noget lignende det her. Nedenstående skal stå efter at du har læst kundenummeret.
Startnr er i kolonne A 145623 Jens Jensen Det er præcis som du skriver StartNr = Left(Format(Kundenr, "0"), 2) den skal bare søge i kolonne A. og derefter hvis startnr er lige med 14 så skal der åbnes d:\salgsoversigt14.xls sSalesFile As String = "d:\salgsoversigt" & StartNr & ".xls"
Nu vej jo ikke hvor store dine filer er, men i princippet kan du jo blot åbne dem alle sammen til at starte på, og så lukke dem, når du er færdig. Det er den enkle metode. Ulempen her er at du måske åbner filer, der ikke skal opdateres.
Så kan du selvfølgelig vælge at lave en løkke, der løber fra 1 til 15, der så starter med at undersøge om Left(Format(Val(wksImport.Cells(lRowFrom, 1).Value), "0"), 2) er lig med det aktulle tal, og så eksekverer resten af koden. Ulmepen her er at du altid skal løbe alle dine data igennem 15 gange.
Det kan jeg godt. Du må dog lige bære over med, at jeg måske ikke har sat mig helt ind i den eksisterende kode, så det er ikke sikkert, at jeg lige rammer ind i den korrekte placering af løkken med det samme.
Private Sub CommandButton1_Click() Const sSalesFileN As String = "d:\salgsoversigt" 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
For FileNo = 1 To 15 Set wkbSales = Application.Workbooks.Open(FileName:=sSalesFile & FileNo) 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 If Left(Format(Val(wksImport.Cells(lRowFrom, 1).Value), "0"), 2) = FileNo Then 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
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 End If Next lRowFrom
wkbSales.Close savechanges:=True Set wksView = Nothing Set wkbSales = Nothing Next FileNo
CleanUp: Set wksImport = Nothing Set wkbNew = Nothing End Sub
jeg har prøvet med FileNo = Left(Format(Val(wksImport.Cells(lRowFrom, 1).Value), "0"), 2) men får stadig fejlmeddelse aplication defined or object defined error
efter jeg har indsat: sSalesFile = sSalesFileN & FileNo & ".xls" Set wkbSales = Application.Workbooks.Open(FileName:=sSalesFile) nu får jeg fejlmeddelse her: Dim wkbSales As Excel.Workbook
mangler der ikke det her: FileNo = Left(Format(Val(wksImport.Cells(lRowFrom, 1).Value), "0"), 2)
Ok ! efter jeg har indsat: sSalesFile = sSalesFileN & FileNo & ".xls" Set wkbSales = Application.Workbooks.Open(FileName:=sSalesFile) nu får jeg fejlmeddelse her: Dim wkbSales As Excel.Workbook
jeg har inaktiveret Dim wkbSales As Excel.Workbook men får fejlmeddelse aplication defined or object defined error
se her: Private Sub CommandButton1_Click() Const sSalesFileN As String = "d:\salgsoversigt" 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. sSalesFile = sSalesFileN & FileNo & ".xls" Set wkbSales = Application.Workbooks.Open(Filename:=sSalesFile) 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
For FileNo = 1 To 15 Set wkbSales = Application.Workbooks.Open(Filename:=sSalesFile & FileNo) 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 If Left(Format(Val(wksImport.Cells(lRowFrom, 1).Value), "0"), 2) = FileNo Then 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
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 End If Next lRowFrom
wkbSales.Close savechanges:=True Set wksView = Nothing Set wkbSales = Nothing Next FileNo
CleanUp: Set wksImport = Nothing Set wkbNew = Nothing End Sub
Det er fordi de to linier jeg skrev er sat in forkert. Prøv med denne her i stedet
Private Sub CommandButton1_Click() Const sSalesFileN As String = "d:\salgsoversigt" 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
For FileNo = 1 To 15 sSalesFile = sSalesFileN & FileNo & ".xls" 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 If Left(Format(Val(wksImport.Cells(lRowFrom, 1).Value), "0"), 2) = FileNo Then 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
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 End If Next lRowFrom
wkbSales.Close savechanges:=True Set wksView = Nothing Set wkbSales = Nothing Next FileNo
CleanUp: Set wksImport = Nothing Set wkbNew = Nothing End Sub
Det var dejligt at det virker og igen mange tak for hjælpen, men hvis du keder kan du kigge på følgende Der var ingen kunder som har købt noget i salgsoversigt15 og derfor blev ingen data overført og alle celler i mit regneark update farvedes røde. Er det muligt at lave sådan at nye kunder som ikke findes i salgsoversigt1 bliver farvet røde, nye kunder som ikke findes i salgsoversigt farves gule osv.
Jeg sov åbenbart også i går. Jeg troede du havde accepteret mit svar, selvom du ikke havde fået løst problemet. Jeg så ikke at du selv havde taget point også. Så var der jo ingen grund til bekymring.
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.