Hirdetés
- Luck Dragon: Asszociációs játék. :)
- eBay-es kütyük kis pénzért
- sh4d0w: Kalózkodás. Kalózkodás?
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- Brogyi: CTEK akkumulátor töltő és másolatai
- ldave: New Game Blitz - 2025
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sh4d0w: StarWars: Felismerés
Ú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
- Elon Musk billiomos lesz, ha kitör a gépek forradalma
- Autós topik látogatók beszélgetős, offolós topikja
- Otthoni hálózat és internet megosztás
- Google Pixel topik
- Path of Exile (ARPG)
- Youtube Android alkalmazás alternatívák reklámszűréssel / videók letöltése
- Formula-1
- Azonnali informatikai kérdések órája
- CURVE - "All your cards in one." Minden bankkártyád egyben.
- Automata kávégépek
- További aktív témák...
- GYÖNYÖRŰ iPhone 13 mini 128GB Green -1 ÉV GARANCIA - Kártyafüggetlen, MS3835, 100% Akksi
- Samsung Galaxy S24 Ultra 8/256 GB Titanium Gray 6 hónap Garancia Beszámítás Házhozszállítás
- Lenovo ThinkPad P15 Gen 2 Mobile Workstation - i7-11850H 32GB 512GB Nvidia RTX A4000 8GB 1 év gar.
- ÚJ HP OmniBook Ultra Flip 14"OLED 2,8 K 120Hz - Ultra 7 256V - 16GB - 1TB - 2,5 év gari - MAGYAR
- BESZÁMÍTÁS! Gigabyte Z370P i7 9700K 16GB DDR4 512GB SSD RTX 2070 Super 8GB RAMPAGE Shiva A-data 600W
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő



