< návrat zpět
MS Excel
Téma: Limit proměnné VBA - error 6
Zaslal/a pablos0 21.12.2017 20:12
Ahoj, mám soubor, kde je 54000 řádků a cca 20sloupců.
Napsal jsem více verzí maker a z 16ti minut jsem to dokázal stáhnout na 44vteřin výpočtů. Fígl je v tom, že jsem vybrané sloupce nacpal do jediné proměnné tedy například "Data" na která se odkazuju Data(1,2), rychlost makra je pak obrovská.
Nicméně dnes makro ještě dodělávám a potřeboval jsem tam přidat jeden sloupeček navíc a excel začal hlásit error 6, nevíte zda to jde nějak rozšířit?
Když to tak vezmu, potřebuji 54 000 řádků a 5 sloupců (270 000 buněk) celkem do proměnné DataX a do proměnné DataY 54 000 řádků a jiných 5 sloupců (dalších 270 000 buněk), první proměnná data načte úplně v pohodě a druhá hlásí error.
Lze nějak proměnné rozšířit? Nějak se mi nedaří to nacpat do Dim Long, stále hází chybu.
Vovka(21.12.2017 20:55)#038849 Chyba bude jinde. Následuje pokusný kód:
Sub Pokus()
Dim AA, BB
AA = Range("A1:E60000")
BB = Range("F1:K60000")
MsgBox AA(60000, 5) & " " & BB(60000, 5)
End Sub
Zdrojové buňky jsem naplnil a proceduru jsem spustil. Proběhla bez závad bez hlášení jakékoliv chyby.
citovat
pablos0(21.12.2017 21:22)#038850 máte pravdu, vytvořil jsem náhodná data od řádku A1 až V60000 a funguje mi to.
Můj kód je následující ale skončí errorem - sice to nic nevyhodnocuje, ale snažím se prozatím jen nahrát vše do proměnné:
Sub makroo()
Set ListROM = Sheets("ROM")
Set ListVyhodnoceni = Sheets("Vyhodnocení")
VRadku = ListVyhodnoceni.Cells(Rows.Count, "A").End(xlUp).Row
VDataOm = ListVyhodnoceni.Range("K3:O" & VRadku)
VDataRom = ListVyhodnoceni.Range("Q3:U" & VRadku)
End Subcitovat
pablos0(21.12.2017 21:28)#038851 rád bych zaslal excel, ale jde o firemní data, tak bohužel nemohu, ale po přenesení Vašeho scriptu do firemních dat to opět nefunguje, ale nevím kde hledat chybu. Ve sloupcích jsou texty, datumy a prázdné buňky
citovat
marjankaj(21.12.2017 21:51)#038852 To skôr chirurg zoperuje slepé črevo cez SMSky, ako toto tu vyriešime.
A nemalo by tam byť?
SET VDataOm = ListVyhodnoceni.Range("K3:O" & VRadku)
citovat
pablos0(21.12.2017 22:17)#038853
marjankaj(21.12.2017 22:34)#038854 No teda netuším, kde bola chyba, ale keďže je to firemné, tak by ma to ani nemuselo zaujímať.
citovat
pablos0(21.12.2017 22:44)#038855 chyba byla v tom, že v buňce byl text, ale buňka byla nastavená na formát "Datum" - v excelu se to zobrazovalo správně, ale VBA si s tím neporadilo a samotný text "Smlouvy-987654" to dávalo do proměnné, ale jako datum a to skončilo errorem a spadlo celé to makro :). To bylo spíš jen jako vysvětlení :)
citovat
elninoslov(22.12.2017 6:52)#038856 Mne sa nedarí nasimulovať pád makra pri akomkoľvek naformátovaní čohokoľvek krížom krážom. Skúste iba 1 riadok, či dostanete chybu. A skúste aj nadefinovať pole, teda
Sub makroo()
Dim VDataOm()
Dim VDataRom()
Set ListROM = Sheets("ROM")
Set ListVyhodnoceni = Sheets("Vyhodnocení")
VRadku = ListVyhodnoceni.Cells(Rows.Count, "A").End(xlUp).Row
ReDim VDataRom(1 To VRadku, 1 To 5)
ReDim VDataOm(1 To VRadku, 1 To 5)
VDataOm = ListVyhodnoceni.Range("K3:O" & VRadku).Value2
VDataRom = ListVyhodnoceni.Range("Q3:U" & VRadku).Value2
'Na konci
Erase VDataOm
Erase VDataRom
End Sub
Zaujímavá haluška. A to mám polia rád...
citovat
pablos0(24.12.2017 14:28)#038862 elninoslov: Váš kód funguje i při chybném formátu a je to tím, že jste použil ".Value2". V mém kódu to nebylo a vždy došlo k chybě, tímto způsobem to jde také obejít a není třeba hlídat formáty. Děkuji za vylepšení
citovat