- Tombol az AI-láz: az NVIDIA már értékesebb, mint az Apple
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Mozilla Firefox
- Felhő alapú adattárolás (Dropbox, stb.)
- Windows 11
- Proxmox VE
- SkyShowtime
- Tarr Kft. kábeltv, internet, telefon
- Linux - haladóknak
- Perelnek a vallásos kripto-piramisjáték miatt
Új hozzászólás Aktív témák
-
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 RutinB
sor 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.
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Ispy
veterán
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.
[ Szerkesztve ]
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
sztanozs
veterán
válasz alexy92 #2849 üzenetére
próbáld meg így:
If Err Then
Esetleg lehetne egy Err.Clear az On Error Resume Next előtt...
Amúgy nem lehet, hogy Selection.Copy mindig hibát dob neked? Asszem talán akkor is hibát dob, ha nem az aktív lapon van a Selection...[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Ispy
veterán
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....
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
-
sztanozs
veterán
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][ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
Ispy
veterán
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á.
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
Ispy
veterán
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....
"Debugging is like being the detective in a crime movie where you're also the murderer."
-
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 IfProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
Új hozzászólás Aktív témák
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen