- Garmin Instinct – küldetés teljesítve
- Samsung Galaxy Watch6 Classic - tekerd!
- Honor 200 - kétszázért pont jó lenne
- Telekom mobilszolgáltatások
- Samsung Galaxy Watch7 - kötelező kör
- iPhone topik
- Xiaomi 15 - kicsi telefon nagy energiával
- Samsung Galaxy S25 - végre van kicsi!
- One mobilszolgáltatások
- Garmin Venu X1 - vékony, virtuóz, váltságíjas
Hirdetés
Köszönjük a sok biztatást, támogatást! Egy rövid ideig még féláron tudsz hirdetni, előfizetni!
-
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
-
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.UserForm
Set frm = obj.Parent
With frm
Select Case obj.Name
Case "opbXYZ1"
.Label1.Caption = obj.Name & ": " & obj.Value
Case "opbXYZ2"
frm.BackColor = 13882323
MsgBox "hello world"
Case "opbXYZ3"
frm.BackColor = 14481663
End Select
End With
End 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.OptionButton
Dim i As Long
ReDim opbArray(1 To 3)
For i = 1 To 3
Set 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 = True
End With
'egyik megoldás, hogy létrehozáskor elindítod a saját kódod
Call RunClick(ctl_OpB)
Set opbArray(i).OptionButton = ctl_OpB
Next i
Set ctl_OpB = Nothing
'másik megoldás, hogy létrehozás után változtatod meg az értékét
Dim r As Double
Randomize
r = Int(Rnd * 3) + 1
opbArray(r).OptionButton.Value = Not opbArray(r).OptionButton.Value
End Sub
A class module-ban csak ennyi van:
Public WithEvents OptionButton As MSForms.OptionButton
Private Sub OptionButton_Change()
Dim frm As MSForms.UserForm
Set frm = OptionButton.Parent
With frm
.Label1.Caption = .Label1.Caption & vbNewLine & OptionButton.Name & " - " & OptionButton.Value
End With
End Sub
Pró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 Long
Dim s As String, cl As Range, xx As Long
For xx = 1 To rrange.Cells.Count - 1
Set cl = rrange.Cells(xx)
s = s & IIf(cl.Value = 1 And cl.Offset(0, 1).Value = "", "1", "")
Next
If 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 suit
Const IsDisplay As Boolean = True ' Change to False for .Send instead of .Display
Const IsSilent As Boolean = False ' Change to True to show Send status
Const FontName = "Arial" ' Font name of the email body
Const FontSize = 11 ' Font size of the email body
Const Account = 2 ' Index or Name of the account to send from
' <-- End of the settings
Dim IsCreated As Boolean
Dim OutlApp As Object
Dim char As Variant
Dim 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 problem
HtmlBody = "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 filename
PdfFile = Range("'Report MOS'!L1")
' Replace illegal symbols in PdfFile by underscore
For Each char In Split("? "" / \ < > * | :")
PdfFile = Replace(PdfFile, char, "_")
Next
' Apply %TEMP% path to the file name and limit lenght of the pathname
PdfFile = Environ("F:\03_PROJEKTE\02_BOS\2.4 SERIENBETREUUNG") & PdfFile & ".pdf"
' Try to delete PDF file if present
If Len(Dir(PdfFile)) Then Kill PdfFile
' Export the activesheet as PDF
With Worksheets("Report MOS")
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PdfFile, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End With
' Use the already open Outlook if possible
On Error Resume Next
Set OutlApp = GetObject(, "Outlook.Application")
If Err Then
Set OutlApp = CreateObject("Outlook.Application")
IsCreated = True
End If
OutlApp.Visible = True
On Error GoTo 0
' Prepare email with PDF attachment and the default signature
With 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 Account
Set .SendUsingAccount = OutlApp.Session.Accounts.Item(Account)
' Get default email signature without blinking (instead of .Display method)
With .GetInspector: End With
HtmlSignature = .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-mail
On Error Resume Next
If IsDisplay Then .Display Else .Send
' Show error of the .Send method
If Not IsDisplay Then
' Return focus to Excel's window
Application.Visible = True
' Show error/success message
If Err Then
MsgBox "E-mail was not sent for some reasons" & vbLf & "Please check it", vbExclamation
.Display
Else
If Not IsSilent Then
MsgBox "E-mail successfully sent", vbInformation
End If
End If
End If
On Error GoTo 0
End With
' Try to quit Outlook if it was not previously open
If IsCreated Then OutlApp.Quit
' Try to release the memory of object variable
Set OutlApp = Nothing
End 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
- Robotporszívók
- OLED monitor topic
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- A fociról könnyedén, egy baráti társaságban
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
- Így VERNEK ÁT a KAMU webshopok!
- Víz- gáz- és fűtésszerelés
- Garmin Instinct – küldetés teljesítve
- Vezetékes FEJhallgatók
- exHWSW - Értünk mindenhez IS
- További aktív témák...
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Windows 10/11 Home/Pro , Office 2024 kulcsok
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- GYÖNYÖRŰ iPhone 13 mini 256GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3042, 94% Akkumulátor
- GYÖNYÖRŰ iPhone 13 mini 128GB Pink -1 ÉV GARANCIA - Kártyafüggetlen, MS3048, 94% Akkumulátor
- Thinkpad X230 legenda: i7 CPU, IPS kijelző, 12 GB, dupla SSD, magyar villbill, webcam, fingerprint
- Apple iPhone SE 16GB, Kártyafüggetlen, 1 Év Garanciával
- DELL Universal Dock D6000 docking station (452-BCYH) (DisplayLink)
Állásajánlatok
Cég: FOTC
Város: Budapest