- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Honor 200 - kétszázért pont jó lenne
- Samsung Galaxy S21 FE 5G - utóirat
- iPhone topik
- Samsung Galaxy S23 Ultra - non plus ultra
- Fotók, videók mobillal
- Yettel topik
- Android alkalmazások - szoftver kibeszélő topik
- Milyen okostelefont vegyek?
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
Új hozzászólás Aktív témák
-
sztanozs
veterán
-
martonx
veterán
A háttérben futó közös használatú file-al az a baj, hogy lazán engedni fogja felülírni egymás módosításait.
Ha nem háttérben fut, akkor szépen figyelmeztet, hogy melyik jusson érvényre, de háttérben futva mit fog csinálni?
Ha már háttér fájl, akkor használj xml-t, vagy csv-t, és azokat kvázi adatbázisként használva (elvileg), nem lesz ilyen problémád.
Bár nem tudom, hogy a háttér file-t hogy használod, lehet az ilyen problémát már valahogy kiküszöbölted excelen belül. -
-
sztanozs
veterán
Próbáld meg, hogy először a frame kapjon focus-t és utána a benne levő kontrol.Rájöttem mi a gond - gondolom a ComboBox1_Exit eseményt használod.
Ha szeretnéd visszaadni a fókuszt a comboboxra, cancel-eld le az eseményt:
Cancel = True - ne setfocussal próbáld meg megtartani a fókuszt, mert az eseménykezelő végén a környezet "veszi el" azt kontrolltól.Ezt írja az Exit eseménykezelő help-je:
Note
To prevent the control from losing focus, assign True to the Cancel argument of the Exit event.Másrészt ezt írja a SetFocus help-je:
The SetFocus method is valid for an empty Frame as well as a Frame that contains other controls. An empty Frame will take the focus itself, and any subsequent keyboard events apply to the Frame. In a Frame that contains other controls, the focus moves to the first control in the Frame, and subsequent keyboard events apply to the control that has the focus.Exitnél alapvetően vagy másik kontrollra megy a fókusz, vagy input controlloknál Enter (és talán Esc) gomb hatására. Enter leütésénél a szülő kontroll kapja meg a fókuszt (form vagy frame) és osztja ki a beállításainak megfelelően.
Feltehetően egy olyan kontroll kapja meg a fókuszt (azon van a TabStop = 0 a properties ablakban), ami alapból nem kezel eseményeket (pl label, picturebox, vagy hasonló) és nem látszik rajta a fókusz. Legegyszerűbb, ha a combobox Tabstop-ja 0-ra van állítva, és akkor a panel fókuszba kerülésével ő kapja meg majd a fókuszt.
-
martonx
veterán
Megvan, bár ez lehet, hogy csak külső forrásból működik?
Application.Visible = False
Ezzel tudod kikapcsolni az exceled láthatságát. Viszont lehet, hogy ez a meglévő exceledet is eltünteti? Ez akkorj ön jól, amikor egy vbscriptel, vagy bármivel excel-t kell macerálni, és nem akarom villogtatni a képernyőn.
Magából az excelből belülről használva, nem tudom működik-e? -
martonx
veterán
ok, akkor előtte, ahol a Workbooks.ot létrehozod, vagy még előtte, ahol az excel objektumot létrehozod, kellene hogy beállítsd. Csak körülbelülre mondom, lusta vagyok kipróbálni:
set ea = new excel.application vagy valami ilyesmi sorod van elvileg.
Aztán ea.display vagy ea.visible = false kell, és ekkortól az az excel objektumod végig a háttérben marad.
-
sztanozs
veterán
Ha fájlrendszer szinten van rajta a read-only, akkor csak trükközéssel lehet levenni:
Megnyitni egy másik fájlt ami
- bezárja az aktuálisat,
- váloztatja a readonly attributomot
- beleír
- bezárja
- újra megnyitja
- visszadja a fókuszt és kilépSzóval egyszerűbb, ha az adatok nem is az aktuális excelben vannak, hanem egy másikban amit szükség esetén szerkeszteni tud.
-
sztanozs
veterán
Ne "csak úgy" hivatkozz a lapokra, hogy "Sheet1" vagy Sheet("Alapadatok"), hanem mentsd el az elején a workbook-ot és hivatkozz rá úgy, hogy csinálsz egy publikus globális változót a workbookodnak:
'module1.bas - ba
Public databook As Workbook
'ThisWorkbook - ba
Private Sub Workbook_Open()
Set databook = Me
End Sub
'a többi modulban meg így használd
Public Sub akarmi()
'akarmi
'akarmi
'akarmi
'Sheets("Alapadatok") helyett használd:
databook.Sheets("Alapadatok")
'akarmi
'akarmi
'akarmi
End Sub -
sztanozs
veterán
KB igen - ez amúgy két külön esemény (pl. click után change is lefut, ha kattintás után megváltoztatod...)
alfa20 - VB6-nak kb annyi köze van a VBA-hoz (Visual Basic for Application - azaz az Office VB-je), hogy mind a kettő VB - persze, ha tudod programozni az egyiket, menni fog a másik is. No meg az alap nyelvi szintaktika is egyezik, de sem a fejlesztőkörnyezet, sem az alap osztály/függvény-könyvtár nem egyezik.
-
sztanozs
veterán
Amíg modal a formod addig nem tud más más formon semmi fókuszba kerülni. Vsz ez lehet a probléma.
Talán a gomb click eseményekre el kellene tárolnod egy form scope-ú változóban, hogy melyik gombot nyomtad meg és a Close eseménybe kellene berakni, hogy mit csináljon.Esetleg bezáráskor a fókusz állítás előtt átállíthatod a form modal property-jét False-ra, és akkor tudsz fókuszt váltani
-
sztanozs
veterán
-
Bobrooney
senior tag
Én a helyedben ezt nem a change-l vizsgálnám, hanem egy nyomógombbal.
Change ha minden igaz, minden egyes bill leütést vizsgál, így ha elkezd gyorsan belegépelni felugrálgat neki egy MessageBox ami elég idegesítő lehet.
Tehát a nyomógomb hatására történne meg az input ellenőrzés és akkor adnám a hiba üzeneteket. -
sztanozs
veterán
Ezt javaslom átnézésre: [link]
MSDN-ről:
RemarksWhen a UserForm is modal, the user must supply information or close the UserForm before using any other part of the application. No subsequent code is executed until the UserForm is hidden or unloaded. Although other forms in the application are disabled when a UserForm is displayed, other applications are not.
When the UserForm is modeless, the user can view other forms or windows without closing the UserFor
-
sztanozs
veterán
Hali - a projektet át tudod nevezni a project explorerben (szerintem a baloldalon megjelenő properties menüben is).
Más: az Initialize mindig végigfut. Nem is értem miért kellene megálljon. A VBA eseményvezérelt környezet, nem "áll meg" csak úgy egy rutin közepén (és nem is jó erre kényszeríteni). Ha azt akarod, hogy bevitelre "várjon" akkor legyen modális a form (ne lehessen "mögé" kattintani) és legyen egy gombod amivel leokézod a formot. -
sztanozs
veterán
Az elsőt simán meg lehet oldani, csak a kódból ki kell kapcsolni a védelmet.
A második is megoldható viszonylag egyszerűen - viszont le kell lőni hozzá a futó programot, változtatni a fájlrendszeri jogait, majd újra megnyitni. Ehhez indítani kell egy másik folyamatot (akár egy batch fájlt akár egy vbszkriptet) amelyik ezt megcsinálja.
-
sztanozs
veterán
Én úgy néztem, hogy az is probléma lehet, ha a következő scennário áll fenn:
1 lépés - A user egy olyan gépről nyitja meg az a táblát, ahol A és B user profil is fent van, mind a kettőben fel van töltve az XLA
2 lépés - elmentés után a B user egy olyan gépről nyitja meg az excel táblát, ahol az A user profilja nincs fentIlyenkor az első lépés utáni mentéskor az excelbe elmentődik az XLA teljes elérési útvonala, és amikor a másik gépen megnyitják és ott nem létezik az adott path, akkor az XLA-t kézzel újra be kell tölteni. Ennek kikerülésére a közösen használt XLA-kat érdemes olyan helyre tenni, ami minden gépen ugyanazon a path alatt van, pl.:
- AllUsers > Appdata > Microsoft > Excel > XLStart
- CommonProgramFiles > Microsoft Shared > Office* -
martonx
veterán
Bevallom egy ideje nem tudlak követni. Mindenesetre egy ilyet találtam neten, hátha segít:
Function ConvertToLetter(iCol As Integer) As String
'-----------------------------------------------------------------------------
' Procedure : ConvertToLetter
' Author : Niall - Zypher.co.uk
' Purpose : Convert a number to a column letter
' Tested to 256 columns, assumed to work until 702 (ZZ)
'-----------------------------------------------------------------------------
'
If iCol <= 26 Then
' Columns A-Z
ConvertToLetter = Chr(iCol + 64)
Else
ConvertToLetter = Chr(Int((iCol - 1) / 26) + 64) & _
Chr(((iCol - 1) Mod 26) + 65)
End If
End Function -
martonx
veterán
-
vilag
tag
Félmegoldást már találtam a problémára.
Ha magát a munkalapot másolom, akkor a rajta lévő vezérlők és a hozzájuk tartozó kódok is mennek.
Sheets("Munka1").Copy After:=Sheets(1)
Ezzel viszont az a baj, hogy a 255 karakternél többet tartalmazó cellákat szépen lecsonkolja.
Ezt követően megpróbálkoztam azzal, hogy a munkalapon lévő adatokat másolom és irányított beillesztéssel (értékként) az új munkalapra másolom. Ennek viszont az a baja, hogy az egyesített celláknak azonos méretűnek kell lennie.
A vicc csak az, hogy azonos méretűek.Erre esetleg valami megoldás?
Ü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. -
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 -
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. -
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 -
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 -
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). -
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. -
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).
-
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. -
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. -
#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 -
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?
-
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. -
martonx
veterán
-
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. -
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
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. -
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
Ú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. -
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... -
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. -
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 -
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...
-
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
-
#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...
-
#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
-
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
Új hozzászólás Aktív témák
Hirdetés
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Gyúrósok ide!
- Magga: PLEX: multimédia az egész lakásban
- Kerékpársportok
- Nintendo Switch 2
- Honor 200 - kétszázért pont jó lenne
- Samsung Galaxy S21 FE 5G - utóirat
- A fociról könnyedén, egy baráti társaságban
- E-roller topik
- További aktív témák...
- Samsung Galaxy S25 Plus Navy 12/256 GB Újszerű, karcmentes állapotban!
- LG 48GQ900-B - 48" OLED - 4K 3840x2160 - 138Hz & 0.1ms - G-Sync - FreeSync - HDMI 2.1
- Telefon felvásárlás!! Xiaomi Redmi 9, Xiaomi Redmi 9AT, Xiaomi Redmi 10, Xiaomi Redmi 10 2022
- Bomba ár! Lenovo ThinkPad P43s - i7-8G I 8GB I 256GB SSD I Nvidia I 14" FHD I Cam I W10 I Garancia!
- ÁRGARANCIA!Épített KomPhone i7 14700KF 32/64GB RAM RTX 5070Ti 16GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest