Ú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
- Sweet.tv - internetes TV
- HiFi műszaki szemmel - sztereó hangrendszerek
- Star Wars Outlaws teszt
- Torrent meghívó kunyeráló
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen videókártyát?
- Amlogic S905, S912 processzoros készülékek
- A fociról könnyedén, egy baráti társaságban
- Epic Store Ünnepi Ajándékozás - 13. nap: Trine Classic Collection
- Autós kamerák
- További aktív témák...
- LG 27UP850K-W - 27" IPS LED - 3840x2160 4K - DisplayHDR 400 - USB Type-C - AMD FreeSync
- HP EliteBook 840 G9 i7-1265U 16GB 512GB 14" FHD+ 1 év teljeskörű garancia
- Telefon felvásárlás!! Samsung Galaxy A13/Samsung Galaxy A33/Samsung Galaxy A53
- Samsung Galaxy S22 Ultra 5G 256GB, Kártyafüggetlen, 1 Év Garanciával
- GYÖNYÖRŰ iPhone 12 mini 128GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3854,94% Akkumulátor
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest



