- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Azonnali mobilos kérdések órája
- Íme az új Android Auto!
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Mobilhasználat külföldön
- One mobilszolgáltatások
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Na! Ez egy JÓ utólagos autós fejegység - Minix CP89-HD
- Honor Magic6 Pro - kör közepén számok
- iPhone topik
-
Mobilarena
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.Caller
cuccot, 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
Hirdetés
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - NYÁRI AKCIÓ!
- Új, bontatlan World of Warcraft gyűjtői kiadások
- ROBUX ÁRON ALUL - VÁSÁROLJ ROBLOX ROBUXOT MÉG MA, ELKÉPESZTŐ KEDVEZMÉNNYEL (Bármilyen platformra)
- Assassin's Creed Shadows Collector's Edition PC
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Crucial 240GB SSD eladó
- Felújított szerverek, storage-ok, hálózati eszközök Enterprise szinten, minden gyártótól
- Hp USB-C/Thunderbolt 3 dokkolók: USB-C Universal, G2, G4, G5, Hp Elite/Zbook- Thunderbolt 4 G4
- ÁRGARANCIA!Épített KomPhone Ryzen 5 4500 16/32/64GB RAM RTX 3050 6GB GAMER PC termékbeszámítással
- Telefon felvásárlás!! iPhone 16/iPhone 16 Plus/iPhone 16 Pro/iPhone 16 Pro Max
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged