• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Limiet dbf

  • Onderwerp starter Onderwerp starter Imod
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Imod

Gebruiker
Lid geworden
13 nov 2003
Berichten
481
Hallo, ik heb een vraag;

Wij werken nog met Excel 2000
In Excel maken wij van 14 kolommen een database/selectie en slaan deze op in een dbf file
Deze dbf file lezen wij in een ander prog. in.
De database wordt steeds langer door steeds meer uitbreidingen in excel.
Het inlezen van de selectie ging altijd goed maar nu we over de 6000 regels komen
kapt Excel de ingelezen dbf af op 6000 regels, de rest wordt niet ingelezen.
Heeft een dbf file een limiet van 6000 regels?? weet iemand dat??

mvg Imod
 
Mijn excel bestand blad 1 heeft meer dan 6000 regels.
Hier houdt de dbf op met inlezen.
Nu wil ik de selectie door de macro in 2 gedeelten laten inlezen.
Ik lees nu een selectie in (14 kolommen) met onderstaande marco.
Ik zal de werking even uitleggen:
Het actieve excelbestand wordt opgeslagen.
De selectie A1: "Einde database"(dit is een celnaam) wordt geselecteerd en ingelezen.
Dit wordt tijdelijk in leeg.xls gezet.(dbf opslaan mag maar 1 werkblad zijn)
Leeg.xls wordt opgeslagen als begroot.dbf
Leeg.xls wordt NIET opgeslagen - zie alles hieronder.

Sub Inlezengeheleblad()
ActiveWorkbook.Save
Range("A1:Einde_database").Select
Selection.Copy
Workbooks.Add Template:= _
"F:\Docs\Bedrijfsgegevens\Standaard Brieven\Begroting\leeg.xls"
Range("A3").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:="F:\Docs\Begroting\begroot.dbf", FileFormat _
:=xlDBF3, CreateBackup:=False
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
End Sub


Nu mijn vraag
Ik kan de macro 2 keer achter elkaar zetten maar dit kan denk ik korter,
Ik wil de selectie in 2 gedeelten opslaan via leeg.xls
1e van A1 tot "Midden_database" -- opslaan in begroot1.dbf
2e van "Midden_database" tot "Einde_database" -- opslaan in begroot2.dbf

Hoe kan ik de macro zo kort mogelijk aanpassen.
Moet wel via leeg.xls en eventueel kan ik ook nog een leeg2.xls bij maken(indien nodig)
 
Voeg je code samen met de gedachte achter deze code die ik net schreef:

Code:
Sub selecteren()
Dim c As Range
For Each c In Range("A1:A4,B1:B4").Areas
    c.Select
    MsgBox True
Next
End Sub

Snappie?

Wigi
 
Ik kom niet verder dan:
Code:
Sub overzetten()
Dim aantal, aantal_regels As Long

    aantal_regels = Range("a65536").End(xlUp).Row
    aantal = aantal_regels / 2
    
    Range("A1", "A" & aantal).Copy
    Workbooks.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWorkbook.SaveAs Filename:="F:\Docs\Begroting\begroot1.dbf"
    
    Windows("Map1").Activate
    Windows("begroot1.dbf").Close
    
    Range("A" & (aantal + 1), "A" & aantal_regels).Copy
    Workbooks.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWorkbook.SaveAs Filename:="F:\Docs\Begroting\begroot2.dbf"
    
    Windows("Map1").Activate
    Windows("begroot2.dbf").Close
    
End Sub
 
Ik kom zo tot een werkende macro

Sub Inlezengeheleblad()
ActiveWorkbook.Save
Range("A1:Midden1_database").Select
Selection.Copy
Workbooks.Add Template:= _
"F:\Docs\Bedrijfsgegevens\Standaard Brieven\Begroting\leeg.xls"
Range("A3").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:="F:\Docs\Begroting\begroot1.dbf", FileFormat _
:=xlDBF3, CreateBackup:=False
ActiveWorkbook.Saved = True
ActiveWorkbook.Close

Range("Midden2_database:Einde_database").Select
Selection.Copy
Workbooks.Add Template:= _
"F:\Docs\Bedrijfsgegevens\Standaard Brieven\Begroting\leeg.xls"
Range("A3").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:="F:\Docs\Begroting\begroot2.dbf", FileFormat _
:=xlDBF3, CreateBackup:=False
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
End Sub
 
Code:
Sub Inlezengeheleblad()
ActiveWorkbook.Save

Range("A1:Midden1_database").Copy
Workbooks.Add Template:="F:\Docs\Bedrijfsgegevens\Standaard Brieven\Begroting\leeg.xls"
Range("A3").PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:="F:\Docs\Begroting\begroot1.dbf", FileFormat:=xlDBF3
'denk dat de volgende regel er ook uit kan
'ActiveWorkbook.Saved = True
ActiveWorkbook.Close

Range("Midden2_database:Einde_database").Copy
Workbooks.Add Template:="F:\Docs\Bedrijfsgegevens\Standaard Brieven\Begroting\leeg.xls"
Range("A3").PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:="F:\Docs\Begroting\begroot2.dbf", FileFormat:=xlDBF3
'denk dat de volgende regel er ook uit kan
'ActiveWorkbook.Saved = True
ActiveWorkbook.Close

End Sub

Misschien kan deze ook nog in een loop als je je bereiken een andere naam geeft?
database_locatie_1 tm 4 oid.

ps.Graag de code tags gebruiken voor als je code post :).
Hier door is er meer overzicht op wat er precies staat.
Bedankt.
 
Laatst bewerkt:
Probeer deze eens:
Let wel op!!!!!! Hierin moeten je bereiken wel met database_locatie beginnen!! vb: database_locatie1 voor begin database.

Code:
Sub Inlezengeheleblad()
Dim x As Integer

ActiveWorkbook.Save

    For x = 0 To 2
        'Hierin moeten je bereiken wel met database_locatie beginnen!! vb: database_locatie1
        Range(database_locatie & x + 1, database_locatie & x + 2).Copy
        Workbooks.Add Template:="F:\Docs\Bedrijfsgegevens\Standaard Brieven\Begroting\leeg.xls"
        Range("A3").PasteSpecial Paste:=xlValues
        Application.CutCopyMode = False
        ActiveWorkbook.SaveAs Filename:="F:\Docs\Begroting\begroot" & x + 1 & ".dbf", FileFormat:=xlDBF3
        ActiveWorkbook.Saved = True
        ActiveWorkbook.Close
        x = 1
    Next

End Sub
 
Ik zelf heb eigenlijk altijd de paden naar de files boven gedeclareerd.
Dan is het nog iets overzichtelijker en als je je paden wilt veranderen gaat dat ook wat sneller :).

Code:
Sub Inlezengeheleblad()
Dim x As Integer
Dim y as Integer

pad_naar_template = "F:\Docs\Bedrijfsgegevens\Standaard Brieven\Begroting\"
pad_naar_file = "F:\Docs\Begroting\"

ActiveWorkbook.Save

y = 1

    For x = 0 To 2
        'Hierin moeten je bereiken wel met database_locatie beginnen!! vb: database_locatie1
        Range("database_locatie" & x + 1, "database_locatie" & x + 2).Copy
        Workbooks.Add template:=pad_naar_template & "leeg.xls"
        Range("A3").PasteSpecial Paste:=xlValues
        Application.CutCopyMode = False
        ActiveWorkbook.SaveAs Filename:=pad_naar_file & "begroot" & y & ".dbf", FileFormat:=xlDBF3
        ActiveWorkbook.Saved = True
        ActiveWorkbook.Close
        x = 1
        y = 2
    Next

End Sub
 
Laatst bewerkt:
Hallo Ferenc;

Als ik het goed begrijp selecteer je een gebied met database_locatie1
Nadeel hiervan is dat je een vast gebied selecteer bv A1 tot N3000
en A3001 tot N6000
Wat ik inlees zijn groepen en als je deze groepen aanvuld dan kan je door verschuiving midden in een groep vallen(misschien kan dit wel)
Maar je leest denk ik alles gelijk 1x in in leeg.xls en dat geeft denk ik weer die beperking van 6000 regels.
Ik zal dit morgen testen op mijn werk.
 
Imod,

Wat de laatste code doet is:
Range kopieeren met de naam welke zit tussen database_locatie1 en database_locatie2
deze kopieren we naar begroot1

Door de loop komen we nog een keer in het zelfde rideltje alleen nu kopieeren we bereik
database_locatie3 tm database_locatie4 naar begroot2

in princiepe hetzelfde zoals jij het doet alleen met ander "groep" namen.
 
Hallo Ferenc;
Ik krijg een fout melding
"Fout 1004 tijdens uitvoering"
Methode Range van object is mislukt

Geel gekleurd is:
Range(database_locatie & x + 1, database_locatie & x + 2).Copy

Cel A1 => database_locatie1
Cel N3011 => database_locatie2
Cel A3012 => database_locatie3
Cel N6971 => database_locatie4

Misschien iets met de celnamen??
 
Oeps mijn fout. :o
Moeten nog " " om database_locatie
Code:
Range("database_locatie" & x + 1, "database_locatie" & x + 2).Copy
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan