-
Fototrend
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
Fferi50
Topikgazda
Szia!
Próbáld megnézni, hogy makró melyik része okozza a lassulást.
Egyes részek előtt kiíratod Debug.Printtel az időt, a végén pedig szintén.
Ha még van lehetőség a régi konfigon megfuttatni, akkor ott is, ha nem, akkor is lehet látni, melyik programrésznél időzik el "indokolatlanul".
Üdv. -
Fferi50
Topikgazda
Szia!
Nos kicsit nyugodtabban végigpróbálva a lépéseket, az alábbi eredményre jutottam:
A gombok "eltüntetése/mutatása", azaz a Visible tulajdonság állítása nem befolyásolja a másolás módban maradást! Viszont az Enabled tulajdonság módosítása igen. Tehát ezt nem szabad használni - ami egyébként felesleges is, hiszen ha nem látható a gomb, akkor nem is lehet "megnyomni".Szerintem ezzel már tudsz kezdeni valamit.
Üdv.
Ps. Azt, hogy miért így viselkedik az Excel, azt ne tőlem kérdezd lsz. -
Fferi50
Topikgazda
Szia!
Azt hiszem, azzal van gond, hogy az Application.CutCopyMode tulajdonságot logikai tulajdonságnak kezeled, pedig nem az! Ha megnézzük a Help-jét, akkor azt látjuk, hogy kétféle értéket vehet fel: 1 = xlCopy és 2 = xlCut. Ha pedig nincs bekapcsolva a másolás/kivágás mód, akkor az értéke 0 --> ami a False logikai érték számérték megfelelője.
(Azt hiszem, a makrórögzítő vezet félre bennünket és képzelteti velünk el, hogy logikai érték ez a tulajdonság, mivel ott mindig csak azt látjuk, hogy Application.CutCopyMode = False. Szomorú.)
Az xlCopy vagy xlCut értéket pedig a Ctrl+C ill. Ctrl+X billentyűk, illetve a Copy és a Cut parancsok adják a tulajdonságnak.
Az Application.CutCopyMode=True ebben a formában hatástalan, mivel kívül esik a tulajdonság lehetséges értékein (a True számértéke VBA-ban -1)
"ha viszont még extrába beleírom, hogy ha mégis cutcopymode=true"
ez a fentiek alapján soha nem fog bekövetkezni!
Másrészt a makród szerkezete alapján a feltétel vizsgálat vagy a False vagy az xlCopy/xlCut ágra fog futni.
Makróból nem tudod ezt a tulajdonságot állítani, csak a Copy vagy Cut parancssorral.
Remélem érthető, amit írtam.
Normál esetben ennek a tulajdonságnak a vizsgálata nem szükséges a gombok megváltoztatásához.Üdv.
-
Fferi50
Topikgazda
Szia!
Egyrészt a deklarációkat szerintem tedd a függvény elejére. Jobban áttekinthető.
Másrészt írd be az Option Explicit kapcsolót a modul elejére. Ebben az esetben a következő hibát nem tudod elkövetni:
" Dim Z As String
ZNr = Munka2.Cells(Cllr.Row, 2).Text
If Z <> "" Then"Azért jönnek a hibák, mert egy érték nélküli változót használsz később.
Üdv.
-
Fferi50
Topikgazda
Szia!
Egyrészt talán nem szerencsés, hogy egy VBA névvel (Caller) jelölöd a saját változódat. Ez okozhat problémákat. Bár valószínűleg itt nem ez az elsődleges probléma.
Ahogyan már az előttem szóló is írta, a
Caller.Application.Worksheetfunction.Match helyett írj csak
Application.Match kifejezést.
Ennek az előnye az, hogy nem kell külön hibakezelési eljárást írni a makróba, mert nem idéz elő hibát.
Viszont a változót Variant-nak kell deklarálni és mindig meg kell vizsgálni, hogy a művelet eredményeként nem hiba lett-e a változó értéke.Ezt próbáld meg:
Public Function KKERES() As Double
Dim X As Variant, Y As Variant
KKERES = 0
If TypeOf Application.Caller Is Range Then
Dim Caller As Range
Set Caller = Application.Caller
Dim Z As String
Z = Munka2.Cells(Caller.Row, 2).Text
If Z <> "" Then
X = Application.Match(Z, Munka3.Range("B:B"), 0)
If IsError(X) Then
Y = Application.Match(Z, Munka4.Range("B:B"), 0)
If IsError(Y) Then Y = Application.Match(Z, Munka4.Range("C:C"), 0)
If IsError(Y) Then
KKERES = 0
Exit Function
Else
If Caller.Column = 5 Then
KKERES = Munka4.Cells(Y, 5).Value
Exit Function
End If
If Caller.Column = 6 Then
KKERES = Munka4.Cells(Y, 6).Value
Exit Function
End If
End If
Else
If Caller.Column = 5 Then
KKERES = Munka3.Cells(X, 5).Value
Exit Function
End If
If Caller.Column = 6 Then
KKERES = Munka3.Cells(X, 6).Value
Exit Function
End If
End If
End If
End If
End FunctionÜdv.
-
Pakliman
tag
Hali!
Bár életemben nem használtam még az
Application.Callercuccot, de szinte biztosan hibás azX = Caller.Application.WorksheetFunction.Match.
Szerintem próbáld így:Application.WorksheetFunction.Match(...), vagyApplication.Match(...). Én az utóbbit használom.A kettő csak a "találatmentesség" esetén tér el.
Az előbbi azOn Error ..."hibakezelővel", az utóbbi azIsError(...)függvénnyel kezelhető. -
Delila_1
veterán
A refedit rákattintáskor a benne kijelölt területet teszi be egy string típusú változóba, amit kiértékelhetsz. Példa:
Private Sub CommandButton1_Click()
If Range(RefEdit1) < 10 Then
MsgBox "10-nél nagyobb számot tartalmazó cellát kell választanod!", vbExclamation
RefEdit1 = ""
RefEdit1.SetFocus
End If
End Sub -
Fferi50
Topikgazda
Szia!
Az Excel alkalmazást a visible tulajdonsággal tudod láthatóvá tenni. De mivel ezt nem szeretnéd, ezért nem látszik a dialógus ablak sem.
Ezért írtam az elején, hogy a "gazda" VBA-ban kell bekérned a paramétereket akár egy userform, akár inputbox (nyilván többszöri) használatával.Üdv.
-
Fferi50
Topikgazda
Szia!
Miért van a SaveAs dialóg ablak. A SaveAs metódusnak megadhatod, hogy milyen paraméterekkel mentse el a fájlt és akkor nincs ablak. Viszont, ha mindenképpen szeretnél dialógus ablakot, akkor a VBA alkalmazásban teheted meg, hogy bekéred a paramétereit, majd az előző mondatban írtak szerint beadod azokat a mentéshez. Esetleg próbáld meg az
Application.FileDialog(msoFileDialogSaveAs).Show metódust.Üdv.
-
m.zmrzlina
senior tag
Annyira nem fontos, csak érdekességként vetettem fel.
beírsz a kódba egy olyan sort, hogy "Dim Range" (Range nagy betűvel),
Ezért nem értettem a dolgot.
Lásd Delila hozzászólását. Nekem ez magától értetődik. -
Delila_1
veterán
Sub adatok()
Balfelső = "$B$2": Végrehajtás Balfelső
Balfelső = "$C$9": Végrehajtás Balfelső
End SubEz hívja meg a Végrehajtás makrót, átadva a kezdő cella címét
Sub Végrehajtás(Balfelső)
sorok = 5: oszlopok = 4: osszeg = 0
jobbalsó = Range(Balfelső).Offset(sorok - 1, oszlopok - 1).Address
For Each cella In Range(Balfelső & ":" & jobbalsó)
osszeg = osszeg + cella
Next
Range(jobbalsó).Offset(1) = osszeg
End SubA jobb alsó cella alá kiírattam a tartományok összegét.
-
Delila_1
veterán
kezdet = "$C$9"
Set terület = Range(kezdet).Offset(0, 0, sor - 1, oszlop - 1)Így próbáltam, de nem fogadja el. Munkalapon ez a C9-től a sor-1, oszlop-1 tartományra vonatkozik.
Ott az =ofszet(C9,0,0,sor-1,oszlop-1) a terület.
Például a =SZUM(OFSZET(B2;0;0;3;2)) képlet összegzi a B2:C3 tartományt. -
Delila_1
veterán
-
köszi az ötleteket, próbálkozom.
@Delila_1: sajnos ez nem lehetséges, a táblákba nem nyúlhatok bele. amit szeretnék, az egy összehasonlító, amivel azonos struktúrájú workbookokat (illetve egy meghatározott sheetjüket) tudok összehasonlítani a cellák tartalma szerint, mert valamilyen számomra rejtélyes és érthetetlen okokból nem használjuk a historyt.
minden kész az egészből, kivéve az, hogy user 1.0 ki tudja választani a sheetet, mivel amint az péntek délután kiderült, ez témakörönként más. -
stivi1g
tag
Igen, közben módosítgattam kicsit de attól még elméletileg a cella név/szám nem változik.De ha nem akkor bocsánat. elvileg ez lenne a táblázat egy beviteli munkalappal. "Kocsikiadás" egy összesítő munkalappal. az működik is. És akkor lenne egy tartalék munka lap ahova listázni kéne az adott dátumra a tartalék rendszámokat.

-
biker
nagyúr
-
stivi1g
tag
Nem tudom mit rontok el. de nem történik semmi. lehet rossz helyre másoltam a kódot.
képen mutatom hova tettem.
hova tettem.Viszont lenne még egy kérdés ha másik munkalapra akarom a kilistázást azt elég a "Sheets("Tartalék").Select" parancs beszúrásával megoldani? Természetesen Tartalék a Munkalap neve is.
-
Terra86
csendes tag
Nagyon köszönöm a megoldást, de sajnos én ezt nem tudom működésre bírni. Szerkesztő ablakába próbáltam makróként beillesztve futtatni- nyilván ez nem ilyen egyszerű- de hát mondtam, hogy kezdő amatőr vagyok.
Esetleg írnál egy szájbarágóst?
Mindenesetre még egyszer köszönöm. -
A Te makród (nem vagyok Excel közelben), de az is jól kell hogy működjön és mivel ott van egy fontos feltétel, ezért be lehet vinni simán adatokat, még ha eseményhez is van rendelve(legalábbis teljesen üres sorokba biztosan)
.
(Azért valaki kipróbálhatná, de szvsz nincs vele semmi gond) -
-
Belnir
csendes tag
Na, végül megtaláltam amit kerestem.
-
poffsoft
veterán
én sem értek hozzá.
Beleír, majd menti, megerősítő kérdés nélkül.
A kolléga problémája a sima ixre adott "Nem" mentjük válasz volt (meg nekem is).Lehetne játszani a dirty flagekkel, de ahhoz kellene, hogy ércsek hozzá, ami meg nem igaz.
De ha van elegánsabb, jobbszebb megoldásod, meghallgatunk

Amúgy szerintem -lajikusként- az exit eventben történő mentés után már nem tér vissza az afters
have eventbe, mert előtte megkapja a killt.De erről Delilát kérdezd inkább, ő tényleg ért hozzá.

üdv: latzi, üdv.
-
kispéé
senior tag
Lehet rosszul fogalmaztam, nincs sorrendben sem illetve az is előfordulhat, hogy egy adott számot az egyik nem tartalmazza. Tehát a számsorok darabszáma sem egyezik.
Kihagytam, hogy közel azonos számsorral...
szatocs1981: Screenshot-ot elvileg nem küldhetek. De pontosan miről kéne?
-
rgqjx
aktív tag
Tökéletesen működik, köszönöm!

Ebből is látszik, hogy illendő lenne egy minimális VB tudást összeszednem, de ahogy elnézem, ez már nem a C64-en megtanult basic.... Tudnátok linkelni nekem egy-két oldalt/könyvet, ahonnan érdemes lenne az alapokat elsajátítanom? Köszönet érte!
-
Delila_1
veterán
Erre a kódrészletre többször kerül sor a leírásod szerint.
Mikor első esetben hibára fut, a hibakódot megjegyzi. Ha az On Error Resume Next-tel át tudtál lépni a hibán, a művelet elvégzése után le kell nulláznod a hibakódot, hogy a következő futtatáskor ne ezzel a hibával induljon. Nem tudom, hova érdemes beírni a nullázást, legegyszerűbb, ha már eleve 0 hibakóddal indítod a programrészt az On Error Resume Next sor fölött az On Error Goto 0 sorral.
Új hozzászólás Aktív témák
- Luck Dragon: Asszociációs játék. :)
- droidic: Windows 11 önállóság nélküli világ: a kontroll új korszaka
- A fociról könnyedén, egy baráti társaságban
- Energiaital topic
- Brogyi: CTEK akkumulátor töltő és másolatai
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- Okos Otthon / Smart Home
- PH!otósok beszélgetős, offolós topikja
- Futás, futópályák
- További aktív témák...
- ÚJ AKKU! Ár/ÉRTÉK BAJNOK! Dell Latitude 5330 i3-1215U 6mag! 16GB 512GB 13.3" FHD 1 év gar
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7500F 32/64GB RAM RTX 5060 Ti 8GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! Apple iPad Pro 13 2024 M4 16GB/2TB WiFi tablet garanciával hibátlan működéssel
- GeForce RTX 2060 (OEM HP) Garanciával
- Bomba ár! HP Elite Dragonfly G1 - i5-8G I 16GB I 512SSD I 13,3" FHD Touch I Cam I W11 I Garancia!
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest


Lásd Delila 
![;]](http://cdn.rios.hu/dl/s/v1.gif)

minden kész az egészből, kivéve az, hogy user 1.0 ki tudja választani a sheetet, mivel amint az péntek délután kiderült, ez témakörönként más.


.




Fferi50
