- iPad topik
- Amazon Kindle
- Érkezik a Crucial LPCAMM2 memóriamodulja
- HiFi műszaki szemmel - sztereó hangrendszerek
- Dobozos verziót kapnak az IGP nélküli AMD Ryzenek
- Milyen alaplapot vegyek?
- Épített vízhűtés (nem kompakt) topic
- Azonnali VGA-s kérdések órája
- Házimozi belépő szinten
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
Hirdetés
-
Távozott az OpenAI társalapítója
it Ilya Sutskever nem csak az OpenAI társalapítója, a vezető tudósa is volt – most távozik a ChatGPT fejlesztőjétől.
-
Retro Kocka Kuckó 2024
lo Megint eltelt egy esztendő, ezért mögyünk retrokockulni Vásárhelyre! Gyere velünk gyereknapon!
-
Vigor - Alig egy nap múlva PC-n is elérhető lesz a korai kiadás
gp Néhány év késéssel újabb platformra is megkapjuk a játék early access változatát.
Új hozzászólás Aktív témák
-
martonx
veterán
hopsz a munkalap választásra megvan a válasz, gugli a barátod
Tedd bele az OpenDataSource-ba, hogy : Connection:="Munka1"
Ennek analógiájára, lehet lenne valami Headers:=true is vagy ilyesmi. Ez utóbbi csak ötlet volt. Ááá a HDR:=YES; mintha pont ezt jelentené.OpenDataSource Name:="C:\Documents\Names.xls", _
ReadOnly:=True, _
Connection:="Sales"Szóval akkor nem a header-rel lesz bajod, hanem a munkalap kiválasztásával.
Esetleg még egy próba lehetőség letiltani a felugró ablakokat, ilyenkor hátha csöndben a háttérben megcsinálja? Application.DisplayAlerts = false
Én kérek elnézést!
-
#90999040
törölt tag
ezt kell a kívánt Word doksiba, vagyis a célfájlba írni
Ha a Word konstansait definiálod az Excelben, akkor Excelben is használható.
Az Excel ugyanis alapból nem tudja a Word konstansait. Pl.:Const wdSendToPrinter = 1
Ezeket az értékeket meg tudod nézni Wordben úgy, hogy kiiratod őket. Pl.:
Debug.Print wdSendToPrinter
-
#90999040
törölt tag
Ha az Excel VBA Tools >> References résznél hozzáadod a Microsoft Word x.y Object Library-t, akkor használhatod a Word objectumait.
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
Set wrdDoc = wrdApp.Documents.Add
'wrdDoc.Close
'wrdApp.QuitEz Excelből elindít egy word alkalmazást, hozzáad egy dokumentumot, és ha az utolsó 2 sor elejéről kiveszed az aposztrofokat, akkor be is zárja.
Persze lehetne a referencia hozzáadása nélkül is, akkor viszont a Word.Application és a Word.Document helyett Object-eket kellene írni.Természetesen a word-ből is lehet az excel objektumait használni.
Csak mint írtam, ekkor alapból nem "ismerik fel" a másik alkalmazás konstansait. ezért kell ezeket külön definiálni, mert különben teljesen mást csinál a kód, mint amit szeretnénk...
-
ArchElf
addikt
Átvihető, csak át kellene adni neki.
A változók a VB-ben nem globálisak (hacsak nem annak lettek definiálva), a hatókörük csak az adott szerkezetre (szubrutinra, osztályra) vonatkozik.
így add át neki:
Sub csakszam(tb As TextBox, kc As Integer)
'8: backspace, 9: tabulátor, 13: enter, 17: Ctrl, 32: space, 46: delete, 48-57: felső számok, 86: v, 96-105: numpad számok, 109: numpad mínuszjel, 110: numpad pont, 186: é, 187: ó,
'188: vessző, 189: kötőjel, 190: pont, 191: ü, 192: ö, 219: ő, 220: ű, 221: ú, 222: á, 226:í
If kc = 8 Or kc = 46 Or _
(kc >= 48 And kc <= 57) _
Or (kc >= 96 And kc <= 105) Then
tb.Locked = False
Else
tb.Locked = True
End If
End SubAmúgy miért locked, ennek így semmi értelme nincs???
Én inkább a Changed-et használnám és megvizsgálnám, hogy az összes karakter érvényes-e (vagy egyszerűen használnék masked textbox-ot)...
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
Homer
tag
Én úgy oldanám meg első körben, hogy a fejléc sorain végigmennék egy each cells in row(1) ciklussal, aztán egy változóban eltárolnám azt az oszlopszámot ahol a cella értéke megyezik a keresett oszlopnévvel. Ezután már hivatkozhatsz arra az oszlopra mint oszlop sorszám...
-
Homer
tag
Ha olyan függvényt írsz ami paraméterként megkapja a keresett szöveget, visszaadási értéke pedig az oszlop száma, akkor elég egyszer megírni, utána használhatod a függvényt ahányszor, és ahol csak akarod!
Valahogy így:
private function oszlop(byval mitkeresel as string) as integer
itt, a fent leírt módszerrel a fejlécsor összes elemén végigmész, majd
ha megvan a keresett oszlop akkor
return keresettoszlopszám
else
msgbox("Nincs meg minden oszlop")
end[ Szerkesztve ]
-
martonx
veterán
A baj az, hogy amit szeretnél az kivitelezhető, de összetettsége miatt baromira nem egy fórum keretein belül.
Klasszikusan elértél arra a szintre, ahol vagy veszed a fáradtságot és magadtól kimókolod a megoldást, vagy fizetsz érte, és helyetted egy szabadúszó programozó valamelyik ráérős estéjén megcsinálja neked.Én kérek elnézést!
-
Homer
tag
Én még sosem használtam eddig a HOL.VAN függvényt, de jah, igazad van! Azzal is meg lehet oldani a feladatot. (Mondjuk a fenti megoldásom is hasonló eredményt adna.)
A konkrét feladattól függ, hogy én melyiket használnám. Ha nem muszáj makrobizni, akkor én a helyedben megmaradnék a "gyári" függvényeknél... -
ArchElf
addikt
-
martonx
veterán
Úristen, na ezt itt hagyjátok gyorsan abba.
Az excel nem erre való. Hahó.
Az átlag user által elképzelhetetlenül sokat tud az excel, de egyszerűen nem erre való.
Egyáltalán honnan jut manapság valakinek az eszébe ilyen marhaság?
Ha nem akarjátok túlbonyolítani a dolgot, meg sokat programozni,akkor használjatok lightswitch-et (ehhez mondjuk fizetős az ide) .Net vonalon, vagy oracle adf-et (ehhez meg fizetős az alkalmazás szerver) javavonalon.
Vagy ha már Office, akkor az Access erre lett kitalálva.Én kérek elnézést!
-
Homer
tag
Juhuhuhúú... Azt kell, hogy mondjam, részben egyetértek az előttem szólóval. Az excel már ehhez egy kicsit kevés, és nem erre való!
Ami miatt viszont meg tudlak érteni, az az hogy hasonló cipőben járok. A cégnél ahol dolgozom nekem is sokat segít a makró, és én is ezért kezdtem el foglalkozni a VB-el és a VBA-al. Nálunk SAP van és abban kellene megoldani a hasonló feladatokat, de a fejlesztés időbe telik, és az a szomorú tapasztalatom, hogy ha kérünk egy programfejlesztést akkor hosszas várakozás után ugyan történik valami, de mégsem olyan lesz a z új program mint amilyet szerettünk volna.Hasonó kaliberű programokat írogattam már én is a könyvelgetéseinkhez. (SAP mellett! Egyik kollégám szerint az SAP a "Sz*pjon A P*raszt"-nak a rövidítése )
Kérdésedre:
Én egyesével töltögetném fel az oszlopban lévő adatokkal a combobox items gyűjteményét.valahogy így:
dim e as scripting.dictionary
for each elem in column(x)
...if not consist e elem.value and elem.value<>"" then e.add(elem.value
nextA fenti megoldás csak ötletelés, nem írtam be sehová, tehát valszeg nem működik ha copy-paste-zed
-
martonx
veterán
A VBA az VBA, ha excel-t, ha access-t használsz.
Az accessnek megvan az az előnye, hogy az űrlapokhoz nem kell szinte semennyi makrót írni, elég csak varázsolni. Pl. amivel most szívatod magad, az jó eséllyel accessben varázsolva pár perc meló lenne.
Acces-hez vannak nagyon jó könyvek tutorialok, én a helyetekben rászánnám az időt. Ebben a topikban pedig ugyanúgy kapnátok segítséget, mint eddig.
Teljesítményben pedig össze se lehet majd hasonlítani. Csatolt táblaként tudja használni az oracle db tábláit is, normális lekérdezéseket, sql-eket lehetne írni benne.Van tapasztalatom agyonmakrósított excelekkel
Soha nem fog 100%-osan működni, mindig kell hozzá kompromisszum, ráadásul a 90-es - 2000 évek legeleje óta rengeteget fejlődtek az egyéb megoldások.Én kérek elnézést!
-
vilag
tag
Megoldottam, tudtam, hogy valami egyszerű megoldása lesz.
Selection.Sort Key1:=Cells(kulcs1, 2), Order1:=xlAscending _
, Key2:=Range(kulcs2), Order2:=xlAscending _
, Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
, DataOption1:=xlSortNormal, DataOption2:=xlSortNormalahol range(kulcs1) helyett, cells(kulcs1, 2) van,
ahol kulcs1 a korábbi b2 helyett, már csak az oszlop száma (pl.4) -
martonx
veterán
nem értetted amit írtam. Nem érdekel a kódod. A hibaüzenet esetleg érdekelt volna, bár az excel elég semmit mondó üzeneteket ad vissza.
Egy dolog érdekel, hogy a combobx4 be van-e kötve valamelyik mezőhöz, és ha igen melyikhez.
Mert ez lenne a legépeszűbb magyarázata a change event kiváltásának.
Bár látom feleslegesen koptatom a billentyűzetet.Én kérek elnézést!
-
martonx
veterán
én sem egyetemen tanultam
A kódodat nem ismerem, nem látom, őszintén nem is akarom látni. Csak találgatok, hogy mi okozhatja az esemény elsülését. És az biztos, hogy valami triviális dolog.
A kérdésedre te magad fogsz tudni válaszolni, egy minimális debugolással.
Én kérek elnézést!
-
ArchElf
addikt
Bocsi, ezek most cellák, vagy vezérlők?
Amúgy a cellafrissítések automatikus lefutását kódból ki lehet tiltani, amíg az problémákat okozhat.
[link]AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
martonx
veterán
form bezárás:
Private Sub CommandButton1_Click()
Unload Me
End SubPrivate Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
End If
End SubJól sejtettem, hogy a vezérlők rá vannak kötve cellára
Ez a nem azonnali hatály, nem túl biztató, immár tuti, hogy itt lesz a hiba.Én kérek elnézést!
-
martonx
veterán
Biztonsági beállításokban nem tudok segíteni. Amit írtál, és ha jól értettem, ilyen eset nem fordulhat elő, csak direkt felhasználói átállításkor.
A miértjét már ezerszer leírtam. A combobx rá van kötve a cellára. Amikor a cella értéke változik, a combobx értéke is változik, azaz lefut a change esemény. Tényleg ennyire nem lehet felfogni?
Én kérek elnézést!
-
#90999040
törölt tag
Gondolom exit eseményt akartál írni, mert az exit sub egy kicsit más.
A lényeg az, hogy ez nem csak akkor következik be, ha az utolsó aktív vezérlőről van szó, hanem amikor egy frame-n belüli vezérlőről átváltasz egy frame-n kívülire. Ugyanis ilyenkor nem a frame-n belül levő vezérlő exit-je fut le, hanem a frame exit-je.
Ezt pl. így ki lehet kerülni:
A userformon belül létrehozol egy Control típusú változót, pl.: Private active As Control
Ezután az adott frameben levő minden vezérlőjének Enter() eseményébe beírod ezt: Set active = Me.<Frame neve>.ActiveControl
Az adott vezérlőd exit()-jébe pedig ezt:
Private Sub <Vezérlőd>_Exit(.........
If Not active Is Nothing Then
'itt lehet meghívni az eseményt
End If
End SubEz mellett persze még a frame exit()-jét is le kell kezelni:
Private Sub <Frame neve>_Exit(.......
If Me.<Vezérlőd>.Name = Me.<Frame neve>.ActiveControl.Name Then
Set active = Nothing
'itt ugyanúgy meghívod a vezérlőd exit()-jénél végrehajtandó kódot
End If
End Sub -
sztanozs
veterán
1) háááát - szerintem elég meredek ötlet - bár vb.net-et kézzel is meg tudod írni és kézzel fordítani vbc.exe-vel (Windows\Microsoft.NET\Framework alatt keress), nem kell visual studio sem hozzá.
2) Excelből nem tudsz exe-t csinálni, esetleg szerezz be egy VB6-ot vagy egy VB.NET (Express ingyen van) és hacsak nem Office specifikusak a VBA tevékenységei, akkor át tudod tenni a projektedet (kis tanulással) VB6-ba, vagy VB.NET-be.
3) minek .bat fájl, ha egyszer az excelre kattintva is elindul - annak is ki lehet tenni parancsikont és annak is tudsz szerintem ikont változtatni. A .bat-ból indítsára meg (inkább .cmd-t használj), asszem ha call-al hívod meg a fájl akkor nem várja meg a futást, hanem kilép.[ 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...
-
martonx
veterán
Attól függ milyen .Net verzióval fordítod, olyan .Net futtató fog kelleni.
XP-ken alapból semmilyen sincs, win7-en már van 3.5-ös alapból, tehát ezekre nem kell külön telepíteni.
És igen az 5000 soros kódot újra kell írnod, noha a szintaktika hasonlósága miatt ez korántsem olyan vészes munka, mintha pl. C-re írnád át.Én kérek elnézést!
-
sztanozs
veterán
5000 sor nem egy vészes munka, ha ismered a program működését, a megvalósítandó célokat, az adatstruktúrát, stb.
A fájl átnevezgetést (inkább a szükségességét) viszont nem nagyon értem.
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...
-
sztanozs
veterán
VB és VB.NET-ben is megírhatod, de annak, hogy a VB runtime fent legyen egy gépen kb annyi a valószínűsége, mint hogy a .NET fent legyen (sőt mára már megkockáztatom, hogy az utóbbié nagyobb).
A .NET keretrendszer nem egy nagy dolog, fel kell rakni (meg kell patchelni) és már mehet is. Amúgy le tudod ellenőrizni, hogy az adott gépen fent van-e, csak meg kell nézni, hogy ez a könyvtár létezik-e és vannak alatta v* alkönyvtárak:
%systemroot%\Microsoft.NET\FrameworkVb6-ból és VB.NET-ből is exe-t lehet csinálni. Egyik sem interpreteres nyelv (mint a vba, vagy mondjuk dos-os időkből a qbasic).
[ 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...
-
martonx
veterán
Azért eléggé nulla tudással állsz neki, ha életedben nem hallottál még a Visual Studio-ról és a .Net technológiáról. No sebaj sosem késő szintet lépni. Ez esetben lehet mégsem lesz ujjgyakorlat átportolnod VB.NET-re a cuccot?
És bizony futtatáskor is kelleni fog a .Net, nem csak az exe elkészítésekor. Mivel a .Net nem fog elrontani semmit a felhasználók gépén, az illegás rendszergazdai hozzáféréseddel is nyugodtan feltelepítheted.Én kérek elnézést!
-
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).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...
-
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 SubJOGI 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...
-
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 SubJOGI 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...
-
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.[ 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...
-
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...
-
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...
-
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!
-
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...
Új hozzászólás Aktív témák
- iPad topik
- Kerékpárosok, bringások ide!
- Távozott az OpenAI társalapítója
- Amazon Kindle
- Budapest és környéke adok-veszek-beszélgetek
- Érkezik a Crucial LPCAMM2 memóriamodulja
- HiFi műszaki szemmel - sztereó hangrendszerek
- Horgász topik
- Dobozos verziót kapnak az IGP nélküli AMD Ryzenek
- Diablo IV
- További aktív témák...
- JBL EON Compact - Újszerű, akár beszámítással
- JBL Tune 670NC vezetéknélküli fejhallgató - Új, Bontatlan, Garanicális akár beszámítással
- Bang & Olufsen B&O Beolit 20 - Újszerű, garanciális akár beszámítással
- JBL Reflect Aero vezetéknélküli fülhallgató - Új, Bontatlan, Garanicális akár beszámítással
- HP HyperX Cloud Flight vezetéknélküli gamer fejhallgató - Új, bontatlan, garanciális
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Alpha Laptopszerviz Kft.
Város: Pécs