Hirdetés
- NvidiaRTX: Xiaomi Electric Scooter 6 Max: Az első rollerem
- Luck Dragon: Asszociációs játék. :)
- Luck Dragon: Óraátállítás
- Hieronymus: Hogyan parkolj hátramenetben profi módon
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- sziku69: Fűzzük össze a szavakat :)
- sziku69: Szólánc.
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- bambano: Bambanő háza tája
Új hozzászólás Aktív témák
-
Delila_1
veterán
válasz
alexy92
#2861
üzenetére
A bemásolt tengeri kígyóban ilyen részletek vannak:
Range("C1").Select
ActiveCell.Offset(1, 0).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("invoices_masterfile.xlsm").Activate
Worksheets("main").Activate
Range("H" & Rows.Count).End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks _
:=False, Transpose:=FalseSelect utasítások nélkül
usor = Range("C1").End(xlDown).Row
Range("C2:C" & usor).Copy
With Workbooks("invoices_masterfile.xlsm").Sheets("main")
usor = .Range("H" & Rows.Count).End(xlUp).Row + 1
.Range("H" & usor).PasteSpecial Paste:=xlPasteValues
End WithLátod, az usor változót felhasználtam a másoláshoz. Az adatok már ott csücsülnek a vágólapon, a másik füzet egyik lapján új értéket rendelhetek hozzá, jelen esetben a H oszlop első üres sorának a számát.
A Select utasítások ráállnak az adott füzet adott lapjára, ott is bizonyos cellá(k)ra. Ez időveszteség, ráadásul ugrál a kép.Végül
If Err.Number <> 0 Then
sub3
Else
On Error GoTo 0
sub2
End If -
Ispy
nagyúr
válasz
alexy92
#2863
üzenetére
Ezt megcsináltad? Minden subrutinba rakd be az Err.Clear-t, mert szerintem amikor hiba után bemegy egy hiba sub-ba, akkor megtartja az eredeti hiba értékét és ezért a 2. körben is a hiba sub-ba fog menni, annak ellenére, hogy ott nincsen hiba.
Szóval minden sub elejére rakjad be, hogy Err.Clear....
-
Ispy
nagyúr
válasz
alexy92
#2855
üzenetére

Na, a feladat a következő: ezt az egészet mentsed el, tedd félre. Nincs az az isten, hogy tapasztalat nélkül ebbe a kóddzsungelben bármit is megtaláljál.
Utána kezd el 0-ról, apránként, minimális kóddal. Ha megy, akkor adjál hozzá még egy részt, és így tovább. Ha nem megy, akkor állj meg és akkor térjünk vissza rá.
-
válasz
alexy92
#2857
üzenetére
Első körben a felesleges Select és Activate sorokat vedd ki:
- két (vagy több) select egymás után felesleges, csak az utolsó maradjon meg (kiváve, ah a következőben fel van használva a selection, de ezeket inkább egy sorba kell tömöríteni
- aktív sheet-et vagy workbook-ot újra aktiválni felesleges
- a valami.Select + Selected.Value = ... felesleges, helyette valami.Value = ... elég, nem kell kijelölni, ráadásul gyorsabb is
- ha nem Select-tel dolgozol, hanem közvetlen referenciával, akkor nem kell Activate és Select:Workbooks("Workbook.xls").Worksheet("Sheetnév").Range("CellaReferencia").Value = "valami"
- Copy/PasteSpecial:value helyett sokkal (!) gyorsabb az Array copy: [link] -
Ispy
nagyúr
válasz
alexy92
#2851
üzenetére
Nem nagyon programoztam még excelben, szóval az én elképzelésem:
Dim IsError as boolean
Private Sub Main -> a fő kódod, gondolom valamilyen eventre fut le az egész cucc
On Error GoTo ErrHandling
valami kód, amit írtál és mindig gebasz van vele...
IF IsError = True Then
Call Sub2
Else
Call Sub3
End IF
valami kód, amit írtál és mindig gebasz van vele...
IF IsError = True Then
Call Sub4
Else
Call Sub5
End IF
exit sub
ErrHangling:
IsError = True
Resume
End Sub
Private Sub Sub2
IsError = False
....
End SubPersze lehet ezt még finomítani kell, kb. 5 éve nem nyúltam VBA kódhoz, de kb. így csinálnám. A subokat el is lehet hagyni, csak akkor van értelme külön kódba kiemelni, ha több helyen is használod ugyanazt a kódot.
Ha mondjuk egész kódrészleteket beraknál ide, akkor nagyobb eséllyel tudunk hibát keresni mi is....
-
Ispy
nagyúr
válasz
alexy92
#2849
üzenetére
Rakjál be egy breakpointot az else-re és nézzed meg mi az értéke az Err.Number-nek.
Én csinálnék egy class szintű változót (IsError), majd on error goto ...., ide beraknám, hogy IsError = True, majd Resume, IF IsError = True Then sub2 Else sub 3 END IF a subok elején meg IsError = False.
-
Delila_1
veterán
válasz
alexy92
#2816
üzenetére
A Module1-ben találod a makrókat.
Írd meg a 9 rutint, ahol aRange("C" & sor) = Range("A" & sor) / Range("B" & sor)sor helyére beírod a saját feladatodat. Az
If Err.Number <> 0 Then RutinC Else RutinBsor helyén a saját rutinjaid nevét add meg! Minden rutinban különböző feladatokat adhatsz meg az én makróim osztása helyett.
Új hozzászólás Aktív témák
- BMW topik
- Kínai és egyéb olcsó órák topikja
- Mibe tegyem a megtakarításaimat?
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Formula-1
- Melyik tápegységet vegyem?
- Nagyon is lát fantáziát a Socket AM4-ben az ASRock
- Milyen billentyűzetet vegyek?
- Alien Deathstorm: új belső nézetes akció-horrort készít a Rebellion
- Samsung Galaxy S26 Ultra - fontossági sorrend
- További aktív témák...
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7500F 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- ÁRGARANCIA! Épített KomPhone i5 10400F 16/32GB/64GB RAM RTX 5050 8GB GAMER PC termékbeszámítással
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB DDR5 RAM RX 9070 16GB GAMER PC termékbeszámítással
- EREDETI NINTENDO Pokemon Go Plus autocatcher dobozban eladó
- Dell Vostro 3510/i5-1135G7/8GB/256GB M.2/WIN11/Jó akku, 4 óra/Számlával!
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


