Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[Excel 2003] hoe cellen tot 4683 posities vullen via VBA? *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste Mensen,

We zitten hier met een probleempje dat structureel voorkomt. We zijn niet op zoek naar een workaround, maar naar een goeie oplossing tussen excel en VB. (office 2003)

We moeten een groot aantal gegevens overbrengen naar een template, die voor ons bepaald is. Het meeste lukt om op de juiste plaats in de template te laten transporteren. Maar we stuiten steeds op het probleempje runtime error 1004. Dit komt doordat er in bepaalde cellen meer dan de gebruikelijke 911 posities (nl max is 4683 posities) staan.

Weet iemand misschien hoe we dit kunnen oplossen?


thnx Oosje

Verwijderd

Ik begrijp niet helemaal wat je met 'posities' bedoelt? Het aantal tekens in een cel (volgens mij past daar nl wel wat meer in)? Wat voor specificatie krijg je bij error 1004 (kan nl. van alles zijn, maar is altijd terug te voeren op een object dat niet (meer) bestaat/gevonden kan worden)?

Verder zou wat meer info (om wat voor data gaat het; hoe ziet de template eruit; hoe ziet het VB-script eruit; waar komen de gegevens vandaan (bron)) ook handig zijn. ;)

  • MissingDog
  • Registratie: Augustus 2002
  • Niet online
Als je dat soort hoeveelheden data in Excel gaat verwerken ben je in mijn ogen beter af door de data in een Access (of andere) database op te slaan in plaats van in een .XLS en hooguit een data-koppeling te maken als je de de gegevens in Excel wilt benaderen. Excel is niet gemaakt om 4,5KB aan data in een cel op te slaan zoals je al aangeeft...zelfs het maximum van 911 bytes is knap vervelend om mee te gaan schuiven. Als je weet dat je een limiet van 911 bytes per cel hebt....waarom lees je dan een bestand in met 4,5KB per cel? Vanuit Access kan je de data wel weer in een of ander formaat gieten waar je VB applicatie mee overweg kan.

Verwijderd

Topicstarter
Beste Mensen , dank voor jullie reactie.

We zijn al bezig geweeest om alles via acces te laten lopen, maar ook dan komen we weer uit op de template die ons opgedrongen wordt binnen excel. Er zijn nl niet echt veel slimmerikken bij ons die met acces om kunnen gaan.
Wij maken het alleen maar zo dat een ieder die met excel om kan gaan er ook mee kan gaan werken.
Vandaar ook mijn vraag aan jullie of hier iemand is die ons kan helpen,

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Bij mijn weten passen er meer dan 32000 karakters in een cel; waar loop je op stuk? Leg dus nog even goed uit wat je precies waar en waarmee doet (incl stukjes relevante code), ik zie het in ieder geval nu niet dus een direct antwoord is niet te geven.

Los daarvan is Excel inderdaad niet bedoeld voor al te grote datasets, en je kunt Excel prima als front-end (bovenop Access of een ander systeem) blijven gebruiken als de gebruikers niets anders kennen of willen leren kennen.

Ik pas de topictitel trouwens even aan; 'VB probleem' zegt helemaal niets over welk probleem dan of dat het over Excel gaat.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

Topicstarter
Thanx,

dit is een stukje van de macro binnen VB. Wat hij nu doet is alles verplaatsen naar de juiste posities binnen in de template. Alleen nu blijft hij hangen op "Worksheets("tst sheet").Cells(31, 2) = Worksheets("all issues").Cells(i, 28)" hieruit leert ons dat de originele cel te veel posities in beslag heeft genomen ( volgens excel telling 3265 karakters).

Dan komt ie ook met fout 1004 tijdens uitvoering. Wat ons met google'n leerde dat er teveel karakters zaten in een cel en hierbij niet konden worden verplaatst naar een andere cel.

Worksheets("static data").Activate
a = Cells(2, 1).Value


' Nu van onder naar boven de cellen vullen
For i = a To 2 Step -1
Worksheets("tst sheet").Cells(17, 2) = Worksheets("all issues").Cells(i, 1)
Worksheets("tst sheet").Cells(18, 2) = Worksheets("all issues").Cells(i, 2)
Worksheets("tst sheet").Cells(19, 2) = Worksheets("all issues").Cells(i, 3)
Worksheets("tst sheet").Cells(20, 2) = Worksheets("all issues").Cells(i, 4)
Worksheets("tst sheet").Cells(21, 2) = Worksheets("all issues").Cells(i, 6)
Worksheets("tst sheet").Cells(22, 2) = Worksheets("all issues").Cells(i, 7)
Worksheets("tst sheet").Cells(23, 2) = Worksheets("all issues").Cells(i, 8)
Worksheets("tst sheet").Cells(24, 2) = Worksheets("all issues").Cells(i, 9)
Worksheets("tst sheet").Cells(25, 2) = Worksheets("all issues").Cells(i, 10)
Worksheets("tst sheet").Cells(26, 2) = Worksheets("all issues").Cells(i, 11)
Worksheets("tst sheet").Cells(27, 2) = Worksheets("all issues").Cells(i, 24)
Worksheets("tst sheet").Cells(28, 2) = Worksheets("all issues").Cells(i, 25)
Worksheets("tst sheet").Cells(29, 2) = Worksheets("all issues").Cells(i, 26)
Worksheets("tst sheet").Cells(30, 2) = Worksheets("all issues").Cells(i, 27)
Worksheets("tst sheet").Cells(31, 2) = Worksheets("all issues").Cells(i, 28)
Worksheets("tst sheet").Cells(17, 4) = Worksheets("all issues").Cells(i, 12)
Worksheets("tst sheet").Cells(18, 4) = Worksheets("all issues").Cells(i, 14)
Worksheets("tst sheet").Cells(19, 4) = Worksheets("all issues").Cells(i, 15)
Worksheets("tst sheet").Cells(20, 4) = Worksheets("all issues").Cells(i, 16)
Worksheets("tst sheet").Cells(21, 4) = Worksheets("all issues").Cells(i, 17)
Worksheets("tst sheet").Cells(22, 4) = Worksheets("all issues").Cells(i, 18)
Worksheets("tst sheet").Cells(23, 4) = Worksheets("all issues").Cells(i, 19)
Worksheets("tst sheet").Cells(24, 4) = Worksheets("all issues").Cells(i, 20)
Worksheets("tst sheet").Cells(25, 4) = Worksheets("all issues").Cells(i, 21)
Worksheets("tst sheet").Cells(27, 4) = Worksheets("all issues").Cells(i, 29)


' Template regels invoegen
Worksheets("tst sheet").Activate
Rows("1:16").Select
Range("A16").Activate
Selection.Copy
ActiveWindow.SmallScroll Down:=3
Rows("17:17").Select
Selection.Insert Shift:=xlDown
Next i


'
End Sub

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 18:39

Dido

heforshe

Hij is heel erg flauw, ik kreeg hem ook met direct toewijzen zoals hierboven.

Met in test!A12 een string van 32767 bytes gaat dit fout:
code:
1
2
3
Private Sub CommandButton1_Click()
    Worksheets("test2").Cells(1, 1) = Worksheets("test").Cells(12, 1)
End Sub

Dit gaat wel goed
code:
1
2
3
4
5
Private Sub CommandButton1_Click()
    Dim a As String
    a = Worksheets("test").Cells(12, 1)
    Worksheets("test2").Cells(1, 1) = a
End Sub

Wat betekent mijn avatar?


Verwijderd

Topicstarter
thnx, werkt prima, idd een simpele oplossing

oosje

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Lui volk, VBA programmeurs. ;)

Het zal wel met het op de achtergrond casten van de defaultpropertie van een range te maken hebben. Als je keurig benoemt wat je wilt copieren gaat het ook helemaal goed:

code:
1
2
3
4
Sub test()
    Blad1.Cells(1, 2).Formula = Blad2.Cells(1, 2).Formula
    Blad1.Cells(1, 3).Value = Blad2.Cells(1, 3).Value
End Sub


No probs at all. :)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 18:39

Dido

heforshe

En dat is nieuws? :D

Wat betekent mijn avatar?


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

offtopic:
Maak trouwens meteen even een loop j = 1 t/m 29 en gebruik geen .Activate, .Select of SmallScroll: de cursor is alleen nodig en nuttig voor de gebruiker, niet voor de code. Gebruik variabelen of roep ze direct aan. Je hele stuk na ' Template regels invoegen wordt dan twee regels.

Het gaat trouwens duidelijk om VBA ipv VB, dus ik pas de titel nog een beetje aan :)

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

Inderdaad...waarom word je anders programmeur? >:)
Pagina: 1