- Samsung Galaxy S24 - nos, Exynos
- Poco X6 Pro - ötös alá
- Alkalmazásbemutató: Keep
- Futott egy Geekbench kört egy új HTC készülék
- Azonnali mobilos kérdések órája
- Apple AirPods Pro (2. generáció) - csiszolt almaságok
- Huawei Mate 10 Pro - mestersége az intelligencia
- Vodafone-ra áttért Digi Mobilosok
- Xiaomi Mi 11 Ultra - Circus Maximus
- iOS alkalmazások
Hirdetés
-
Már tudjuk, hogy mikor jön az idei Xbox Games Showcase
gp A showt egy külön Direct előadás követi, ami szinte biztosan az idei Call of Duty lelepelzése lesz.
-
Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
ph A cég megoldása centralizált vezérelhetőséggel, masszív radiátorral és robusztus ventilátorokkal igyekszik vásárlásra csábítani.
-
Új Beats fej- és fülhallgatók jelentek meg
ma Frissítette a Solo termékcsaládot az Apple házi audiomárkája.
Új hozzászólás Aktív témák
-
vilag
tag
válasz sztanozs #1850 üzenetére
Végül is eddig úgy tűnik, hogy a következő verziónál maradok:
Workbook:
Private Sub Workbook_Open()
UserForm1.Show
End SubUserform:
Private Sub CommandButton2_Click() 'Kilépés gomb
mfszam = 0 'mfszam=munkafüzetek száma
For Each twb In Application.Workbooks
mfszam = mfszam + 1
Next
If mfszam = 0 Then
Application.Quit
Else
Application.DisplayAlerts = False
Unload Me
ThisWorkbook.Close
Application.DisplayAlerts = True
End If
Application.WindowState = xlNormal
End SubPrivate Sub UserForm_Terminate()
Application.DisplayAlerts = True
Application.WindowState = xlNormal
End SubEz lett a végleges (legalább is most annak tűnő) megoldás.
Még betettem egy Unload Me-t, mert így lefut a lejjebbi részben írt Terminate is, amivel el tudom érni, hogy a hibajelzést visszakapcsoljam, illetve, hogy újra nagy méretű legyen a megnyitva maradt munkafüzet (már persze ha több volt nyitva). Ha csak egy volt nyitva az sem gond, mert felugrik és aztán bezáródik az egész.A dim-eket kihagytam, mert anélkül is megy, illetve a változó nevét megváltoztattam, mert nekem így beszédesebb
Üdv, vilag
-
sztanozs
veterán
Dim-eket ne hagyd ki és tedd ki az összes modul elejére az Option Explicit-et (megköveteli az összes változó deklarálását), és akkor nem lesznek esetleges elütésből eredő problémáid sem.
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...
-
vilag
tag
válasz sztanozs #1852 üzenetére
Üdv!
Kicsit utánaolvastam az Option Explicit-nek, mert megmondom őszintén nem is hallottam róla.
A meglévő kevéske tudásomat a kollégámtól, innen, általánosságban az internetről, illetve saját kútfőböl szereztem. Vélhetően ezért nem hallottam róla.Szóval utánaolvastam, és szerintem nem fogom bekapcsolni (legalább is ebben a programban tuti nem), mert rövidke a program és a tárgyalt kódon kívül mindössze egy változó van, így igazán nincs is értelme.
Meg rosszat is olvastam (1 hsz):
[link]Bár nem olvastam végig, így könnyen lehet, hogy nem is ez okozta a problémát.
Üdv, vilag
Szerk: Annyit azonban észrevettem, hogy a fenti módon megoldott kilépéssel előállta az a helyzet, hogy a personal.xls-t is bezárja, így a kipakolt saját menük, illetve beállítások elszállnak.
Ezt nem lehet valahogyan elkerülni????[ Szerkesztve ]
-
vilag
tag
válasz sztanozs #1854 üzenetére
Üdv!
Felmerült még egy probléma.
Az a baj, hogy nem tudom, hogy a felhasználók közül ki az akinek van personal.xls és esetleg rendelkezik az általunk írt sajatfuggvenyek.xla-val.
Ebből kifolyólag sajnos nem tudom előre meghatározni, hogy melyik az ominózus munkafüzetszám amihez viszonyítani tudnám, hogy van e még nyitva munkafüzet vagy sem.Tudunk esetleg beépíteni valami erre vonatkozó vizsgálatot?
Esetleg vizsgáljuk meg, hogy megnyitáskor mennyi munkafüzet van nyitva és azt vegyük bázisértéknek?
Bár lehet, hogy ez sem jó, mert még így sem tudjuk megmondani, hogy az valóban egy látható munkafüzet e vagy az előbb említett kettő valamelyike...Próbáljunk meg esetleg ezekre a munkafüzet nevekre keresni és kivonni a számukat a bázisszámból?
Valami ötlet esetleg?Üdv, vilag
-
sztanozs
veterán
Mármint megnyitva?
A telepített / elérhető AddInek az Application.AddIns collectionben vannak nyilvántartva. For Each-vel végigmész rajtuk, és megnézed, hogy a tiéd nyitva van-e (property-k, amik kellhetnek: Name, Installed, IsOpen).
Public Function SajatfuggvenyekBetolve()
Dim A1 As AddIn
For Each A1 In Application.AddIns
If (A1.Name = "sajatfuggvenyek.xla") And A1.IsOpen And A1.Installed Then
SajatfuggvenyekBetolve = True
Exit Function
Next
SajatfuggvenyekBetolve = False
End FunctionA megnyitott workbookok pedig az Application.Workbooks collectionben vannak. Megnézni ugyanúgy tudod:
Public Function PersonalBetolve()
Dim W1 As Workbook
For Each W1 In Application.Workbooks
If W1.Name = "personal.xls" Then
PersonalBetolve = True
Exit Function
Next
PersonalBetolve = False
End FunctionJOGI 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...
-
vilag
tag
válasz sztanozs #1856 üzenetére
Ez lett a végső (nek tűnő) megoldás:
For Each twb In Application.Workbooks
wbnev = twb.Name
If wbnev <> "PERSONAL.XLS" And wbnev <> ThisWorkbook.Name Then
GoTo bezar
End If
Next
kilep:
Application.Quit
GoTo vege
bezar:
Application.DisplayAlerts = False
Unload Me
ThisWorkbook.Close
vege:
Application.WindowState = xlMaximizedJelenleg úgy tűnik, hogy minden gond nélkül működik. mondom ezt néhány teszt után.
Remélem most már így is marad.Van azonban egy másik kérdésem:
A szóban forgó project le van jelszavazva a basicben azon oknál fogva, hogy a mezei felhasználó ne tévedhessen debug módba.
Van a felhasználói felületen egy gomb aminek a jelentősége most megnőtt (eddig nem is használtam). Ez a gomb arra szolgál, hogy a userformot bezárja és megnyissa a basicet.A probléma az lenne, hogy a project kibontásához jelszót kér (mivel ugye lejelszavaztam).
Szóval a kérdés az, hogy lehet e automatizálni a pojecthez tartozó jelszóbeadást?
Természetesen a userformon lévő gomb jelszavazva van.
Üdv, vilag
-
martonx
veterán
Én már régóta .Net vonalon kizárólag C#-ozok. Makróról .Net-re áttérésre legjobb a VB.Net viszont rá fogsz jönni, hogy mostanra szinte senki nem használja a VB.Net-et, ergo tutorialokat, példákat, különösen az újabb technológiákhoz szinte lehetetlen hozzá találni.
Nekem személyes kedvencem a VB.Net, és mind tudásban, mind sebességben egyenrangú a C#-al. Csak valahogy az élet így hozta, hogy mostanra a C# dominál.Én kérek elnézést!
-
martonx
veterán
válasz DerStauner #1865 üzenetére
akkor adj be egy speciálisabb RIA Services LINQ-t, vagy az online konverternek, és nézd meg, hogy mit fog vele kezdeni.
Az online konverterek addig jók, amig a console.writeline sor végéről le kell szedni a pontosvesszőt
Mint mondtam nekem is a VB.Net a kedvencem, de már évek óta nem igazán használtam, pont az újabb technológiák nehézkes VB.Net támogatása miatt.Én kérek elnézést!
-
DerStauner
senior tag
sziasztok!
alant a kód:
ConnectToDb(acces_conn)
acces_cmd.Connection = acces_conn
acces_cmd.Parameters.Clear()
acces_cmd.Parameters.AddWithValue("@knev", frmkereses.inp_knev.szoveg.Replace("*", "%"))
acces_cmd.Parameters.AddWithValue("@hrsz", frmkereses.inp_hrsz.szoveg.Replace("*", "%"))
If frmkereses.inp_terulet.szoveg <> "" Then acces_cmd.Parameters.AddWithValue("@terulet", CInt(frmkereses.inp_terulet.szoveg))
If frmkereses.tb_teruletig.szoveg <> "" Then acces_cmd.Parameters.AddWithValue("@teruletig", CInt(frmkereses.tb_teruletig.szoveg))
If frmkereses.inp_erdo.szoveg <> "" Then acces_cmd.Parameters.AddWithValue("@erdoter", CInt(frmkereses.inp_erdo.szoveg))
If frmkereses.tb_erdoig.szoveg <> "" Then acces_cmd.Parameters.AddWithValue("@erdoig", CInt(frmkereses.tb_erdoig.szoveg))
acces_cmd.Parameters.AddWithValue("@kivett", frmkereses.cmb_kivett.selecteditem)
acces_cmd.Parameters.AddWithValue("@jogallas", frmkereses.cmb_jogallas.selecteditem)
acces_cmd.Parameters.AddWithValue("@tulaj1", frmkereses.inp_tulaj.szoveg)
acces_cmd.Parameters.AddWithValue("@tulaj2", frmkereses.tb_tulaj2.szoveg)
acces_cmd.Parameters.AddWithValue("@tulaj3", frmkereses.tb_tulaj3.szoveg)
acces_cmd.Parameters.AddWithValue("@erdo", frmkereses.j_erdo.Checked)
Dim selstring As String = ""
acces_cmd.CommandText = "select * from fotabla where id>=0"
If frmkereses.inp_knev.szoveg <> "" Then selstring = selstring & " and knev like @knev"
If frmkereses.inp_hrsz.szoveg <> "" Then selstring = selstring & " and hrsz like @hrsz"
If frmkereses.inp_terulet.szoveg <> "" And frmkereses.tb_teruletig.szoveg = "" Then selstring = selstring & " and terulet>=@terulet"
If frmkereses.inp_terulet.szoveg = "" And frmkereses.tb_teruletig.szoveg <> "" Then selstring = selstring & " and terulet<=@teruletig"
If frmkereses.inp_terulet.szoveg <> "" And frmkereses.tb_teruletig.szoveg <> "" Then selstring = selstring & " and terulet between @terulet and @teruletig"
If frmkereses.inp_erdo.szoveg <> "" And frmkereses.tb_erdoig.szoveg = "" Then selstring = selstring & " and erdo>=@erdo"
If frmkereses.inp_erdo.szoveg = "" And frmkereses.tb_erdoig.szoveg <> "" Then selstring = selstring & " and erdo<=@erdoig"
If frmkereses.inp_erdo.szoveg <> "" And frmkereses.tb_erdoig.szoveg <> "" Then selstring = selstring & " and terulet between @erdo and @erdoig"
acces_cmd.CommandText = acces_cmd.CommandText & selstring & " order by id"
'acces_cmd.CommandText = "select * from fotabla where id>=0 and terulet>4000 order by id"
'MsgBox(acces_cmd.CommandText)
'DisplaySPInformation(acces_cmd)
'lekérdezési tábla előkészítése
acces_reader = acces_cmd.ExecuteReaderAz a gondom vele, hogy amikor a lekérdezést végrehajtatom (csak a terület értéket adom meg), azt írja ki, hogy típuseltérési hiba a feltételkifejezésben.
Az adatbázisban a terület mező egész, itt pedig a paraméter típusa is egész. Tehát mindennek jónak kellene lennie. Mégsem az. Miért??
Adatbázisként acces-t használok (most kivételesen csak a projekt kedvééért - felesleges lenne a postgresql).
-
DerStauner
senior tag
válasz DerStauner #1867 üzenetére
a bolondját járatja velem az access. Vagy valamit nagyon benézek.
csak a knev-re hajlandó működni a where feltétel
még egy sima egyszerű stringre sem. Pedig a paraméterek értékei helyesek.
pl van az adatbázisban egy sor, ahol a tulaj1=valaki
ha csak ezt írom be a tulaj mezőbe, nem hoz ki semmit sem.
Miért van ez???
-
martonx
veterán
válasz DerStauner #1868 üzenetére
ez olyan hosszú volt hogy el se olvastam, de látatlanban egy nagyon hülye tanács. Nem lehet, hogy a string-et nem tetted '-ok közé? Azaz where mező = valami helyett where mező = 'valami'-t kellene használni.
Nagyon gagyi ötlet, de nem ez lehet a gond?Én kérek elnézést!
-
DerStauner
senior tag
válasz martonx #1869 üzenetére
de pont erre használom a paramétereket
pl. acces_cmb.parameters.addwithvalue("@tulaj1",txtulaj1.text)
és akkor simán írhatom, hogy .... where tulaj1=@tulaj1
ez mindenhol működött eddig. úgy látszik, az access egy külön dió?
EDIT: ha felcserélem a knev és a hrsz paraméteradási sorokat, akkor meg a hrsz működik úgy, ahogy kell, a knev pedig nem.
miért??
[ Szerkesztve ]
-
DerStauner
senior tag
válasz DerStauner #1870 üzenetére
hát ezért:
Instead of SQLClient has OleDB (what you call Access) no named parameters.
They are used in the order (sequence) they appear. Therefore you see often in sample code the question mark (?) used.
inkább összefűzögetem őket.
nem a legszebb, de hát ez van.
-
martonx
veterán
válasz DerStauner #1871 üzenetére
hát igen, az access az egy külön világ. Mondjuk éppen ezért nem kellene access-t használni külső DB-ként. Arra az access-nél csak jobbak vannak.
Én kérek elnézést!
-
DerStauner
senior tag
válasz martonx #1872 üzenetére
igen, ezt tudom, de erre a kis projektre nem érdemes egy normális db-t alkalmazni
egy postgresql-t elég nehéz belenyomni egy setup-ba, úgy, hogy click-click-re tökéletesen felmenjen
mert ha fel is megy, ezer gondja lehet, hogy miért nem kapcsolódik a program a szerverhez -
martonx
veterán
válasz DerStauner #1873 üzenetére
nem, de ott van például az SQL CE vagy az SQLite. Az access oledb-je ráadásul 64 bites környezetben nem is működik, office is kell, hogy legyen a gépen. Bármilyen kicsi is a projekt SQL CE-t (vagy sqlite-ot) érdemes használni, az access-t pedig tökéletesen mellőzni kellene.
Én kérek elnézést!
-
DerStauner
senior tag
válasz martonx #1874 üzenetére
"Az access oledb-je ráadásul 64 bites környezetben nem is működik"
erre a projekt elején sajnos rá kellett jönnöm. de kiküszöbölhető volt.
"office is kell, hogy legyen a gépen"
ezt nem tudtam 100%-osan, nem elég csak a jet?
már nem is emlékszem, melyikkel, vagy az sql ce-vel, vagy az sqlite-tal már annak idején kísérletezgettem, amikor a témát kóstolgattam.
egyre emlékszem: rohadt lassú volt.
-
martonx
veterán
válasz DerStauner #1875 üzenetére
Én mindhármat használtam, igaz minden esetben csak tényleg minimális adatmennyiséget (néhány tucat sor) tároltam bennük. Ennyiből én nem láttam sebesség különbséget köztük.
Én kérek elnézést!
-
Speeedfire
nagyúr
Kérdésem az lenne, hogy itt a 3. sorra miért dob nekem errort? A fájl létezik pedig.
Ha meg zárójelbe rakom a paramétereket a run-nál, akkor hibát dob.WScript.Sleep 180000
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "C:\Program Files\wamp\wampmanager.exe",0,True
WScript.Sleep 120000
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "C:\Users\Speeedfire\AppData\Roaming\Dropbox\bin\Dropbox.exe",0,True
WScript.Sleep 300000
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "C:\Users\Speeedfire\AppData\Local\Microsoft\SkyDrive\SkyDrive.exe",0,TrueFotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
sztanozs
veterán
válasz Speeedfire #1877 üzenetére
Azért, mert ha zárójelbe rakod, akkor nem statementként működik, hanme function-ként, tehát vagy meghívni kell (asszem call-lal), vagy át kell adni a visszatérési értéket valaminek.
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...
-
Speeedfire
nagyúr
válasz sztanozs #1878 üzenetére
Átírtam call-ra, most elfogadja a zárójelet, ellenben még mindig azt írja, hogy a fájl nem található. Ilyenkor mi van? Csináljak valahova egy parancsikont róla és azt linkeljem be neki?
Ahol nincs szóköz a mappa nevében, azt simán elindítja.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
sztanozs
veterán
válasz Speeedfire #1879 üzenetére
Szóközzel próbálj meg rövid pathnevet, avgy rakj az elejére és a végére dupla macskakörmöt:
"""c:\elérési útvonal\fájl.exe"""[ 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...
-
TIKI3
csendes tag
sziasztok. Visual basic 6ban programozunk, és olyan kérdésem lenne h ha van egy szöveges fájlom és abban számok vannak sortöréssel elválasztva, akkor ezt h tudnám egy tömbe beolvasni ? Előre is köszönöm.
-
kotapeter
csendes tag
Kedves Fórumozók!
A segítségetekre lenn szükségem.
Visual Basicben fejlesztgetek egy iskolai szoftvert és kicsit megakadtam.
A program lényege a következő:
Egy Access adatbázisban lévő adatokat (diákok adatait: név osztály lakcim stb..) dolgozza fel.Ezeket az adatokat szűrni szeretném.
Azt szeretném, hogy a felhasználó tudja hozzáadni a feltételeket.Tehát, ha úgy szeretnék szűrni, hogy kollégista lányok a 12. osztályból, akkor legyen egy "Feltétel hozzáadása" gomb és ki tudom választani:
- Osztály: 12
- Lány: Igen
- Internátus: Igen(Csináltam olyan szűrést, hogy minden adatot beraktam és a programon belül a textbox-okba be lehet írni a feltételeket, viszont ha üres a mező akkor megborul a rendszer..)
Ötleteiteket előre köszönöm!
[ Szerkesztve ]
-
martonx
veterán
válasz kotapeter #1883 üzenetére
"Csináltam olyan szűrést, hogy minden adatot beraktam és a programon belül a textbox-okba be lehet írni a feltételeket, viszont ha üres a mező akkor megborul a rendszer.."
Ez így kiindulásnak nem rossz. Arra figyelj oda, hogy a feltételeidben kezeld le az üres textbox-ot is, mondjuk valahogy így (szintaktikailag lehet hibás a példám):
where
(mezo1 = textbox1.text or textbox1.text = '')
and (mezo2 = textbox2.text or textbox2.text = '')
stb...Én kérek elnézést!
-
DerStauner
senior tag
Sziasztok!
Két kérdésem lenne:
1. Csináltam egy egyedi combobox-ot. Minden jól működik, egyet kivéve: ha legördítem a combobox-ot, és úgy döntök, hogy nem választok ki semmit, hanem félrekattintok, akkor azt szeretném elérni, hogy tűnjön el a legördülő rész, úgy, mint a szokványos combobox-nál. Kép mellékelve. Próbáltam a lostfocus event-et felülírni, de nem jártam sikerrel. Nem is lép be a lostfocus-ba, csak akkor, miután már választottam egy item-et, bezárult a legördülő lista, és úgy lépek el.
2. Ha a combobox legördülő része túllóg a saját container-e határán, akkor a maradék már nem látszik. Hiába írtam neki, hogy bringtofront. Kép mellékelve.
[ Szerkesztve ]
-
Lengyi
aktív tag
Üdv
Hátha találkozott már valamelyikőtök hasonlóval. Adott egy dokumentum, mely az alábbi módszerrel van védve. A kérdésem az lenne, hogy van e rá esély, hogy esetleg visszanyerjem vagy ez lehetetlen? Előre is köszönöm! -
sztanozs
veterán
1) leszeded a jelszót a vba projektről
2) bekapcsolod a debug módot
3) kézzel végignyálazod a kódot (és legalább a konstansokat visszaváltoztatod fix értékekre)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...
-
vilag
tag
Üdv!
Lenne egy olyan kérdésem, hogy valamely vezérlő RowSource-át be lehet e állítani úgy, hogy nem cella neveket adok meg hanem oszlop és sorszámokat?
Pl.: Combobox1.RowSource = "napló!a2:b5" helyett "napló!xy:xy", ahol x=oszlopszám és y=sorszám
Azért lenne szükséges, hogy ha esetleg a forrástáblába be akarok szúrni egy oszlopot vagy bővíteni akarom a sorok számát, akkor ne kelljen az egyes vezérlők tulajdonságait folyton kézzel áligatni.
Az már megvan, hogy a kívánt oszlop fejlécét megkeresve az adott táblában kinyerem az oszlop sorszámát az
Application.Worksheetfunction.Match-el.
Vagy olyan megoldás is érdekel, amelyben a keresés eredményeként nem oszlopszámot hanem oszlonevet kapok vissza.
Ez talán még jobb volna.Lehetséges?
Ha igen, akkor hogyan?Köszönöm!
Üdv, vilag
-
sztanozs
veterán
Dim r As Range
With Worksheets(munkalapneve)
Set r = .Range(.Cells(kezdosor, kezdooszlop), .Cells(utolsosor, utolsooszlop))
End With
ComboBox1.RowSource = r.Address[ 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...
-
Bobrooney
senior tag
Sziasztok!
Az lenne a kérdésem (VBA), hogy van kb 40 CommandButton-öm aminek a Click eseményét szeretném kezelni, lehet ezt valahogy ciklusban szervezni, vagy külön külön kell megírni mindet?
Köszönöm előre is a válaszokat!
-
-
sztanozs
veterán
válasz Bobrooney #1898 üzenetére
Mármint mi a probléma? Megcsinálsz mindent az első válasz alapján:
1) Csinálsz egy classt (még a neve is oda van írva - TextBoxEventHandler)
2) Belemásolod az újonnan készített class-ba az első adag kódot
3) Belelépsz a formod kódszerkesztőjébe
4) Belemásolod a második kódot (persze, ha volt már valami kitöltve a UserForm_Initialise-ben, akkor hozzácsapod az elejéhez/végéhez)
5) A TextBoxEventHandlerclass kódszerkesztőjében a Private Sub m_oTextBox_Change() -et szerkeszted a kedved szerint...Hol akadtál egyáltalán el?
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...