- Luck Dragon: Asszociációs játék. :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- eBay-es kütyük kis pénzért
- moha bácsi: VIII. Viharsarki Hobbi Elektronika Találkozó Békéscsaba 2025.06.14. szombat
- hdanesz: Elektromos autózás - első élmények
- sziku69: Fűzzük össze a szavakat :)
- sziku69: Szólánc.
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- gban: Ingyen kellene, de tegnapra
- zebra_hun: Hűthető e kulturáltan a Raptor Lake léghűtővel a kánikulában?
Új hozzászólás Aktív témák
-
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?
-
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!
-
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
-
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! -
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.
-
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... -
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!
-
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.
-
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""" -
-
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.
-
Speeedfire
félisten
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,True -
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.
-
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 #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.
-
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 #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.
-
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.
-
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??
-
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? -
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???
-
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).
-
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. -
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. -
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
-
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 Function -
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
-
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???? -
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
A wb a Form1 egy lokális változója, amit inicializáláskor töltesz fel, ahogy - szintén ugyanabban a hszban - írtam is:
Kód - Workbook:
Private Sub Workbook_Open()
Application.WindowState = xlMinimized
Set UserForm1.wb = Me
UserForm1.Show
End Sub
Kód - Form:
Public wb As Objectwcount=0-ra:
Addin-moódba teszed végül a workbook-ot? Akkor tényleg nem jelenik meg a workbook-ok között. -
vilag
tag
válasz
sztanozs #1835 üzenetére
Üdv!
Csináltam magamnak egy kis időt és megnéztem a több munkafüzetes megoldást is.
A megoldás működik...csak fordítva
Igazából azt írtad, hogy ha csak egy munkafüzet van nyitva, akkor csak a munkafüzetet zárja be, és ha több akkor pedig az egész programot
De a problémát megoldottam.
A hiba a következő volt:Private Sub CommandButton1_Click()
Dim wcount As Integer
Dim twb As Workbook
wcount = 0
For Each twb In Application.Workbooks
wcount = wcount + 1
Next
If wcount = 1 Then helyette 0 kell
Application.Quit
Else
Application.DisplayAlerts = False
wb.Close False
End If
End SubValamint a wb.Close -ra hibát dob, így azt átírtam twb-re (de így sem működött), így átírtam ThisWorkbook-ra.
Meg annyi, hogy én ez után a hibajelzést újra true-ra állítottam, hogy a nyitva maradt munkafüzetekben működjön. Bár lehet, hogy ez csak adott munkafüzetre vonatkozik.
Az igazat megvallva ezt nem tudom.Mindent egybevéve, nagyon köszönöm a segítséget, most több programomba is beépítem a megoldást.
Üdv, vilag
-
PumpkinSeed
addikt
Van valami kötelező olvasmány ami segít egy kezdőnek? Mit ajánlotok? Most kezdett érdekelni ez a téma.
-
vilag
tag
válasz
sztanozs #1835 üzenetére
Hali!
Az ötleted sokat segített a modul tekintetében.
a Show Modal = False az jó volt, de Window Position tulajdonsága nincs a userformnak.Végül is úgy sikerült megoldani, hogy ötvöztem az általad javasoltat a saját ötlettel, azaz a Show Modal-t Falsra állítottam, illetve a userform initializáláshoz beírtam ezt:
Application.WindowState = xlMinimizedA kettő együtt végül is azt csinálja amit szerettem volna
A több Workbook-ra kínált megoldással még nem volt időm foglalatoskodni, mert a másik sürgősebb.
Azzal igazából azt szeretném megoldani, hogy amikor a userformon megnyomom a kilépés gombot, akkor megvizsgálja, hogy van e nyitva másik munkafüzet is vagy sem. Ekkor kettéválna a folyamat:
1. Az eredmény az, hogy nincs nyitva másik munkafüzet -> zárja be az egész excelt
2. Az eredmény az, hogy van nyitva másik munkafüzet -> csak ezt a munkafüzetet zárja be.A két különböző bezárást le tudom vezérelni, igazából a vizsgálatot nem tudtam megoldani.
Remélem az általad vázoltal meg tudom majd oldani.
Üdv, vilag
-
sztanozs
veterán
válasz
sztanozs #1842 üzenetére
Ja - és ahogy mondani szoktuk - nem ártana debogolni... Sok kérdést meg lehet vele spórolni:
0. Megoldás
1) azon a soron, ahol megáll, megnézed a változók értékét...1. megoldás
1) Problémás sorra rámész
2) F9 vagy sor elé (szürke sávra) kattintasz - Breakpoint
3) még egyszer futtatod a kódot és megnézed, mi a sorban található változók értéke - a problémák nagy része a helytelenül használt / inicializált változókból adódik.2. megoldás
1) Problémás sor elé beszúrsz egy sort:
On Error Resume Next
2) Problémás sor után beszúrod az alábbiakat:
If Err Then
MsgBox Err & vbCrLf & Err.Description
Err.Clear
End If
On Error Goto 0 -
sztanozs
veterán
válasz
sztanozs #1841 üzenetére
Amúgy vsz amiatt csinál(hat)ja, mert a tömb utolsó eleme üres:
3 printert kiválsztva
strComputer tartalma ez lesz: cn=printer1%cn=printer2%cn=printer3%
az ebből generált tomb pedig ez:
(
"cn=printer1",
"cn=printer2",
"cn=printer3",
""
)Szóval nem ártana levágni az strComputer utolsó karakterét
-
sztanozs
veterán
A tomb(j)-ben rendesen van formázva a nyomtató neve?
GetObject("LDAP://srv/" & tomb(j) & ",ou=Printers,ou=SZE,dc=domain,dc=local")
a "rendesen" alatt a cn=csoportnév formát értem.Kódbeillesztésre ezt*
//kód
dim valami as Variant
valami = 1
// még kód
dim masvalami as Variant
masvalami = valami* Kattintható kódok és arcocskák, második sor, első gomb: [Programkód]
-
dkaro
őstag
válasz
martonx #1823 üzenetére
Köszönöm a segítséget így nyert.
Most újabb hibánál akadtam el:
Sub RunScript
For i = 0 to (nyomtato.Options.Length - 1)
If (nyomtato.Options(i).Selected) Then
strComputer = strComputer & nyomtato.Options(i).Value & "%"
End If
Next
Dim tomb
Dim objGroup
Const ADS_PROPERTY_APPEND = 3
tomb = Split(strComputer,"%")
For j = 0 To (UBound(tomb))
Set objGroup = GetObject("LDAP://srv/"&tomb(j)&",ou=Printers,ou=SZE,dc=domain,dc=local")
objGroup.PutEx ADS_PROPERTY_APPEND, "member", Array("cn=user,ou=SZE,dc=domain,dc=local")
objGroup.SetInfo
next
End SubEz a script azt lenne hivatott csinálni, hogy a multiple selectben kiválasztott csoportokba berakja a user.
Sajnos 80005000-es hibaüzenetet kapok. Ettől függetlenül bekerül a user az összeskijelölt csoportba de a hibaüzenet zavar.
Természetesen rendszergazdaként futtatom a scriptet.
Köszönöm! -
sztanozs
veterán
Form properties:
Show Modal - False
Window Position - Center ScreenTöbb Workbookra - csak a formosat zárja be:
Kód - Workbook:
Private Sub Workbook_Open()
Application.WindowState = xlMinimized
Set UserForm1.wb = Me
UserForm1.Show
End SubKód - Form:
Public wb As Object
Private Sub CommandButton1_Click()
Dim wcount As Integer
Dim twb As Workbook
wcount = 0
For Each twb In Application.Workbooks
wcount = wcount + 1
Next
If wcount = 1 Then
Application.Quit
Else
Application.DisplayAlerts = False
wb.Close False
End If
End Sub -
vilag
tag
válasz
sztanozs #1833 üzenetére
Igazából csak annyit szeretnék elérni, hogy az excel megnyitása után azonnal csakis a userform látszódjon. Se a munkalap, se pedig az üres excel ablak ne látszódjon, csak és kizárólag a userform.
A táblába jelen esetben semmiféle kivétel-visszaírás nem történik!
Gyakorlatilag kódból fut minden.
Az egész csak annyit csinál, hogy gombnyomásra kiválasztott fájlt/fájlokat bizonyos helyre másol. Kilépéskori mentésre semmi szükség.
Rendben, valamint egy kilépés gomb.--------------------
A több munkafüzetes problémára esetleg valami megoldás?
Üdv, vilag
-
sztanozs
veterán
Egyrészt, ha Excel Addint csinálsz, akkor nem látszik a worksheet, de tud futni kód.
Másrészt el tudod takni kicsibe (minimized) a worksheetet, de így is látható marad (és megszünteti a többi ablak "Maximized" állapotát
Harmadrészt megnyitás után is át tudod rakni Add-in típusba, viszpnt úgy nem fogod tudni menteni a save gombbal, csak formról.Add-in-be átrakni megnyitáskor:
Private Sub Workbook_Open()
Me.IsAddin = True
End SubMentést viszont kézzel kell csinálnod, mert addin típusú excel-t nem lehet xls/xlsm-be menteni, csak xla-ba. Így mentés előtt kézzel ki kell szedni az Addin property-t (ami láthatóvá teszi a sheet-et - de jól lekódolva csak a mentés idejére).
ThisWorkbook:
Private Sub Workbook_Open()
Me.IsAddin = True
Set UserForm1.App = Me
UserForm1.Show False
End Sub
Public Sub WB_Save()
Me.IsAddin = False
Me.Save
Me.IsAddin = True
End SubUserForm:
Public App As Object
Private Sub CommandButton1_Click()
App.WB_Save
End Sub -
vilag
tag
Sziasztok!
Egy újabb problémával találtam szemben magamat.
A probléma az lenne, hogy egy excel dokumentumot úgy akarok megnyitni, hogy egyből a userform jelenjen meg, viszont (mivel ez nem túl nagy) a háttérben maga az extel tábla ne is látszódjon.
A googliban kutakodva meg is találtam amire szükségem van, de sajnos nem egészen úgy történik minden ahogyan én szeretném.
Már több megoldással is próbálkoztam de eddig csak félsikert értem el mindegyikkel.
1.Private Sub Workbook_Open()
Application.WindowState = xlMinimized
UserForm1.Show
End SubEbben az esetben a munkafüzet megnyitásakor az valóban a tálcára kerül, viszont a userform-al együtt.
2.
Private Sub CommandButton1_Click()
Application.WindowState = xlMinimized
UserForm1.Show
End SubEllenben ha egy úgy van megcsinálva, hogy a munkafüzetben van egy gomb, amihez ugyan ez a kód van beírva, akkor a gombnyomásra úgy működik ahogyan kell.
Csak ugye pont ezt szeretném elkerülni, mert semmi szükség még egy felesleges gombnyomásra.-----------------
Próbáltam már magából a userform initializálásból megcsinálni, de az eredmény ugyan az mint a 2. esetben.
Próbáltam már a userform initializálásból meghívni a kattintást, de az nem tetszett neki.
Próbáltam már az első programkódot megcserélni, azaz előbb nyitni a userformot aztán minimalizálni, de ekkor nem történik semmi.
Próbáltam már az első verzió után valahogyan aktiválni a munkafüzetet, de ez sem sikerült.Van esetleg valakinek valami használható megoldása?
------------------
Lenne még egy olyan kérdésem, hogy valahogyan ki lehet e nyerni, hogy az altív munkafüzeten kívül van e még nyitva másiki munkafüzet?
Kérdezem ezt azért, mert mondjuk egy kilépés gombnál akkor le tudnám vezérelni, hogy csak az aktív munkafüzetet zárja e be, vagy az egész excelt.
Így elkerülhető lenne, hogy a felhasználónál nyitva lévő (és esetleg mentetlen) más munkafüzetet is bezárjak. (Az application.displayalerts direkt falsra van állítva).Előre is köszönöm!
-
sztanozs
veterán
válasz
DerStauner #1829 üzenetére
Esetleg ha a cell teljes Paint-jét te valósítod meg...
-
martonx
veterán
válasz
DerStauner #1829 üzenetére
Ez most winforms, wpf, silverlight, vagy asp.net? Winforms-al nem hiszem, hogy tudnál valaha is ilyet csinálni.
-
DerStauner
senior tag
helló!
a social msdn-n eddig nem kaptam választ a kérdésemre, ezért itt is feltenném:
hogyan tudok egy datagridview cellához egy picturebox-ot hozzáadni? nem imagecell-re van szükségem, hanem egy textbox cell-re, aminek a jobb sarkában van egy picturebox. és ami fontos, hogy mindig látható legyen, tehát edit mode-ban is. egy custom column-t szeretnék létre hozni. ez lenne az első lépés (picturebox hozzáadása a cell-hez). de a neten nem találok semmit. a microsoft host control-os példáját próbáltam, nem az kell nekem.
tudjátok, minden control-nak van Controls tömbje, és akkor írhatom, hogy Controls.Add(picturebox). de úgy néz ki, hogy a cell-nek nincs.
-
Gülredy
tag
Megvan a megoldás (figyelmetlen voltam) a hozzászólásom tárgytalan!
-
Gülredy
tag
válasz
Gülredy #1826 üzenetére
Már rájöttem mit rontottam el nem tudom miért a-t írtam oszlop indexnek
Most így néz ki eddig, működni működik csak az a baj hogy csak az utolsó számot írja bele de azt 20x!
Tehát beleraktam a program végét is (az exportálást) a for ciklusba, így beírja 20x de csak az utolsó számot! Nekem meg pl az A oszlop 20. eleméig mindet bele kellene íratni.For i = 1 To 20
strSQL = "INSERT INTO valuta (b)"
strSQL = strSQL & "VALUES (" & Cells(20, 1).Text & ")"Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff
Next iMit rontok el szerinted?
-
martonx
veterán
válasz
Gülredy #1824 üzenetére
strSQL = "INSERT INTO valuta (a,b,c)" - itt adod meg, hogy mely sql mezőkbe akarsz értéket beszúrni.
strSQL = strSQL & "VALUES (" cells(sor,oszlop).text ")" - kell két and jel természetesen, csak a billentyűzetem szar.Az egészet pedig egy for vagy while ciklussal annyirszor futtatod ahány sorod van.
-
Gülredy
tag
Sziasztok!
Egy olyan kérdésem lenne, hogy hogyan tudnék excel-ből sql adatbázsiba exportálni oszlopokat?
Van egy próbálkozásom de nem tudom hogy hogy tudnám megadni az oszlopokat mert mindenre hibát dob!
Dim strSQL As String
Dim strXLSource As String
Dim lngRecsAff As Long
strConn = strConn & "Provider=SQLOLEDB;Data Source=;"
strConn = strConn & "Initial Catolog=;Trusted_Connection=YES"
Set cn = New ADODB.connection
cn.Open "DRIVER={MySQL ODBC 5.1 Driver}" _
& ";SERVER=localhost" _
& ";DATABASE=test" _
& ";UID=root" _
& ";PWD=root" _
& ";OPTION=16427"
strXLSource = "c:\david\test\Munkafüzet1.xlsm;Extended Properties=Excel 12.0"
'
'Import by using OPENDATASOURCE.
'
'INSERT INTO
'(SQL Fields)
'
'SELECT
'
'FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', 'Data Source=$]
strSQL = "INSERT INTO valuta (a)"
strSQL = strSQL & "VALUES "
'strSQL = " INSERT INTO valuta VALUES "
'SELECT a, b, c FROM valuta"
'strSQL = strSQL & " ([a]) "
'strSQL = strSQL & " SELECT [a] "
'strSQL = strSQL & " FROM "
'strSQL = strSQL & " OPENDATASOURCE('valuta', 'Data Source=" & strXLSource & "')...[tbla$] "
Debug.Print strSQL
cn.Execute strSQL, lngRecsAff, adExecuteNoRecords
Debug.Print "Records affected: " & lngRecsAff
End SubValójában ezt az strSQL-es részt nem igazán értem hogy hogyan adhatnám meg!
Egy értéket meg tudok adni sql szintaxissal de nekem egész oszlop adatait kellene exportálni! -
dkaro
őstag
Sziasztok!
Most a multiple selecttel akadtam el. Úgy olvastam hogy egy stringben tárolódik le az értéke a kiválasztott elemeknek vesszővel elválasztva. Adott ez a kód:
<html>
<head>
<title>My HTML application</title>
<HTA:APPLICATION
APPLICATIONNAME="My HTML application"
ID="MyHTMLapplication"
VERSION="1.0"/><script language="VBScript">
Sub RunScript
Dim strValaszt
strValaszt = ertek.value
document.write("<span>"&strValaszt&"</span>")End Sub
</script>
</head><body bgcolor="white">
<form>
<select multiple="multiple" size="3" name="ertek">
<option value='1'>1</option>
<option value='2'>2</option>
<option value='3'>3</option>
</select>
<input type="button" value="próba" onClick="RunScript">
</form></body>
</html>Csak az első kijelölt elem kerül bele a változóba. Hogy tudom belevarázsolni mindet?
Köszönöm! -
stigma
addikt
válasz
martonx #1818 üzenetére
Útközben sikerült megoldanom a problémát, bocsesz.
Amúgy lényegében a textbox-ok összerakása dátummá kellett, mivel ebből a dátumból építkezett tovább a moduljaim és maga a form ezért kellett volna hibakezelés rossz dátum esetén ne legyen gond, hanem inkább hibaleállás.Esetleg olyan kérdésem, lenne még, hogy lehet megoldani azt hogy a GetOpenFilename -el új ablak nyíljon meg ha egy fájlt kiválasztok?
Probléma az hogy Reflection-ben ami WRQ rendszer, VBA van aláépítve de egy átírtabb verzió, amiben nincs Dialog metódus hogy előhívjam csak GetOpenFilename van ami ha megnyitok egy fájt az elérési útját adja vissza.
fileToOpen = Application .GetOpenFilename("Text Files (*.txt), *.txt") -
martonx
veterán
Amit írtál kódot nem tűnik rossznak, szóval nem igazán értem, hogy most mi is a bajod?
Hogy kell bezárni a form-ot, a msgbox után? Vagy mit szeretnél tudni?
Esetedben abszolút nem kell az on error-okkal szórakozni. Simán használod az IsDate függvényt, és ennek értelmében vagy hibát jelzel vissza a felhasználónak vag futtatod a kódot. -
stigma
addikt
Hali abban kérnék segítséget, hogy lenne egy kivételkezelés amihez help-et kérnék.
3 textbox egy formon amiben egy adott dátum nap,hónap, év eredményét adom meg, majd azt a későbbiekben felhasználom, átalakítva dátummá.
Ehhez kellene valami error kezelés, mégpedig ha rossz dátumot adok meg az adott metódus ne induljon el vagy dobjon ki hibát, elég lesz egy msgbox is.(itt az intervallumokat már lekezeltem)sub lista()
...
on error goto errorhandler:
datum= ev.text + "." + nap.text + "." + textbox1.text (Ebből lesz a dátum)
if not isdate(datum) then
msgbox("Nem dátum formátum")
on error goto 0 'Dobjon üzenetet, álljon le a form futtatása
elseif datum = " " then
msgbox("Üres")
on error goto 0 'Dobjon üzenetet, álljon le a form futtatása
else
folytatódjon a többi parancs lefutása
itt próbáltam "on error resume next"-el, de sajnos semmit nem csinál.errorhandler:
msgbox err.descreption ' ide leeht inkább switch case -el kellene error-t kezelnem
exit subSegítséget előre is köszönöm, bocs ha nagy hülyeséget kérdeztem csak eléggé fáradt vagyok és ma meg kéne oldanom a problémát.
-
Gülredy
tag
Hogyan tudnám ezt a kódot úgy módosítani, hogy ne egy megadott intervallumot írjon ki pl A9
9-ig hanem mondjuk A9
9-től lefele az összes sort (balról jobbra) addig amíg van olyan cella amiben adat van?
Mert ha csak egy nagyobb számot írok a D-nek akkor egy csomó ;-t rak a fájlba, ami meg viszont kell, mert így kell kinéznie a fájban az adatoknak, mindnek külön sorba.
szerző1;cím1;kiadáséve1;kategória1;
szerző2;cím2;kiadáséve2;kategória2;
....Szóval amit beolvas a cellákból azok is ugyan ebben a sorrendben vannak, csak az nem megy hogy ne csak egy sort olvasson be, hanem annyi sort amennyiben adat van!
Private Sub CommandButton3_Click()
Dim ce As Range
Open "D:\export_from_xls.txt" For Append As #1
fileba = ""
For Each ce In Range("A9:D9")
fileba = fileba & ce.Value & ";"
Next ce
Print #1, fileba
Close #1
End Sub -
Gülredy
tag
Az előbbi feleadatot befejeztem, amely egy windows form-on végzendő feladat volt.
Most egy exlcel worksheet-en végzett feladathoz kellene segítség. Ilyen macro-s dolgokat még nem tanultam soha, de ez a kiadott feladat.
Szóval a problémám egyszerű, mégsem találok rá megoldást.
Van az excel táblázaton egy combobox, amelynek értéket kell adni. Ezt meg is tudom tenni, de csak úgy működik az én verzióm, ha a visual basic editorból lefuttatom. De így a felhasználó meg nem fogja látni a három variációt, csak ha elindítaná a programot.
Próbáltam a general részbe berakni, de úgy meg akárhányszor futtatom a programot mindig hozzáadja a három kategóriát a kategória combobox-hoz így nem három lesz belőlük hanem annyiszor három ahányszor futtatom a programot!Szóval itt a kód. (így nem látja a user megnyitáskor a három kategóriát, csak ha F5el lefuttatja visual basicből)
Private Sub Worksheet_Activate()
With ActiveSheet.ComboBox1
.Clear
.AddItem ("Regény")
.AddItem ("Verseskötet")
.AddItem ("Folyóirat")
End With
End SubHogyan tudnám a combobox-nak értékül adni ezt a három kategóriát úgy, hogy az már a dokumentum megnyitásakor benne legyen. Ha lehet kerülném a cellákból betöltött adatkénti megadást. De ha nincs más...
-
Gülredy
tag
válasz
martonx #1811 üzenetére
Nagyon köszönöm ez pont úgy működik ahogy kell!
Ráadásul ha egymás után veszek fel két rekordot akkor szépen külön sorba is rakja!
Úgyhogy nagyon eltaláltad a működését!
Nem kell levágnom a végéről se semmit mert ez így van jól!Annyit kérdeznék még, hogy a működését jól értelmezem-e?
készítünk egy fileba nevű változót ami üres lesz
Lesz egy for ciklus az első elemtől az utolsó lista elemig.
majd itt ez a rész nem teljesen tiszta, hogy a fileba nevű változóna értékül adjuk önmagát, és ahhoz hozzáfűzzük a lista i-edik elemét + ;De ettől miért marad egysorban?
-
-
Gülredy
tag
Sziasztok!
Remélem jó helyre írok, Excel-es visual basic-ből kérnék egy apró segítséget.Egy nagyobb feladat részfeladata lenne, hogy egy listbox-ba bevitt tartalmat (gomb nyomásra bevitt tartalmat) egy export gomb nyomására egy txt fájlba kell exportálni.
Ez meg is lenne, de megvan adva hogy milyen formátumba kell exportálni, az én megoldásommal pedig ugyan úgy exportálja ahogy a listában van!Szóval itt az én kódom:
Private Sub CommandButton_export_Click()
Dim i As Long
Open "D:\export.txt" For Output As #1
For i = 0 To lista.ListCount - 1
lista.Selected(i) = True
Print #1, lista.List(lista.ListIndex)
Next
Close #1
End SubEz így exportálja nekem a listát fájlba: (az adatokat csak találomra írtam)
Márai
Füveskönyv
1980
Verseskötet
----------De ilyen módon kellene beírnia a fájlba:
szerző1;cím1;1999;RegényHogyan tudnám a jelenlegi kódomat módosítani ahhoz hogy formázott legyen? Vagy teljesen más kódot kellene használni hozzá?
Régen tanultam már a visual basic-et...Előre is köszönöm a válaszokat!
-
dkaro
őstag
Hát megvan télleg triviális. Lemaradt egy ' a > előtt.
-
dkaro
őstag
Akkor újabb kérdésem lenne (gondolom lesz még
:
Adott ez a script részletem:
Célja az lenne hogy kiiratom a Printers ouban található Csoportokat (mind univerzális biztonsági csoport)
<script language="vbs">
Set objOU = GetObject("LDAP://srv0101vg/ou=Printers,ou=cég,dc=varosgazda,dc=hu")
objOU.Filter = Array("group")
For Each objGroup in objOU
document.write("<option value='"&objGroup.Name&">"&objGroup.Name&"</option>")
Next
</script>Nos ki is listázza a csoportokat de nem mindet. Csak 13at a 29ből hibát pedig nem kapok.
Mit kéne máshogy írnom?
Köszönöm!---
Szerk:
Pontosítanék. Minden 2kat ír csak ki. Ez vmi triviális hiba lehet. -
martonx
veterán
Szia!
Egy for ciklussal bejárod a tömböt, és mondjuk egy div-be (ami a DataArea) belerakod a rádió gombokat.
strHTML = strHTML & "<input id=" & intButtonCount & " type="radio value= " & tomb(i) & ">"
És az összeállított rádió gombokat így rakod bele a div-be:
DataArea.InnerHTML = strHTML -
dkaro
őstag
Sziasztok!
Remélem jó helyre írok. VBS HTA script írásban szeretnék segítséget kérni.
A célom:
Egy tömbbe kigyűjtöttem egy OU Groupjait.
Szeretném ezeket a groupokat html formban dinamikusan megjeleníteni.
Tehát pl ha x a mérete a tömbnek akkor generáljon le x radiogombot így, hogy:
radiogomb1 értéke tomb(0)
radiogomb2 értéke tomb(1)
stb...Tudom, hogy kicsit összetettebb de remélem valaki tud segíteni.
Azt fontos megjegyezni, hogy nem egész 2 napja "foglalkozgatok" vbssel.
Előre is köszönöm a segítséget!
dkaro -
vilag
tag
válasz
martonx #1802 üzenetére
Bár a mi rendszergazdánk a 90%-ba esik (nem ügyes annyira), azért meg is kell védenem, mert csak mellékesen rendszergazda, emellett ugyan olyan ügyintéző mint bármelyikünk a cégnél. A nemakarás, így betudható a rengeteg ügynek.
Mondjuk ha sokat macerálom valami miatt általában kötélnek áll
-
vilag
tag
válasz
sztanozs #1801 üzenetére
Van esetleg valami hasonló command file mintád?
Valami hasonlót kerestem igazából. Bár sejtem, hogy egy file ikoncserét nemigen lehet belőle levezérelni.
Már az is haladás volna ha egy asztali parancsikon elhelyezést le tudnék vele vezérelni.Egyébként van domain, szerver meg minden Istennyila.
Azért az vicces lenne ha a rendszergazda gépén is megjelenne a kis telepítőablak
-
sztanozs
veterán
Domain van, vagy csak egy csomó gép workgroupban?
Domainban simán berakjátok domain policy-be a telepítést és következő újrainduláskor felmegy. Workgroupra meg csak kell csinálni egy command file-t ami végigfut a hálózaton, fellép az összes gépre és felmásolja/elindítja a telepítőt (vagy csak bemásolod a silent telepítést indító cmd-t a startup-ba - ami ha fent van már letörli magát).
Új hozzászólás Aktív témák
Hirdetés
- Sigma 18-50mm f/2.8 DC DN (C) Sony E objektív + Sigma 55mm WR CPL szűrő
- LG OLED 65 C1 4K 164cm 120Hz
- Samsung Galaxy S25 Ultra 12/256Gb-szinte új-2028.05.05-ig garanciás
- Eladó ASUS Phoenix GTX 1660 OC 6GB (PH-GTX1660-O6G)
- Új INTEL LAMINAR RM1 (LGA1700/1851) nullperces, rézmagos hűtők! GAR/SZÁMLA! A LEGOLCSÓBB SZÁMLÁS ÁR!
- Bomba ár! HP ProBook 430 G3 - i5-6GEN I 8GB I 256SSD I HDMI I 13,3" HD I Cam I W10 I Garancia!
- AKCIÓ! MSI B365M i5 8600 16GB DDR4 512GB SSD RX 5700XT 8GB CM MASTERBOX Q300L Zalman 600W
- 35" ASUS ROG Swift PG35VQ curved GAMER monitor
- Bomba ár! Dell Latitude E7270 - i7-6GEN I 8GB I 256GB SSD I 12,5" FHD I HDMI I CAM I W10 I Gari!
- Motorola E40 64GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged