Hirdetés
- Luck Dragon: Asszociációs játék. :)
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- urandom0: Száműztem az AI-t az életemből
- Magga: PLEX: multimédia az egész lakásban
- GoodSpeed: Munkaügyi helyzet Hajdú-Biharban: észak és dél!
- gban: Ingyen kellene, de tegnapra
- eBay-es kütyük kis pénzért
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
-
LOGOUT
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
-
Mutt
senior tag
válasz
Pakliman
#54199
üzenetére
Szia,
Két megoldást tudok javasolni:
1. A Click eseményeket beteszed egy saját subroutinba és azonnal meghívod ahogy a vezérlőt (választó gombot) létrehoztad.Sub RunClick(obj As Object)Dim frm As MSForms.UserFormSet frm = obj.ParentWith frmSelect Case obj.NameCase "opbXYZ1".Label1.Caption = obj.Name & ": " & obj.ValueCase "opbXYZ2"frm.BackColor = 13882323MsgBox "hello world"Case "opbXYZ3"frm.BackColor = 14481663End SelectEnd WithEnd Sub
A Select Case-el csak bemutattam hogy eltérő ágakat tudsz létrehozni.2. Megvárod, hogy a vezérlő létrejöjjön és csak utánna változtatod meg az értékét.
A kódodon csak minimálisan változtattam (tartalmazza az 1-es lehetőséget is), a végén van a 2-es opció. Ott véletlenszerűen megváltoztatom az egyik vezérlő értékét, ekkor már le fog futni a Change esemény-Private Sub CommandButton1_Click()Dim ctl_OpB As MSForms.OptionButtonDim i As LongReDim opbArray(1 To 3)For i = 1 To 3Set ctl_OpB = Me.Controls.Add("Forms.OptionButton.1", "opbXYZ" & i, False)With ctl_OpB.Left = 100.Top = 150 + (i * 20).Width = 100.Caption = "opb_" & CStr(i).Visible = TrueEnd With'egyik megoldás, hogy létrehozáskor elindítod a saját kódodCall RunClick(ctl_OpB)Set opbArray(i).OptionButton = ctl_OpBNext iSet ctl_OpB = Nothing'másik megoldás, hogy létrehozás után változtatod meg az értékétDim r As DoubleRandomizer = Int(Rnd * 3) + 1opbArray(r).OptionButton.Value = Not opbArray(r).OptionButton.ValueEnd SubA class module-ban csak ennyi van:
Public WithEvents OptionButton As MSForms.OptionButtonPrivate Sub OptionButton_Change()Dim frm As MSForms.UserFormSet frm = OptionButton.ParentWith frm.Label1.Caption = .Label1.Caption & vbNewLine & OptionButton.Name & " - " & OptionButton.ValueEnd WithEnd SubPróbáld ki.
üdv
-
Fferi50
Topikgazda
válasz
Pakliman
#54208
üzenetére
Szia!
"Esetleg lehetne úgy is, hogy dinamikusan létrehozom a vezérlőt és vele együtt VBE-be a megfelelő kódo(ka)t..."
Valóban ez lehet egy megoldás az "osztályosdi" elkerülésére, a UserForm kódlapjára beírni a létrehozott új vezérlőkhöz kapcsolódó kódokat. Erre megvannak az eszközök (VbProject, VbComponents(x), CodeModule eszközei)
Más kérdés, hogy enged-e kódot írni makróból, futás közben - nem veszi-e víruskísérletnek? Ezt ki kell próbálni.
Üdv. -
Fferi50
Topikgazda
válasz
Pakliman
#54205
üzenetére
Szia!
Még mindig nem egészen értem. Nem azért teszed ki a választógombot, hogy a user válassza ki a megfelelő opciót?
Azt, hogy a listát megváltoztató parancsgombra ne tudjon kattintani, elérhető azzal, ha az arra vonatkozó Click esemény végén inaktíválod a gombot.
A választógombok eseménykezelését pedig a saját osztályában tudod megoldani.
Én úgy látom eddig, hogy a dinamikusan létrehozott vezérlők eseménykezelőit nem lehet beindítani makróból, viszont az eseménykezelőket megírhatod az osztályhoz tetszésed szerint.
Ahogy Pá fórumtársnak írtam, esetleg megoldható lenne az esetek számának megfelelő vezérlő létrehozása előre és a helyzetnek megfelelő kezelése.
Üdv. -
Fferi50
Topikgazda
válasz
Pakliman
#54199
üzenetére
Szia!
Nem egészen értem, hogy miért szeretnél makróval eseményt indítani egy újonnan felvett vezérlőre. Ezeket pont a userrel való kommunikációra használjuk. Pláne úgy, hogy egy aktív userformon van. Ha végig fut a makró, a userform fennmarad, akkor kattintgathat a user, vezérelheti a folyamatokat.
Persze értem én, hogy tanulni szeretnél, csak nem logikus szerintem.
Üdv. -
oke
senior tag
válasz
Pakliman
#48307
üzenetére
Szia,
Köszi a segítséget, hát igen, hadilábon állok a makróval, néhányban volt részem, a fórum hathatós segítségével

Az AC oszlopban szótöredékekre keresek, cellán belül kell keresni, mert több érték, szó is lehet benne, de szerencsére nincs több jelentésük.
Példa az AC oszlop tartalmára:
2.sor: cica, alma, körte, körteleves
3.sor: cica
4.sor: alma, körteleves, hógolyó
5.sor: autó, autómárka, foci labda, cica, almaTehát:
- ha előszór rászűrök a "*körte*" részletre az AC oszlopban akkor 2. és a 4. sor kerül kiválasztásra, mert azokba szerepel a "*körte*" szó vagy szórészlet és beírom melléjük a G oszlopba mondjuk, hogy gyümölcs, és a H oszlopba, hogy finom.
- összesen két sor maradt így, azután rászűrök a következőre szórészletre az "-alma*"-ra, akkor a 4. sor jelölődik ki és itt is kitöltöm a a G és H oszlopot valamivel és marad a 3. sor. És így tovább.Remélem így érthető a folyamat

Egyszerűbb megoldás lehet az, ha egy külön táblázatba összeszedném a feltételeket és a hozzájuk tartozó G és H oszlop értékeit és arra hivatkozna a makró? -
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
Pakliman
#48203
üzenetére
Szia!
A "kötekedésben" igazad van, a képletes megoldás is hibát okoz, ha a sor végéig ki van jelölve.
Ez lehet(ne) a javított függvényes változat:Public Function szamolo(rrange As Range) As LongDim s As String, cl As Range, xx As LongFor xx = 1 To rrange.Cells.Count - 1Set cl = rrange.Cells(xx)s = s & IIf(cl.Value = 1 And cl.Offset(0, 1).Value = "", "1", "")NextIf rrange.Cells(xx).Value = 1 Then s = s & "1"szamolo = Len(s)End Function
Itt nem lépünk ki a tartományból a számolás során.
Üdv. -
Fferi50
Topikgazda
-
BEndre34
tag
válasz
Pakliman
#48190
üzenetére
Nem értem, de működik (holnap utánanézek, mert így tanul az ember)
Annyi, hogy ahol közvetlenül egymás után(mellett) szerepel 1, azokat is csak simán 1-nek vegye, ahogy nálad a 3 egymás melletti 1-es esetében, ami az én szempontomból nem hiba, hanem a cél.
Tehát ahol önmagában 1-van azt is, és ahol közvetlenül egymás mellett bármennyi 1-es szerepel, azt is csak 1-nek vegye. Azaz a Te példádban nem 2 kell, hogy megjelenjen, hanem 5 (van 2 különálló 1-es és 3 közvetlen egymás melletti 1-es).
Mindenesetre ez számomra fény az alagút végén.
-
eszgé100
őstag
válasz
Pakliman
#47879
üzenetére
Do While ActiveWindow.View = xlPrint
'Application.Wait (Now + TimeValue("00:00:01"))
LoopElőször Application.Wait-tel próbáltam, de még az is felesleges a boldogsághoz

Egyelőre csak itthon tudtam kipróbálni, majd hétfőn meglesem melóban is, hogy a valóságban is működik-e? -
BEndre34
tag
válasz
Pakliman
#47563
üzenetére
Szia!
Köszönöm. Viszont pont az a gondom, hogy nem tudok útvonalat megadni. Illetve igen, de úgy már nincs értelme a makrónak. Kollégák fogják használni és pont az lenne a lényeg, hogy nekik ne kelljen semmin változtatni, csak a minta fájlt bemásolja az adott heti könyvtárba és lefut arra a hétre(könyvárra) vonatkozóan.
-
-
[w]
őstag
válasz
Pakliman
#46601
üzenetére
köszi, próbálkozom...
mi az ellenőrzendő, a lapfül neve?most így hirtelen "subscript out of range"ok, elírás volt a lapfül nevében...
annyiban bonyolult a helyzet, hogy az egyes munkafüzetek saját, külön könyvtárakban vannak legyűjtve, tehát nem egy mappából kell őket megnyitni (sMappa), hanem rengetegből
ezzel így megoldható?
-
spe88
senior tag
válasz
Pakliman
#46477
üzenetére
Köszi szépen. Működik minden királyul.
Utánanéztem miért nem működnek PDF-ben a linkek. Elvileg Adobe beépülő modullal lementve működnének csak. (Valami driver biztonsági okokból tiltja a hiperhivatkozásokat, ha azokat egy szóra teszed rá. Ha a szöveg egy cellába ki van rakva akkor megy).
Így azt a kiskaput találtam meg, hogy a hiperhivatkozás teljes szövegét beraktam egy cellába, fehérre állítottam a betűszínt, majd odaraktam egy gombjellegű képet a cellára azzal a felirattal, hogy klikk. Így aktív maradt a link is csak nem látszik, hiszen fehér. Nem egy elegáns megoldás, de csak az működik, ha nincs Adobe beépülő modul az Exceledben.

-
spe88
senior tag
válasz
Pakliman
#46474
üzenetére
ohh ez még az én amatőr szememnek is furcsa, nem is tudom miért nem vettem észre.
Köszönöm, múltkor is segített, amit írtál. Ez is jó lesz szerintem.esetleg arra nincs ötleted, hogy az exportált pdf-ben a hiperhivatkozás miért tűnik el? Az Excel fájlban tökéletesen működik, de ahogy pdf lesz belőle, nem lehet rákattintani.
-
spe88
senior tag
válasz
Pakliman
#46446
üzenetére
az enyém ilyen, de nem értem ott mi a baj. Igaz nem is értek hozzá túlzottan

Sub SendPDF_WithAccountSignatiure()' --> User settings, change to suitConst IsDisplay As Boolean = True ' Change to False for .Send instead of .DisplayConst IsSilent As Boolean = False ' Change to True to show Send statusConst FontName = "Arial" ' Font name of the email bodyConst FontSize = 11 ' Font size of the email bodyConst Account = 2 ' Index or Name of the account to send from' <-- End of the settingsDim IsCreated As BooleanDim OutlApp As ObjectDim char As VariantDim PdfFile As String, HtmlFont As String, HtmlBody As String, HtmlSignature As String' Edit the body's html text as required' The tags are: h3 is for Header#3; b is for Bold; br is for line break' HTML tag's are not displayed properly in the post of MrExcel forum, thus replacing is used to fix this problemHtmlBody = "Hello, (br)" _& ".(br)" _& "Proba."HtmlBody = Replace(HtmlBody, "(", "<")HtmlBody = Replace(HtmlBody, ")", ">")' Set the font for the html-body (parentheses are just because of MrExcel posting limitation)HtmlFont = HtmlFont = "(body font: " & 11 & "pt " & Arial & ";color:black"")"HtmlFont = Replace(HtmlFont, "(", "<")HtmlFont = Replace(HtmlFont, ")", ">")' Define PDF filenamePdfFile = Range("'Report MOS'!L1")' Replace illegal symbols in PdfFile by underscoreFor Each char In Split("? "" / \ < > * | :")PdfFile = Replace(PdfFile, char, "_")Next' Apply %TEMP% path to the file name and limit lenght of the pathnamePdfFile = Environ("F:\03_PROJEKTE\02_BOS\2.4 SERIENBETREUUNG") & PdfFile & ".pdf"' Try to delete PDF file if presentIf Len(Dir(PdfFile)) Then Kill PdfFile' Export the activesheet as PDFWith Worksheets("Report MOS").ExportAsFixedFormat Type:=xlTypePDF, Filename:=PdfFile, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=FalseEnd With' Use the already open Outlook if possibleOn Error Resume NextSet OutlApp = GetObject(, "Outlook.Application")If Err ThenSet OutlApp = CreateObject("Outlook.Application")IsCreated = TrueEnd IfOutlApp.Visible = TrueOn Error GoTo 0' Prepare email with PDF attachment and the default signatureWith OutlApp.CreateItem(0)' Set HTML format.BodyFormat = 2' Add the attachment first for correct attachment's name with non English symbols.Attachments.Add PdfFile' Set the required account by const AccountSet .SendUsingAccount = OutlApp.Session.Accounts.Item(Account)' Get default email signature without blinking (instead of .Display method)With .GetInspector: End WithHtmlSignature = .HtmlBody' Prepare e-mail.Subject = Range("'Report MOS'!L1").To = Range("'Report MOS'!L2") ' <-- Put email of the recipient here.HtmlBody = HtmlFont & HtmlBody & HtmlSignature' Try to send or just display the e-mailOn Error Resume NextIf IsDisplay Then .Display Else .Send' Show error of the .Send methodIf Not IsDisplay Then' Return focus to Excel's windowApplication.Visible = True' Show error/success messageIf Err ThenMsgBox "E-mail was not sent for some reasons" & vbLf & "Please check it", vbExclamation.DisplayElseIf Not IsSilent ThenMsgBox "E-mail successfully sent", vbInformationEnd IfEnd IfEnd IfOn Error GoTo 0End With' Try to quit Outlook if it was not previously openIf IsCreated Then OutlApp.Quit' Try to release the memory of object variableSet OutlApp = NothingEnd Sub -
KBaj
kezdő
válasz
Pakliman
#45667
üzenetére
Kedves Pakliman!
Köszönöm szépen a reagálásod!
Valóban jó ötletet adtál; fájl komplett felülírása helyett megfelelő lehet annak legyilkolása, úgy sem kellenek már az adatok.
A bejegyzésed után azonban Fferi50 javasolt egy számomra „szebb” megoldást. Mint tudjuk egy feladat megoldása véges sok számú lehet.
Köszönöm, hogy figyeltél rám. -
ROBOTER
addikt
válasz
Pakliman
#43258
üzenetére
Nem a cella értékét iratom ki az MsgBox-ban, hanem a globális változó értékét. Az törlődik.
Az érintett változóban a cella neve (B11) szerepel, nem a tartalma.
A newSheetNamePos nem szerepel a kódban sehol, kereséssel néztem át. És többször átírtam a nevét abban a 3/4 sorban, hogy hibát dobjon, ha esetleg benne hagytam valahol. De semmi változás. Létrehoz egy sheetet, működik, létrehozná a következőt, és nincs tartalma a változónak.
Valamit nem tudok a VBA-ról, amit tudnom kellene a globális változók terén.
-
Mutt
senior tag
válasz
Pakliman
#42300
üzenetére
Szia,
Írhatsz egy saját függvényt, amely ellenőrzi a lehetséges kombinációkat.
pl.
Function DateTest(datum As String) As Boolean
Dim helyes_a_datum As Boolean
helyes_a_datum = IsDate(datum)
If helyes_a_datum Then
DateTest = True
Else
DateTest = IsDate(Replace(datum, ".", ". "))
End If
End Functionüdv
-
Mutt
senior tag
-
Fferi50
Topikgazda
válasz
Pakliman
#42293
üzenetére
Szia!
Pedig nagy eséllyel Windows területi beállítási különbségek miatt van.
A VBA-ban alapvetően angol (nemzetközi) beállítások szerint kell a függvények paramétereit megadni. Magyar formátumot csak akkor fogad el. ha a Windowsban is be van állítva.
Pl. előfordulhat, hogy szóköz is van a pontok mellett, vagy nincs pont a végén.
Javaslom, nézd meg a munkalapfüggvény működik-e megfelelően mindkét helyen.
Üdv. -
spe88
senior tag
válasz
Pakliman
#41492
üzenetére
Huh ez nekem kicsit sok. Azt hittem tud ilyet az Excel makrók nélkül.

Ezt nem értem:
"Egy normál modulban létrehozol egy változót, ez fogja tárolni a mindenkori aktuális munkalapot:"
Én nekem az egyik makróm alapból a modulban tárolódik. valószínűleg nem vagyok tisztában az alapokkal.
Szóval a két makrót be tudom copyzni a helyére, de ezt a változós dolgot hol tudom megadni?
köszi
-
-szabi-
addikt
válasz
Pakliman
#40997
üzenetére
Hi
Sosem csináltam, futtattam makrót.
Amit leírtál beillesztettem makró létrehozása alatt majd elmentettem a munkafüzetet makróbarát módban.
Weblapon nyomtam egy CTRL+A majd CTRL+C-t.
Majd a munkafüzetben makrók megjelenítése alatt elindítottam az "olvas" makrót.
Aztán semmi nem történt.
Új hozzászólás Aktív témák
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Game Pass Ultimate előfizetések 1 - 36 hónapig azonnali kézbesítéssel a LEGOLCSÓBBAN! AKCIÓ!
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - 15% AKCIÓ
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- BLACK FRIDAY! - Jogtiszta Windows - Office & Vírusirtó licencek- Azonnal - Számlával - Garanciával
- Apple iPhone 13 Pro Max Graphite ProMotion 120 Hz, Pro kamerák 256 GB-100%-3 hó gari!
- Apple iPhone 12 Mini 64GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! MSI B450M R5 5600X 32GB DDR4 512GB SSD RTX 4060 TI 16GB ZALMAN Z1 Plus A-Data 650W
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max
- HIBÁTLAN iPhone 11 Pro 256GB Space Grey -1 ÉV GARANCIA - Kártyafüggetlen, MS3173, 100% Akkumulátor
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Szóval Public variable csak modulból működik?


Ami még nem világos, annak is utánaolvasok. Köszönöm!!
Nem értem, de működik (holnap utánanézek, mert így tanul az ember)


Fferi50
