- gban: Ingyen kellene, de tegnapra
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- Magga: PLEX: multimédia az egész lakásban
- sziku69: Fűzzük össze a szavakat :)
- eBay-es kütyük kis pénzért
- Mr. Y: Motoros sztorik #06
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- NASsoljunk: ZyXEL NSA-310 és az FFP
- Őskoczka
Új hozzászólás Aktív témák
-
vilag
tag
Azt esetleg tudja valaki, hogy ha kilépek a munkafüzetből mentés nélkül, akkor miért dobja fel ezt az ablakot, amit 10 alkalommal kell "mégsézni"?
Annyi az érdekesség, hogy ha csak megnyitom a munkafüzetet és bezárom mentés nélkül akkor nem dobja fel, ha viszont már használom valamelyik gombot (amihez ugye kód is van), akkor már feldobja.
Még érdekesebb, hogy egyébként a Workbook Openben is van kód, ami ugye mindenképp lefut, ez mégsem idézi elő az ablak felbukkanását.Van ötlet?
Továbbra is várnék valami javaslatot a programkód védelmére!
Remélem van valakinek ötlete. Nem tudom szavakba önteni mennyire.
Ez a kód majdnem olyan mintha az egyik gyermekem lenne, nem akarom, hogy lenyúlják.
Mégis csak 8 éve javítgatom.Köszönöm!
-
vilag
tag
válasz
sztanozs #2999 üzenetére
Van ötlet, hogy milyen módon lehetne megoldani a problémát?
Röviden annyi lenne, hogy otthagyom nekik a programokat használatra, viszont nem szeretném ha egyrészt a kódban babrálnának, másrészt azt sem akarom, hogy le tudják azt nyúlni.
Ezért gondoltam, hogy amolyan bünti lenne, hogy törli magát a kód ha hozzá akarnak nyúlni vagy le akarják nyúlni.Most is törölhetném a kódokat, de akkor azokkal a kollégákkal tolnék ki akiket szeretek.
Egyébként "mennyire könnyű" feltörni a projektet ha jelszavazom?
-
vilag
tag
válasz
Apollo17hu #2998 üzenetére
Köszönöm!
Meg fogom tenni.
-
vilag
tag
Sziasztok!
Lenne egy fontos és sürgős kérdésem:
Tudok-e VBA-ban "öngyilkos kódot" írni?
A lényege az lenne, hogy ha valaki a Projektet védő kódot mondjuk 3-szor rosszul üti be (VBAProject - Project Properties/Protection), akkor az azt eredményezi, hogy a projektből az összes kód törlődik és ráment a munkafüzetre.
Úgy néz ki elhagyom a jelenlegi munkahelyemet és a programokat ugyan itt hagyom, használhatják, de nem akarom, hogy a kódhoz bárki is hozzábabráljon (mégis csak az én "gyermekem").
Továbbá érdekelne, hogy hogyan is kell levédetni jogilag egy programot.
Mivel már csak korlátozottan fogok hozzáférni a gépemhez, nagyon sürgős lenne a dolog.
Köszönöm!
-
vilag
tag
Valakinek van ötlete hivatkozott problémával kapcsolatban?
+1 kérdés:
Adott egy munkafüzet aminek az egyik lapját (vagy annak tartalmát) másolom egy új munkafüzetbe és mentetem el kód segítségével.
Szerencsére a munkalapon lévő gomb (és a hozzá tartozó kód is) megye vele.Meg lehet-e valahogyan oldani, hogy az újonnan létrejövő munkafüzet "ThisWorkbook"-jába kódot helyezzek el?
Oda szeretném megírni, hogy bezárás előtt ne dobjon fel hibaüzenetet, hanem mindent figyelmen kívül hagyva zárja be.
Nevezetesen:Application.Displayalerts = False
A gombnyomásra lefutó makró miatt ugyan is bezárás előtt megkérdezi, hogy akarok-e menteni.
Ezt viszont nem szeretném, mert a felhasználók amúgy sem tudnak beleírni a munkafüzetbe, így semmi szükség erre, csak összezavarja szegényeket...Sajnos ebben a formában eredménytelen:
Private Sub CommandButton1_Click()
ActiveSheet.PrintOut Copies:=2, Collate:=True
Application.DisplayAlerts = False
End Sub -
vilag
tag
válasz
Delila_1 #2973 üzenetére
Tökéletes!
Remekül sikerült megoldani a problémát.
Felvetnék még egy kérdést amelyre régóta nem lelem a megoldást.
Van egy olyan TextBoxom (illetve több is), amely úgy van megoldva, hogy csak számokat enged bevinni az alábbi kóddal:Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 'Ügyirat főszámba csak számot enged írni
If KeyCode = 8 Or KeyCode = 46 Or _
(KeyCode >= 48 And KeyCode <= 57) _
Or (KeyCode >= 96 And KeyCode <= 105) Then
TextBox1.Locked = False
Else
TextBox1.Locked = True
End If
End SubValamilyen okból ha a munkafüzetet Office 2007-ben Win7-es gépen mentem el, random módon az a jelenség következik be, hogy elindítva a formot a mezőbe nem csak számot enged írni, valamint ha nyomok egy TAB-ot akkor nem a következő vezérlőre ugrik hanem valóban egy tabulátort tesz az adott vezérlőbe.
Ez ugye hibás működést eredményez és számos problémát okoz.
Arra viszont rájöttem, hogy ha egy Win Xp-s gépen (és azt hiszem Office 2003-on) makrók letiltásával indítom a munkafüzetet és rámentek, akkor már a Win7-es Office 2007-es gépeken sem jelentkezik a probléma.
Van esetleg ötleted (vagy bárkinek), hogy mivel lehetne ezt kiküszöbölni.
Most csak ezért megint össze kellett raknom egy Xp-s gépet amit gyakorlatilag csak ennyire használok.Egy másik apró de idegesítő probléma:
A munkafüzet indításakor automatikusan indul a form. Ezen van egy gomb amely lehetővé teszi a VB indítását és ezzel együtt a jelszavazás feloldását is az alábbi módon:Unload Me
Unload UserForm1
Application.Visible = True 'hogy az Excel menüje újra látszódjon
'Project védelem feloldása
With Application
.SendKeys "%{F11}", True 'VB megnyitása
.SendKeys "^r", True 'Project Explorer ablak aktiválása
.SendKeys "SZTK" 'SZTK projectre ugrás
.SendKeys "~", True 'Enter leütés imitálása
.Wait (Now + TimeValue("0:00:01"))
.SendKeys "jelszó" 'Jelszó megadása
.SendKeys "~", True 'Enter leütés imitálása
' .Wait (Now + TimeValue("0:00:01"))
' .SendKeys "Mod"
' .SendKeys "~", True 'Enter leütés imitálása
' .Wait (Now + TimeValue("0:00:01"))
.SendKeys "For"
.SendKeys "~", True 'Enter leütés imitálása
' .Wait (Now + TimeValue("0:00:01"))
' .SendKeys "Mic"
' .SendKeys "~", True 'Enter leütés imitálása
End WithA folyamat végén valóban indul a VB, de valamiért a NUMLOCK-ot kikapcsolja.
Ugyan ez a fentebb említett Xp-s gépen is lefut azonban ott nem kapcsolja ki a NUMLOCK-ot.A kívánatos az utóbbi lenne.
-
vilag
tag
Üdv!
Le lehet valahogyan kérdezni, hogy az adott munkalap hány nyomtatás szerinti oldalból áll?
Wordben le tudom, de excelben egyelőre nem találom.
Wordben:oldalszam = ActiveSheet.BuiltinDocumentProperties(wdPropertyPages)
-
vilag
tag
válasz
Delila_1 #2969 üzenetére
Ez a megoldás tényleg sokkal frappánsabb.
Apróbb kiegészítésekkel (ami nem képezte részét az eredeti koncepciónak) be is építettem.Néhány kivételkezelést tettem még hozzá, de ezek mind szépészeti beavatkozások. PL.: hogy csak olyan tartományt jelöljön ki ahol már van érték, meg a fejléces tartományban ne jelöljön ki, ilyesmi...
Köszönöm a segítséget!
-
vilag
tag
válasz
Delila_1 #2959 üzenetére
Nagyon szépen köszönöm!
Kicsit egyszerűsítettem rajta mivel biztosan nem lehet a munkalapon semmi korábbi színezés, így annyit csináltam, hogy minden színezést töröl és utána színezi az érintett sorokat a módszered szerint.
Egyébként azt furcsállom, hogy a
Target.Rows
nem működik.
Pedig a Target-nek van Row és Rows tulajdonsága is, legalábbi a "." billentyű után felkínálja mint lehetőséget. -
vilag
tag
válasz
Delila_1 #2957 üzenetére
A
Target.Row
-t már próbáltam, de az csak a kijelölt tartomány első sorának sorszámát adja vissza lekérdezésben.A
Rows(Target.Row).Interior.Color = vbYellow
pedig ugyan megtartja az eredeti kijelölést, de csak a kijelölt tartomány első sorát színezi át.Tehát még mindig az a probléma, hogy hogyan lehetne lekérdezni a kijelölt tartománnyal érintett sorokat?
A
x=Targer.Address
visszaadja a teljes tartományt, de abból meg ki kellene mókázni a sorok számát...Ezért valami ettől egyszerűbb megoldást keresek.
-
vilag
tag
válasz
Delila_1 #2955 üzenetére
Ez eddig rendben van, ezt én is megoldottam (ugyan ennél kevésbé elegánsabban), de egy fontos körülmény elkerülte a figyelmedet:
Én nem magát a kijelölt területet akarom átszínezni, hanem a kijelölt területtel érintett egész sorokat.
Az egésznek a lényege az lenne, hogy amolyan sorvezetőként szolgálna a szemnek.
De lehet, hogy az általad írt kódból is meg tudom oldani a dolgot, mert most kipattant egy ötlet a fejemből, meglátjuk működik-e.
-
vilag
tag
válasz
Delila_1 #2953 üzenetére
Köszönöm a javaslatot.
Ma már kínlódtam vele vagy két óra hosszát, de belekavarodom a dologba és most teljesen máshogy akarom újra kezdeni.
Most épp látom a fényt az alagút végén, de csak pislákol.
A javaslatodat használva próbálkoztam, de nem teljesen hozza a várt eredményt.
Jelen formájában kiszínezi a kijelölt cellát vagy cellákat, azonban ha újabb cellát vagy cellákat jelölök ki akkor azokat is kiszínezi (az elősző színezések meghagyásával).A célom az lenne, hogy a kijelölt cellák sorait jelölje ki és az esetlegesen korábban kijelölt cella/cellák sorainak színezését pedig szüntesse meg.
A fejemben már össze is állta a dolog el is kezdtem megírni, de ott elakadtam, hogy több sort érintő kijelölés esetén csak az első sor sorának a számát tudom lekérdezni pl ezzel
sorok = Selection.Row
pedig nekem a kijelölés kezdő és végsorának számára is szükségem lenne.Próbáltam
Selection.Address
kóddal is de abból meg csak kerülő úton tudnám a sorok számát kinyerni.Van esetleg erre valami egyszerűbb megoldás?
Egyébként nagyjából így képzelném a kódot:
Cells.Interior.Pattern = xlNone 'összes színezés megszüntetése a munkalapon
kijelolttartomanysorai = ????
Rows(kijelolttartomanysorai).Interior.Color = vbYellowÍgy visszanézve kissé viccel, hogy egy 3 soros kóddal bajlódom két órája
-
vilag
tag
Halihó!
Azt meg lehet valahogyan oldani, hogy ha kijelölök egy cellát akkor az adott sor háttere színt váltson?
Próbáltam a Workbook_Change()-ben megírni, de úgy tűnik, hogy a kijelölt cella változásakor a Workbook_Change () nem fut le.
Igazándiból nem is arra vagyok elsősorban kíváncsi, hogy mit írjak meg (bár erre is szívesen fogadok javaslatokat, hátha valakinek jobb ötlete van mint nekem), hanem sokkal inkább az, hogy hová kellene azt megírni.
Köszönöm!
-
vilag
tag
-
vilag
tag
válasz
Delila_1 #2941 üzenetére
Pedig ha megnyitom a cellaformázás menüt akkor az van a "Szám" fülön, hogy "Dátum", típus: "*2001.03.14"
Ezért utálom én az excel dátumkezelését, mert gyakran még maga sem tudja, hogy mi micsoda.
Most pedig megpróbálom befejezni a kódot.
Még egyszer nagyon köszönöm!
Ma ismét tanultam valamit. -
vilag
tag
válasz
Delila_1 #2939 üzenetére
x = Application.WorksheetFunction.VLookup(atvdatuma * 1, ThisWorkbook.Sheets("Jogerő").Range("a:c"), 3, 0)
Így működik
Utálom az excel dátumkezelését, és továbbra sem értem, hogy miért működik ha 1-el megszorzom.... de működik és most csak ez számít, remélem így már be tudom fejezni a kódot.
-
vilag
tag
válasz
Delila_1 #2937 üzenetére
=FKERES(P7241;Jogerő!A:C;3;0)
#HIÁNYZIK hibára fut.
=FKERES(ÉRTÉK(P7241);Jogerő!A:C;3;0)
Így viszont eredményes.
Viszont ha a kódot kiegészítem ezzel:
atvdatuma = Val(atvdatuma)
akkor a atvdatuma = 2017,11 lesz, nem pedig dátumérték
Ebbe az irányba már próbáltam korábban elmenni, de ugyan ide lyukadtam ki.
Pedig szinte biztos vagyok benne, hogy ez lenne a megoldás kulcsa. -
vilag
tag
válasz
Delila_1 #2935 üzenetére
Megcsináltam, végigléptettem, de ugyan az az eredmény mint korábban
Az utolsó sorban hibára fut.
Nem lehet, hogy az a baj, hogy amikor az atvdatuma változó felveszi az értéket az így néz ki:
atvdatuma = 2017.12.04.
Azaz idézőjelek nélkül és a nap után ponttal, a dátumos cellákban meg ugye idézőjelekkel és a nap után pont nélkül szerepelnek a dátumok.
Nem lehet, hogy ez okozza a problémát?
-
vilag
tag
válasz
Delila_1 #2933 üzenetére
Igen a jogerő lap A oszlopában vannak a dátumok amik között keresnie kellene.
A Trim(Str())-re azért volt szükség mert különben Run-time error '13': Type mismatch hibára futott.
Azonban most, hogy a + jeleket lecseréltem & jelre, úgy látom már semmi szükség rá, mert így enélkül sem fut a fenti hibára.
Még mindig kíváncsi lennék, hogy mi a különbség a + jel és az & jel között.
Gyakorlatilag egy sima fkeres függvényt akarok VBA-ban megcsinálni.
A fenti képen látható dátumok is dátumként formázott cellákban vannak.
-
vilag
tag
Halihó!
Régen jártam erre, egy jó ideje nem volt időm VBA-val foglalkozni.
Most azonban szakítottam rá, de viszonylag hamar bele is futottam egy triviális bár számomra jelenleg megoldhatatlan problémába.
Állandóan bajban vagyok az excel és a VBA dátumkezelésével és ez újra és újra nehézségeket okoz.Most az alábbi problémával szembesültem:
Egy cellában dátumként tárolt dátumhoz tartozó másik dátumot szeretnék eredményül kapni egy dátumokat tartalmazó tömbből vlookup függvény segítségével.Eddig jutottam:
Private Sub CommandButton5_Click() 'adott sor jogerejének kiszámolása
aktivsor = ActiveCell.Row
aktivsor = Trim(Str(aktivsor))
If Range("m" + aktivsor) = "HIV" And Range("p" + aktivsor) = "" Then
uzenet = MsgBox("Nincs átvételi esemény, nem lehet jogerősíteni", 0, "Hiba") 'ideiglenes
Exit Sub
Else
If Range("q" + aktivsor) <> "nem kereste" And Range("q" + aktivsor) <> "elköltözött" And Range("q" + aktivsor) <> "címzett ismeretlen" Then
'dátum plusz 15 nap
atvdatuma = DateValue(Range("p" + aktivsor)) + 15
'atvdatuma = Trim(Str(atvdatuma))
'y = ThisWorkbook.Sheets("Jogerő").Range("a25")
x = Application.WorksheetFunction.VLookup(atvdatuma, ThisWorkbook.Sheets("Jogerő").Range("a:c"), 3, 0)
(...)Sajnos azonban az beillesztett utolsó sornál az alábbi hibaüzenetre futok:
Run-time error '1004':
Application-definied or object-definied errorMár minden általam ismert lehetséges módon próbáltam javítani, de nem sikerül.
Van valakinek ötlete mi lehet a hiba?
Előre is köszönöm!
-
-
vilag
tag
Sziasztok!
Az lenne a kérdésem, hogy lekérdezhető-e valahogyan az autofilterrel szűrt találatok eredménye?
A bal alsó sarokban ugye kiírja, hogy "4061 rekordból 13 rekordot talált"
Ez utóbbi számot szeretném valahogy VBA-ban lekérdezni.
Megoldható ez?
Googliban és VBA-ban sem találtam megoldást (ez persze nem azt jelenti, hogy nem is létezik megoldás).Üdv, vilag
-
vilag
tag
Valaki mentsen meg az ablakon kiugrástól!!!!
Nem egészen VB kérdés, de hátha tud valaki valamit...
A szóban forgó munkafüzetben a képletek számításra manuálisra van állítva, mert a munkafüzet mérete több mint 20 Mb, és ha egyfolytában számolgatna amikor beleírok, akkor azzal telne az egész nap.
Kb. két napja előállt az a helyzet, hogy a munkafüzetben a képletek számítása továbbra is manuálison van, azonban mikor csinálok egy másolás beillesztést, akkor elkezdi újraszámolni a munkafüzetet.
Valaki mondja meg nekem legyen kedves, hogy ez most, hogy a bánatos fittyfenében lehet?
Más esetekben ugyan úgy nem számol, ahogy annak lennie kell, de másolás-beillesztésnél mégis számol.Hogy a ..csába tudnám ezt megakadályozni? Valami frissítés művelte ezt a csodát?
Az újraszámolás 4 maggal is igényben vesz 10-15 másodpercet. Nekem csak most legalább 70-100 ilyen kell végrehajtanom, ki lehet számolni, hogy akkor mennyi időt is fog igénybe venni mire végzek.
Van valakinek valami ötlete a probléma megoldását illetően??????
Szerk: Vélhetően az lehet a baj, hogy másik folyamatban ugyan csak megnyitottam a munkafüzetet olvasásra és az olvasásra nyitott táblából az írásra nyitott táblába történő másolás esetén csinálja ezt, bár így sem értem, hogy ehhez mi szükség újraszámolásra a forrástáblában.
-
vilag
tag
válasz
Delila_1 #2767 üzenetére
Üdv!
Lehet, hogy nem volt egyértelmű amit írtam.
Ez a kód rész évek óta a helyén van és működik, azonban időnként (évente 3-4 alkalommal) gondol egyet és a fenti hibát produkálja.
Ilyenkor általában a gép újraindítása sem hoz megoldást.
Majd másnap ismét tökéletesen működik minden.A legutóbbi esetben amikor a hiba előjött, másik gépen is futtattam a kódot, ott meg egy másik kódrésznél akadt ki, de ott is on error volt hivatott megoldani a problémát.
Ezért gondoltam, hogy a környezetben lehet valami hiba, de nem tudom hogy mi. -
vilag
tag
Újabb csoda:
Miért van az, hogy időnként úgy tűnik mintha az On Error funkció nem működne????
Jelesül:
On Error GoTo vege2
If Len(azonosito) = 8 Then
gazon = Right(azonosito, Len(azonosito) - 2)
elonev = Application.WorksheetFunction.VLookup(gazon, Workbooks(gtn).Worksheets("gtorzs").Range("c:aq"), 3, 0)
(...)Ha ott az On Error akkor miért kapom mégis ezt a hibaüzenetet:
Másik gépen ugyan ezt futtatva máshol akad ki, másik hibával, de ott is van On Error
Van valakinek ötlete, hogy mi okozza ezt az időnként előforduló hibát?
Esetleg ki tudom váltani az On Errort valamivel?Köszönöm!
-
vilag
tag
válasz
sztanozs #2760 üzenetére
Az az érdekes, hogy ha megnézed a képet, az első oszlopban jó az alsó border (mondjuk ott történik egy automatikus sorszámozás).
A probléma egyébként akkor keletkezett amikor Win Xp-s (Office 2003) gépekről Win7-es (Office 2007) gépekre tértünk át.
Egyébként kódból már próbáltam ezt megoldani:
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft) 'Bal
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop) 'Felső
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom) 'Alsó
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight) 'Jobb
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical) 'Belső függőleges
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End WithDe nem hozta a várt eredményt, szóval lehet még valahol valami turpisság a dologban.
-
vilag
tag
Sziasztok!
Egy apró ám annál idegesítőbb problémával állok szemben ami inkább esztétikai jellegű mintsem funkcionális probléma.
Írtam én egy postakönyv programot, ami évek óta hűségesen szolgálja a hivatal működését idestova 7. éve.
A lényeg: a program gombnyomásra szűrést hajt végre a megadott paraméterek alapján, azaz legyűjti azokat a sorokat amelyek tartalmazzák a megadott karaktersort.
A probléma az, hogy az utolsó sorban az alsó rácsvonalak egy része (az első oszlopot kivéve) eltűnik és nem tudok rájönni miért.
Már próbáltam a kódba is beletenni a rácsozást, de nem vált be.
Marhára idegesítő probléma, van valakinek ötlete hol lehet a hiba? -
vilag
tag
válasz
sztanozs #2754 üzenetére
Nagyon, nagyon szépen köszönöm!
Némi küzdés után teszi a dolgát ahogy kell (a küzdés persze az én hibámból volt).
Teszteltem egy-két gépen és amelyiken nem szükséges rendszergazda jog ott gyönyörűen teszi a dolgát.
Ahol azonban nincs telepítési jog ott:
XP esetén: látszólagosan nem történik semmi.
Win7 esetén: feljön az ablak, hogy adjam meg a rendszergazda felhasználónevét és jelszavát a telepítéshez.1. A kérdésem az lenne, hogy meg lehet-e valahogyan esetleg oldani, hogy a felhasználónév és jelszó megadása kódból történjen? (hátha a rendszergazda ideadja az adatait)
2. Le lehet-e kérdezni, hogy az adott felhasználó rendelkezik-e rendszergazdai (telepítési) joggal? A környezeti változókban (ENVIRON) nem találtam ilyet...
Utóbbira azért lenne szükség, hogy ha az első verzió valamilyen okból (esetleges jelszócsere pl.) nem működne. -
vilag
tag
válasz
sztanozs #2752 üzenetére
Először is köszönöm a választ!
Röviden: ebben a programban userformon töltött adatokból ügyirat generálható (természetesen különböző vizsgálatok, szabályok futkorásznak).
A lényeg az lenne, hogy a már korábban itt közzétett vonalkódos programrésszel elkészül egy vonalkód amit most már szeretnék rá is nyomtatni az ügyiratra. Eddig nem került rányomtatásra az ügyiratra.
Az ügyirat releváns adatai (a vonalkód által fedett számot is beleértve) egy ideiglenes fájlban tárolódik is.Ennek oka az, hogy az általam írt postakönyvbe, így a postázást végző kollegina a szám bepötyörészését követően a szükséges adatokat importálja a postakönyvbe, így neki nem kell még egyszer a szükséges adatokat felvinnie.
A vonalkód rányomtatása pedig azt a célt szolgálná, hogy a számsor begépelésétől is megkíméljem.A szépséghiba ugye ott van, hogy ehhez a szükséges betűtípusnak telepítve kell lennie azon a gépen amelyről az ügyirat nyomtatódik.
Mivel nem önálló program lenne, hanem a már meglévő programba kerülne beépítésre, mindenképpen Visual Basices megoldást keresek.
A rendszergazdai jogosultság elméletileg nem gond.
Először olyanban gondolkodtam, hogy csak vizsgálja meg, hogy jelen van-e a szükséges betűtípus és ha nem akkor adjon egy rövid figyelmeztetést és egy telepítési útmutatót, majd indítsa el a betűtípus fájlt, hogy a felhasználó telepíteni tudja, de sajnos ez sem vált be, mert nem volt hajlandó elindítani a fájlt.
Addig eljutottam, hogy followhyperlink-el meghívtam a fájlt, kaptam is gyári hibaüzenetet, hogy egyes fájlok megnyitása veszélyes lehet, de a fájl mégsem indult el.
Na meg persze sokkal elegánsabb (és biztosabb) lenne, ha mindez a felhasználó (tudta és) beavatkozása nélkül történne, tudjuk az hová vezethet...
Mindent figyelembe véve kérlek téged/titeket, hogy visual basic segítségével próbáljuk meg megoldani a problémát.
Egyszerűen nem értem, hogy mi lehet a probléma.
Bár ezeket nem értem:
Declare Function WriteProfileString Lib "Kernel" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String) As Integer
Declare Function CreateScalableFontResource% Lib "GDI" (ByVal fHidden%, ByVal lpszResourceFile$, ByVal lpszFontFile$, ByVal lpszCurrentPath$)
Declare Function AddFontResource Lib "GDI" (ByVal lpFileName As Any) As Integer
Declare Function SendMessage Lib "User" (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long(...)
FontRes$ = Left$(FontPath$, Len(FontPath$) - 3) + "FOT"
Ret% = CreateScalableFontResource(0, FontRes$, FontFileName$, WinSysDir$)Nem tudom mire jó az, hogy "ttf" kiterjesztés helyett "FOT" kiterjesztést ad (vagy virtuálisan ad) a fájlnak.
-
vilag
tag
Sziasztok!
Kicsit rég jártam erre...
/Szerencsére a program egy jó ideje viszonylag stabilan működik./
Most egy régi-új fejlesztési ötletet szeretnék végre befejezni, ami már félig készen van.
A lényeg az, hogy egy generált ügyiraton szeretnék vonalkódot megjeleníteni a korábban általam itt közzé tett algoritmussal.
Ez eddig meg is van.
A bibi ott van, hogy ehhez egy betűtípus telepítésére van szükség amit nyilván automatizálni szeretnék.
Részben azért, mert nem fogok mindig itt dolgozni (ez már biztos!), részben azért, mert a gépek fizikálisan is messze vannak, részben pedig azért, mert nem akarom egyesével minden gépen végrehajtani a telepítést.
A probléma az, hogy a betűtipus telepítése nem annyi, hogy a "Fonts" könyvtárba bemásolom azt.Kerestem a problémára megoldást és az alábbi kódot találtam:
Declare Function WriteProfileString Lib "Kernel" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String) As Integer
Declare Function CreateScalableFontResource% Lib "GDI" (ByVal fHidden%, ByVal lpszResourceFile$, ByVal lpszFontFile$, ByVal lpszCurrentPath$)
Declare Function AddFontResource Lib "GDI" (ByVal lpFilename As Any) As Integer
Declare Function SendMessage Lib "User" (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long
' This sub installs a TrueType font and makes it available to all Windows apps. It takes these arguments:
'
' FontName$ is the font's name (e.g. "Goudy Old Style")
'
' FontFileName$ is the font's filename (e.g. "GOUDOS.TTF")
'
' WinSysDir$ is the user's System folder (e.g. "C:\WINDOWS\SYSTEM" or "C:\WINDOWS\SYSTEM32")
'
' ** Before calling this sub, your code must copy the font file to the user's Fonts folder. **
'
Sub ttf_install(FontName$, FontFileName$, WinSysDir$)
Dim Ret%, Res&, FontPath$, FontRes$
Const WM_FONTCHANGE = &H1D
Const HWND_BROADCAST = &HFFFF
FontPath$ = WinSysDir$ + "\" + FontFileName$
FontRes$ = Left$(FontPath$, Len(FontPath$) - 3) + "FOT"
Ret% = CreateScalableFontResource(0, FontRes$, FontFileName$, WinSysDir$)
Ret% = AddFontResource(FontRes$)
Res& = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0)
Ret% = WriteProfileString("fonts", FontName + " " & "(TrueType)", FontRes$)
End SubEzt kicsit módosítottam mert egyáltalán el sem indult, így a Sub sorból a zárójelben lévő részeket kivettem és az alatta lévő sorokkal egészítettem ki az alábbiak szerint:
Declare Function WriteProfileString Lib "Kernel" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String) As Integer
Declare Function CreateScalableFontResource% Lib "GDI" (ByVal fHidden%, ByVal lpszResourceFile$, ByVal lpszFontFile$, ByVal lpszCurrentPath$)
Declare Function AddFontResource Lib "GDI" (ByVal lpFilename As Any) As Integer
Declare Function SendMessage Lib "User" (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long
' This sub installs a TrueType font and makes it available to all Windows apps. It takes these arguments:
' FontName$ is the font's name (e.g. "Goudy Old Style")
' FontFileName$ is the font's filename (e.g. "GOUDOS.TTF")
' WinSysDir$ is the user's System folder (e.g. "C:\WINDOWS\SYSTEM" or "C:\WINDOWS\SYSTEM32")
' ** Before calling this sub, your code must copy the font file to the user's Fonts folder. **
Sub ttf_install() '(FontName$, FontFileName$, WinSysDir$)
FontName$ = "Vonalkód"
FontFileName$ = "code128.ttf"
WinSysDir$ = Environ("WINDIR") & "\Fonts"
Dim Ret%, Res&, FontPath$, FontRes$
Const WM_FONTCHANGE = &H1D
Const HWND_BROADCAST = &HFFFF
FontPath$ = WinSysDir$ + "\" + FontFileName$
FontRes$ = Left$(FontPath$, Len(FontPath$) - 3) + "FOT"
Ret% = CreateScalableFontResource(0, FontRes$, FontFileName$, WinSysDir$)
Ret% = AddFontResource(FontRes$)
Res& = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0)
Ret% = WriteProfileString("fonts", FontName + " " & "(TrueType)", FontRes$)
End SubValamit azonban biztosan rosszul csinálok, mert nem tudom működésre bírni.
A megjegyzésben írtak szerint a betűtípus másolása megtörténik a Windows\Fonts mappába.
Nem tudom a megjegzésben mért a felhasználó Fonts mappát írja, mert olyan én nem találtam.
Esetleg itt a hiba, létre kéne hoznom egyet?
De sehol nem hivatkozik a felhasználói mappa Fonts könyvtárára...Az alábbi sornál azonban hibára futok:
Ret% = CreateScalableFontResource(0, FontRes$, FontFileName$, WinSysDir$)
A hiba:
Run-time error '53':
File not found.Van valakinek ötlete, hogyan tudnám ezt a dolgot működésre bírni?
-
vilag
tag
Kis javítás a kódokban:
1. verzió:
Public szov As String
Public h As Long
Private Sub CommandButton1_Click()
vkod = ""
ossz = 0
szov = Trim(InputBox("Vonalkód értéke:", "Kód bevitel"))
ActiveSheet.Cells(3, 3) = szov
If szov = "" Then GoTo vege
h = Len(szov)
If h > 100 Then GoTo vege
Dim vk(2, 100)
For i = 0 To h
If i = 0 Then
vk(1, i) = Chr(204)
vk(2, i) = 104
Else
vk(1, i) = Mid(szov, i, 1)
vk(2, i) = Asc(vk(1, i)) - 32
End If
If i = 0 Then k = 1 Else k = i
ossz = ossz + vk(2, i) * k
vkod = vkod + vk(1, i)
Next
eossz = ossz Mod 103
ActiveSheet.Cells(2, 2) = eossz
If eossz < 95 Then
vkod = vkod + Chr(eossz + 32) + Chr(206)
Else
vkod = vkod + Chr(eossz + 100) + Chr(206)
End If
ActiveSheet.Cells(2, 3) = vkod
vege:
vege = MsgBox("Konverzió vége!", vbOKOnly, "Vége")
End SubValamiért nem csinálja meg a kiemelést.
Ez a javítás:
If eossz < 95 Then
vkod = vkod + Chr(eossz + 32) + Chr(206)
Else
vkod = vkod + Chr(eossz + 100) + Chr(206)
End If2. verzió:
Public szov As String
Public h As LongPrivate Sub CommandButton1_Click()
vkod = ""
ossz = 0
szov = Trim(InputBox("Vonalkód értéke:", "Kód bevitel"))
ActiveSheet.Cells(3, 3) = szov
If szov = "" Then GoTo vege
h = Len(szov)
If h > 100 Then GoTo vege
j = 1Dim vk(2, 100)
For i = 0 To h
Select Case i
Case 0
vk(1, i) = Chr(204)
vk(2, i) = 104
j = i
Case 1 To 2
vk(1, i) = Mid(szov, i, 1)
If Asc(vk(1, i)) < 195 Then vk(2, i) = Asc(vk(1, i)) - 32 Else vk(2, i) = Asc(vk(1, i)) - 100
j = i
Case 3
j = i
vk(1, i) = Chr(199)
vk(2, i) = Asc(vk(1, i)) - 100
Case Else
' If Application.WorksheetFunction.IsEven(i) = True Then 'XP alatt nem működik!!!
If i Mod 2 = 0 Then 'XP alatt is működik
j = i - ((i - 4) / 2)
s2 = Val(Mid(szov, i - 1, 2))
If s2 < 95 Then vk(1, j) = Chr(s2 + 32) Else vk(1, j) = Chr(s2 + 100)
vk(2, j) = s2
End IfEnd Select
If j = 0 Then k = 1 Else k = j
' If i <= 3 Or Application.WorksheetFunction.IsEven(i) = True Then 'XP alatt nem működik
If i Mod 2 = 0 Then 'XP alatt is működik
ossz = ossz + vk(2, j) * k
vkod = vkod + vk(1, j)
End If
Nexteossz = ossz Mod 103
ActiveSheet.Cells(2, 2) = eossz
If eossz < 95 Then
vkod = vkod + Chr(eossz + 32) + Chr(206)
Else
vkod = vkod + Chr(eossz + 100) + Chr(206)
End If
ActiveSheet.Cells(2, 3) = vkod
vege:
vege = MsgBox("Konverzió vége!", vbOKOnly, "Vége")End Sub
Remélem még hasznos lehet valakinek.
-
vilag
tag
Üdv!
Van egy újkeletű problémám:
A korábban említett vonalkód témához kapcsolódik.
Mint említettem is a Word esetében a betűtípus beágyazása csak többé-kevésbé működőképes megoldás, így az abban érintett gépekre kézzel telepítettem a megfelelő betűtípust rendszergazdaként.Egy újabb fejlesztés eredményeként egy excel fájlban szeretném alkalmazni az említett vonalkód-betűtípust, azonban mint előbb írtam ehhez rendszergazda jog szükséges.
A rendszergazda felhasználónév és jelszó ismert a számomra.A kérdés tehát az, hogy mezei felhasználóként bejelentkezve VBA-ból tudok-e -és ha igen, akkor hogyan- olyan másolás parancsot kiadni, ahol programból kerül megadásra a rendszergazda felhasználónév és jelszó felhasználói beavatkozás nélkül.
Azaz tudok-e a Font mappába másolni anélkül, hogy kérje a rendszergazda felhasználónevet és jelszót magától a felhasználótól?
a "FileCopy" parancsnál nem láttam olyan paramétert, hogy felhasználónév, jelszó.
Gondolkodtam még batch fájlban is hasonló megoldással ha esetleg abban meglehet oldani.Várom a javaslatokat! Köszi!
-
vilag
tag
válasz
Delila_1 #2522 üzenetére
Nos, végre eljutottam odáig, hogy kipróbáljam.
Nem működik!
A vonalkód olvasó nem olvassa, pedig ez nem valami himpli-hampli 500 Ft-os vonalkódolvasó.Most úgy vagyok mint Edison az első 1000 villanykörténél, most már tudom, hogy ez a megoldás nem vezet a kívánt eredményre.
-
vilag
tag
válasz
Delila_1 #2522 üzenetére
Elképzelhető, hogy működik, bár ebben az esetben biztos, hogy nem a ragszámon szereplő vonalkód "képét" kapod vissza. Ennek oka az, hogy nem történik rövidítés (mind az általam közzétett 1. változatban sem).
Beszélgettünk erről a kollégával és arra jutottunk, hogy valóban lehetne rövidíteni a programkódot, hogy ha figyelembe vennénk a postai ragszám tényleges hosszát, mert jelenleg 'bármilyen' hosszú vonalkódot kezel, nem csak 16 karakterig.
-
-
vilag
tag
válasz
sztanozs #2519 üzenetére
A kollégám hozzájárulásával közzéteszem.
Röviden annyi a lényeg, hogy maga a vonalkód betűtípus nem elégséges arra, hogy visszaolvasható vonalkódot készítsünk, kell még bele egy indító- egy záró- és egy ellenőrző karakter is.
Az alábbi kódrészlet a magyar postai ragszámnak- (RL) és a nemzetközi ragszámnak (RR) megfelelő vonalkódot generál.
Figyelem! Az alábbi kóddal generált ragszám "képe" nem egyezik meg (hosszabb) a ragszámon lévő vonalkód képével, azonban beolvasáskor ugyan azt az értéket kapjuk!Public szov As String
Public h As Long
Private Sub CommandButton1_Click()
vkod = ""
ossz = 0
szov = Trim(InputBox("Vonalkód értéke:", "Kód bevitel"))
ActiveSheet.Cells(3, 3) = szov
If szov = "" Then GoTo vege
h = Len(szov)
If h > 100 Then GoTo vege
Dim vk(2, 100)
For i = 0 To h
If i = 0 Then
vk(1, i) = Chr(204)
vk(2, i) = 104
Else
vk(1, i) = Mid(szov, i, 1)
vk(2, i) = Asc(vk(1, i)) - 32
End If
If i = 0 Then k = 1 Else k = i
ossz = ossz + vk(2, i) * k
vkod = vkod + vk(1, i)
Next
eossz = ossz Mod 103
ActiveSheet.Cells(2, 2) = eossz
vkod = vkod + Chr(eossz + 32) + Chr(206)
ActiveSheet.Cells(2, 3) = vkod
vege:
vege = MsgBox("Konverzió vége!", vbOKOnly, "Vége")
End SubAz eltérésnek az az oka, hogy a vonalkódban rövidítést alkalmazni, azaz minden számpár helyére az értékének megfelelő karakter kerül. Pl.: a RL33... -nál a 33 helyére az "A" betű kódja kerül.
Az alábbi kóddal generált vonalkód képe megegyezik a valódi ragszámon megjelenő "képpel" azonban ez csak a magyar (RL) ragszámmal működik!
A nemzetközi ragszámhoz (RR) még ki kell derítenünk az algoritmust, aztán remélhetőleg azt is megcsináljuk.Public szov As String
Public h As Long
Private Sub CommandButton1_Click()
vkod = ""
ossz = 0
szov = Trim(InputBox("Vonalkód értéke:", "Kód bevitel"))
ActiveSheet.Cells(3, 3) = szov
If szov = "" Then GoTo vege
h = Len(szov)
If h > 100 Then GoTo vege
j = 1
Dim vk(2, 100)
For i = 0 To h
Select Case i
Case 0
vk(1, i) = Chr(204)
vk(2, i) = 104
j = i
Case 1 To 2
vk(1, i) = Mid(szov, i, 1)
If Asc(vk(1, i)) < 195 Then vk(2, i) = Asc(vk(1, i)) - 32 Else vk(2, i) = Asc(vk(1, i)) - 100
j = i
Case 3
j = i
vk(1, i) = Chr(199)
vk(2, i) = Asc(vk(1, i)) - 100
Case Else
If Application.WorksheetFunction.IsEven(i) = True Then
j = i - ((i - 4) / 2)
s2 = Val(Mid(szov, i - 1, 2))
If s2 < 95 Then vk(1, j) = Chr(s2 + 32) Else vk(1, j) = Chr(s2 + 100)
vk(2, j) = s2
End If
End Select
If j = 0 Then k = 1 Else k = j
If i <= 3 Or Application.WorksheetFunction.IsEven(i) = True Then
ossz = ossz + vk(2, j) * k
vkod = vkod + vk(1, j)
End If
Next
eossz = ossz Mod 103
ActiveSheet.Cells(2, 2) = eossz
vkod = vkod + Chr(eossz + 32) + Chr(206)
ActiveSheet.Cells(2, 3) = vkod
vege:
vege = MsgBox("Konverzió vége!", vbOKOnly, "Vége")
End SubSzerk.: Ahhoz, hogy valóban vonalkódot állítsunk elő a fentiek segítségével, ahhoz szükség van még egy Code 128 B betűtípusra is, melyet a googli segítségével könnyedén találhatunk.
Ha azt szeretnénk, hogy a kapott vonalkód más -olyan számítógépeken is megjelenjen, amelyeken az adott betűtípus nincs telepítve, akkor a betűtípust be kell ágyaznunk a fájlba, hogy vigye magával.
Ez csak ttf és otf betűtípusok esetében lehetséges és csak akkor, ha a betűtípus licence megengedi.Beágyazás: Office 2007 Word esetében: Fájl/Word beállításai/Mentés/Betűtípusok beágyazása fájlba.
-
vilag
tag
Tud esetleg valaki segíteni abban, hogy vonalkódgenerátor kellene.
Igazából postai ragszám alapján szeretnék vonalkódot előállítani.
Ma találtam vonalkód betűtípust, de sajnos a vonalkódolvasó nem olvasta be (ellenben a telefonom igen
).
Egyébként pedig tökre nem hasonlít az eredeti ragszám vonalkódjára.Ötlet valakinek?
-
vilag
tag
Hali!
Nem tudja valaki, hogy Win7 és Office 2007 alatt az alábbi kódrészlettel mi lehet a baj?
Private Function GetActive(con As Control) As Control 'Aktív vezérlő meghatározása
If TypeName(con) = "UserForm" Then
Dim f As UserForm
Set f = con
Set GetActive = GetActive(f.ActiveControl)
ElseIf TypeName(con) = "MultiPage" Then
Dim mp As MultiPage
Set mp = con
Set GetActive = GetActive(mp.SelectedItem)
ElseIf TypeName(con) = "Page" Then
Dim pg As Page
Set pg = con
Set GetActive = GetActive(pg.ActiveControl)
ElseIf TypeName(con) = "Frame" Then
Dim fr As Frame
Set fr = con
Set GetActive = GetActive(fr.ActiveControl)
Else
Set GetActive = con
End If
End FunctionXP alatt tökéletesen működik.
Win7 alatt a "Set pg = con sornál "Type mismatch" hibaüzenetet ad.Van esetleg valakinek ötlete?
Olyan megoldás is érdekel ha valaki tudja hogyan lehet kinyerni, hogy éppen melyik vezérlőben vagyok, vagyis annak a nevét. -
vilag
tag
Verziószám eltérés is található a két VB között (az enyém: Version 1053, a másik: 1020)
Valamint észrevettem, hogy a az Object Browser-ben rákeresek pl. a már említett "ShowAllData" kifejezésre, akkor mindkét gépen van találat, azonban ha a jobb klikk "help"-et akarom elérni akkor az egyik képen két olyan választás jelenik meg, ami a másikon nem.
Olyan mintha ez a funkció az egyik gépen elérhető lenne, míg a másikon nem.
Ha kiveszem előle az On Error-t, akkor az említett sornál az alábbi hibaüzenet jelenik meg:
"Worksheet osztály ShowAllData metódusa hibás"
Ötlet?
-
vilag
tag
Senkinek nincs ötlete????
-
vilag
tag
Okozhatja a problémát az, hogy telepítésnél nem állították be a "Közös Office eszközök" menüponthoz, hogy "Minden a saját gépről fut"?
Azt hiszem ebben a csoportban van a Visual Basic for Application is.
Elképzelhető, hogy nem ment fel a Visual Basic minden része???
-
vilag
tag
A szűrés dátumra történik, adódhat a probléma esetleg az excel meglehetősen furcsa dátumkezeléséből?
Megjegyzés: az itthoni gépemen is tökéletesen működik.
-
vilag
tag
válasz
sztanozs #2473 üzenetére
Van előtte On Error, de pont ez a lényege.
A kód:
On Error GoTo vege
ActiveSheet.ShowAllData
Range("a" + Trim(ActiveSheet.Range("a14").End(xlDown).Row)).Select
Exit Sub
vege:
If sorbeszur = True Then Exit Sub
uzenet = MsgBox("Már minden tétel látható!", 64, "Rendszerüzenet")
End SubA kérdés sokkal inkább az, hogy miért van az, hogy az egyik gépen működik, a másikon pedig nem???
Elvileg azonos futtatási környezet... -
vilag
tag
Üdv!
Egy ujabb érdekes esettel kerültem szembe.
Van egy gép amelyre korábban feltettem egy általam VB-ben írt programot, amely a kezdeti nehézségektől eltekintve tökéletesen futott.
A gépet elvitték, mert az xp támogatásának megszünése okán Win7-et tettek rá.Azóta a programkód azt a furcsaságot csinálja, hogy egyes sorai egyszerűen "nem hajtódnak végre".
Ez annyit tesz, hogy elér a kód (léptetésben pl.) az adott sorhoz, rá is megy, tovább is lép a következő sorra, azonban a várt művelet nem hajtódik végre.Ezen felbuzdulva a programot egy pendrivera tettem és bevittem a céghez (win 7), azonban azon a gépen tökéletesen működik.
Lépésben végigfuttattam a kódot és több olyan sor is van ami az említett módon nem hajtódik végre.
(pl.: Activesheet.ShowAllData)
Megnéztem a referenciákat, abban nincs eltérés.Egyszerűen nem értem, hogy mi a fittyfene van.
Van valakinek ötlete????
Lehet, hogy az office telepítésnél kihagytak valamit??? -
vilag
tag
Csak egy bajom van, az, hogy a Refereciákhoz hozzá kell adni a következőt:
Microsoft Scripting RuntimeMeg lehet valahogy oldani, hogy ez a hozzáadás programkódból történjen?
Sajnos a makrórögzítés semmit nem vett fel.
Fontos lenne, hogy ezt le tudjam vezérelni, mert a programot mások is használják, és hát nem hiszem, hogy mindenki el tudja végezni ezt a műveletet. -
vilag
tag
Office 2003-hoz tarozó VBA-ban használtam az "Application.FileSearch" funkciót, azonban az Office 2007-hez tartozó VBA-ban ilyen már nincs.
Tudja esetleg valaki, hogy mi van helyette, mert eddig én nem találtam meg.
Előre is köszönöm!
-
vilag
tag
Üdv!
Van arra valami egyszerű megoldás, hogy ha egy munkafüzethez kapcsolódó összes kódot szeretném átvinni egy másik munkafüzetbe anélkül, hogy a munkafüzetlapok tartalmát megváltoztatnám?
Nagyjából arra szeretném ezt használni, hogy egy másik munkafüzet kódját "frissítsem".
-
vilag
tag
Találtam megoldást:
Application.EnableEvents = False
Workbooks.Open (arhiv)
Application.EnableEvents = TrueMegjegyzés: ebben az esetben a makrók letiltása csak a False és True közti eseményekre vonatkozik.
Ha pl. ezután a Close paranccsal bezáratom a megnyittatott "arhiv" minkafüzetet, akkor ha a BeforeClose eseményhez van valami definiálva, akkor az lefut.Szóval, csak jól kell használni és igazán kezes a dolog.
-
vilag
tag
Egy újabb kérdés:
Alapesetben úgy van beállítva az Excel, hogy makrót tartalmazó excel megnyitásakor rákérdezzen, hogy akarom e futtatni a makrókat.
Most kódból szeretnék megnyitni egy másik makrókat tartalmazó excel fájlt, de úgy, hogy makrók nélkül nyíljon meg.
Makrórögzítéssel próbáltam felvenni az eseményt, de ott csak annyi jelenik meg, hogy open, semmi a letiltásra utaló jelet nem találtam.
Tudja esetleg valaki, hogyan lehet ezt kódból megoldani?
-
vilag
tag
válasz
Cpt. Flint #2390 üzenetére
Nem maradt On error resume next-ben
Amikor csak lehet, ezt kerülöm pont azért, hogy ilyen hibák ne forduljanak elő.
Egyelőre ez a probléma megoldódott.
-
vilag
tag
Ilyet látott már valaki:
A VBA programkódom önkényesen futkorászik.
Az történik ugyanis, hogy a programkód eljut az alábbi sorokig:
Selection.AutoFill Destination:=Range("a15:" + "a" + usortrim), Type:=xlFillDefault
Range("a" + usortrim).SelectEkkor fogja magát és az első sorban írt műveletet látszólag végrehajtja és visszatér abba a subba ahonnan kiugrott, a második sor pedig már le sem fut.
Csak jelzem, hogy ez nem egy új kódrész, és eddig tökéletesen működött.
Van valakinek ötlete, hogy ilyenkor mi van???? Én értetlenül állok a dolog előtt.
Szerk: Megvan az ok: "public usortrim as long" változóként definiáltam a változót és így nem megy.
Az okát azonban még így sem értem. -
vilag
tag
válasz
martonx #2385 üzenetére
Nem jogosultságprobléma van, inkább annyi a baja a VBA-nak, hogy nyitott fájlt (jelen esetben ugye excel, de más típussal nem próbáltam, mert az egyelőre nem érdekes) nem enged másolni.
Érdekes módon egyébként a Total Commandert nem zavarja, hogy nyitott fájlt szeretnék másolni...
-
vilag
tag
Üdv!
VBA FileCopy paranccsal miért nem tudom másolni azt a fájlt, amiből futtatom a kódot?
Ezt a hibaüzenetet kapom: "Permission denied"
Van-e ötlet ennek a hibának az áthidalására?
-
vilag
tag
válasz
pieceofpaper #2349 üzenetére
Ezzel a módszerrel kísérleteztem, de nem úgy tűnik mintha megfelelően működne.
Ugyan is ha bemegyek a "Nyomtatók és faxok"-ba, akkor egy csomó olyan nyomtatóra azt állítja, hogy üzemkész, holott még csak rá sincs dugva a gépre, vagy éppen egy másik gépre van rádugva ami meg éppen be sincs kapcsolva.
Nekem valami olyasmi kéne amivel kvázi "megpingelem" a nyomtatót.
Tud valaki ilyesmi megoldást?
-
vilag
tag
Halihó!
Egy újabb fantasztikus kérdés merült fel bennem.
Lehet e VBA-ból lekérdezni/ellenőrizni, hogy az alapértelmezett nyomtató (amely ugye lehet a helyi géphez csatolt és hálózati is) elérhető e?
Próbáltam a gugli segítségével kutakodni, de számomra értékelhető infót eddig nem találtam.
-
vilag
tag
válasz
pieceofpaper #2345 üzenetére
HEURÉKA!
Hát ez az amit egész idáig kerestem!!!!!
Ezzel minden probléma meg is oldódott.
Ki üröm az örömben, hogy kicsit lassítja a megnyitást, mert megnyitás után amikor eljut az előbb említett sorig akkor elmenti a munkafüzetet (azt nem tudom, hogy miért), aztán újból megnyitja, de már olvasásra.
Vajon ezt a mentést ki lehet e vele hagyatni, vagy ez szükséges rossz?
-
vilag
tag
válasz
pieceofpaper #2343 üzenetére
Ezt az ötletet már korábban elvetettem, mert ugyan nem valószínű, de bekövetkezhet, hogy mindkét személy ugyan abba a cellába ír és ha kilépéskor kap egy olyan kérdést, hogy melyik adat kerüljön megtartásra, akkor nagy valószínűséggel lövése sem lesz róla, hogy mit kell válaszolnia.
-
vilag
tag
válasz
martonx #2341 üzenetére
Mivel bátor vagyok, így akár a 4. megoldási javaslattal is szívesen élnék, de mint korábban írtam, nem végeztem ilyen irányú iskolákat, jelenlegi VBA tudásomat is részben a kollégám útmutatásával, googlizással, autodidakta módon történő tanulással, és tőletek szereztem.
Ebből levonható az a következtetés, hogy ha ebbe az irányba szeretnék elindulni (márpedig régóta kacérkodom a gondolattal), akkor biztosan kell valaki, aki segít a nehézségek leküzdésében.
Esetleg Te vállalnád e ezt a megpróbáltatást?
Egyáltalán milyen fejlesztőkörnyezetben érdemes gondolkodni?
-
vilag
tag
Ezt a megoldást már korábban elvetettem.
Meg lehetne így is oldani nem arról van szó, csak mondjuk jelen esetben kb. 13000 sort kellene másolni egyik táblából a másikba. Nem próbáltam ki, hogy ez mennyi ideig tart, de lassabb gépen (amiből itt akad elég) gondolom azért nem egy pillanat alatt megy végbe.
Ha feljebb olvasol egyéb más érveket is felhoztam amiért nem kívánom szétválasztani több fájlra a programot.
Ha már így is lenne, akkor egyszerűbb lenne az ha csinálnék egy segédfájlt és ez indulna először, ebből pedig külső fájlt már (ha jól emlékszem) lehet úgy nyitni, hogy megadom, hogy szerkesztésre vagy olvasásra nyíljon meg.
Ezt a megoldást egy másik programban már alkalmazom, de pont az lenne a lényeg, hogy nem akarok segédfájlt.
-
vilag
tag
válasz
sztanozs #2337 üzenetére
Akkor én is ismétlem magam
, mert úgy érzem van itt egy kis félreértés.
Nem ez a gond, az ilyesfajta tiltás már meg van oldva. (Van aki írhat is a táblába, és van aki csak megtekintheti)
A gond az, hogy magát a fájlt foglalják szerkesztésre olyanok akiknek egyébként (ha úgy tetszik) egyébként sincsen már joguk beleírni, mert beállítások miatt nem tud beleírni, csak keresni tud benne.
Ha azonban ugyan ekkor egy olyan személy szeretné megnyitni szerkesztésre akinek egyébként lenne joga beleírni, az meg nem tudja csak olvasásra megnyitni, mert ezt az üzenetet kapja:
"A xyz.xls fájl zárolva van szerkesztésre
'xy' által.
Megnyithatja "Olvasásra", vagy válassza az "Értesítés" gombot, ha az olvasásra való megnyitás mellett értesítést is kér, mikor a dokumentum használatát befejezik."
Erre a problémára keresek én megoldást.
-
vilag
tag
válasz
sztanozs #2334 üzenetére
Őszintén szólva, sajnálatos módon az általam végigtanult iskolák egyikében sem oktattak Accesst-t (még csak bele sem néztünk), pedig egy-két iskolát végigtapostam már.
Nagyjából Excel és Word volt mindenhol, de a mostani Excel és VBA tudásom 95%-a is sajáterős.Access-ben igazából még életemben nem dolgoztam, bár sejtem már régen, hogy valahogyan meg kellene vele ismerkednem.
A másik ok pedig az, hogy excelben már készen van a program (ezt a problémát leszámítva).Egyébként nehéz lenne áttenni accessbe?
Szerk: Plusz, fogalmam sincs, hogy a cég minden gépén rajta van e az access.
Erről eszembe jut valakinek egy korábbi hozzászólása, miszerint: a böngésző az amely minden gépen ott van...
A végső cél az lenne, hogy valami ilyenbe át tudjam ültetni, de ehhez is kellene egy konkrét ember aki ebben tudna segíteni, mert egyedül biztos nem fog menni. -
vilag
tag
válasz
martonx #2333 üzenetére
Másik programnál már kénytelen voltam így megoldani ezt a problémát, bár ott más körülmény is indokolta a szétválasztást.
Ennél a programnál viszont semmi más nem indokolja ezt. A munkalapon gyakorlatilag egy képlet sincs, így nagyjából maga az excel így is csk adatbázisként funkcionál.
Ebből kifolyólag semmiképpen sem szeretném kettéválasztani.
-
vilag
tag
válasz
martonx #2331 üzenetére
Ez a része már régen megvan.
Úgy van megoldva, hogy az excelben tárolom az összes felhasználót, és a hozzájuk tartozó jogosultsági szintet. A munkafüzet megnyitásakor a környezeti változók közül lekérdezem a Windowsba bejelentkezett felhasználó felhasználónevét és a hozzá kapcsolódó jogosultságot.
Tehát miután megnyílt a fájl már el van döntve, hogy mit tehet és mit nem. Ezzel nincs is gond.
A gond ott van, hogy ha egy felhasználó szintű felhasználó nyitja meg a fájlt, akkor ő azt írásra nyitotta meg, még ha nem is tud bele konkrétan írni mert zárolva vannak a táblák meg minden.
Azonban ha eközben egy admin jogú felhasználó nyitja meg a fájlt, akkor ő már csal olvasásra tudja megnyitni a fájlt, mert a másik felhasználónál nyitva van írásra is.Ezt a problémát szeretném áthidalni, akár kerülőúton is. Csak ezt a kerülőutat nem tudom. Erre nem találok megoldást már hetek óta.
Ha esetleg nem olvastál feljebb, felmerült a ActiveWorkbook.ReadOnly.Recommended amivel ugye el lehet érni, hogy megkérdezze a megnyitáskor, hogy írásra vagy olvasásra szeretnéd megnyitni.
Van egy olyan is, hogy ActiveWorkbook.ReadOnly, de ez sajnos csak lekérdezhető
-
vilag
tag
válasz
sztanozs #2329 üzenetére
Szerintem itt valami félreértés lesz (vagy én nem értek valamit).
Röviden: van egy postakönyv program, amelyet egyesek írásra, míg mások csak olvasásra nyithatnának meg. Ez lenne a cél.
Ennek a megnyitáskor kellene eldőlnie.
Egyrészt a véletlen belenyúlások miatt vannak két csoportba osztva, másrészt azért, hogy ne legyen az, hogy az akinek írásra is van joga nem tud dolgozni benne, mert szerkesztésre már megnyitotta egy olyan felhasználó akinek egyébként nincs (vagy nem lenne) joga beleírni.
-
vilag
tag
válasz
sztanozs #2327 üzenetére
Azt már próbáltam.
Működik is a dolog, azonban hiába állítom be, hogy a saját tulajdonba vételt megtagadom mindekitől, ha mentés máskénttel elmenti (és felülírja) a fájlt, akkor minden ilyen beállíts ment a levesbe.
Ráadásul a beállítása is elég nehézkes, pláne, hogy domain váltás miatt az újonnan jött kollégákat ki sem tudom tallózni, így persze a jogokat sem tudom beállítani hozzájuk.
(A domain váltás következtében kialakult ilyen jellegű problémát pedig több mint egy éve nem javították, és szerintem nem is fogják.)Egyébként én abból indulok ki, hogy ha megnyitás közben képes az excel állítani a jogot (mert ugye az, hogy megkérdezze, az is a Workbook_Open()-ben van), akkor valahogy csak meg lehet oldani, hogy hagyjuk ki a kérdést (vagy esetleg válaszoljunk programból). Csak a hogyanra nem tudom a választ.
-
vilag
tag
válasz
Tomaaasz #2325 üzenetére
Nem egészen.
Én azt szeretném, hogy amikor megnyitok egy adott excel fájlt, akkor az abban lévő programkód (megadott feltétel alapján) döntse el, hogy írásra vagy olvasásra nyílik meg. Csak egy fájlról van szó, nincs második.
Egy alábbi félmegoldás van, mert abban az esetben induláskor megkérdezi, hogy írásra vagy olvasásra akarom e megnyitni:
Private Sub Workbook_Open()
ActiveWorkbook.ReadOnlyRecommended = True
End SubÉn viszont azt szeretném ha nem tenné fel a kérdést.
Kb. így:
If felhasználó = admin then
megnyitás írásra
Else
megnyitás olvasásra
End if -
vilag
tag
Először is Boldog és sikerekben gazdag új évet mindenkinek!
Köszönöm a választ!
Ez már fél siker, mert most megkérdezi, hogy olvasásra akarom e megnyitni vagy írásra.
Nekem viszont az kellene, hogy meg se kérdezze csak állítsa be.
ActiveWorkbook.ReadOnly sajnos csak lekérdezhető, pedig jó lenne ha állítható is lenne
Próbáltam a rákérdezést kihagyatni Application.Displayalerts=false-al kihagyatni, de nem vált be.
Próbáltam makrórögzítéssel is felvenni, a válaszadást, de ez sem vált be.Van esetleg ötlet arra, hogyan lehetne ezt megbuherálni?
Szerk: egy másik jellegű kérdés: hogyan lehet lekérdezni, hogy egy adott UserForm "meg van-e nyitva"?
Próbáltam így:
if UserForm1.visible = true then...
(ekkor azonban elindul az adott UserForm Initializálása még ha eddig nem is volt "nyitva")
A UserForm.Show azt hiszem nem lekérdezhető, bár ebben nem vagyok egészen biztos. -
vilag
tag
Nagyon Boldog Békés Ünnepeket mindenkinek!
-
vilag
tag
válasz
Petya25 #2283 üzenetére
Ahogy írtam VBA-ban szeretném ezt a problémát megoldani, így sajnos az általad kínált megoldás nem használható.
A VBA súgójában annyit találtam, hogy "ActiveWorkbook.ReadOnly" az csak lekérdezhető.
A probléma az, hogy az adot fájlt tööben is használják a hálózaton, viszont a felhasználók egy körének csak olvasásra szabadna megnyitnia.
Fájlszinten a biztonsági beállítások között szépen be is állítottam, hogy mely felhasználók nyithatják írásra, és melyek szerkesztésre.
A fájl elsődleges használója azonban nem én vagyok. Hiába állítottam be mint tulajdonos, hogy semelyik más felhasználónak nem engedélyezem, hogy saját tulajdonba vegye a fájlt, ez valamiért időnként mégis előfordul és ilyenkor minden beállított fájlszintű korlátozás ment a levesbe.Ezért akartam ezt programkódból megoldani, ha lehet.
-
vilag
tag
Üdv!
Mondja már meg valaki, hogy programkódból (VBA) meg lehet e oldani, hogy az adott fájl (amiből a kódot futtatom) csak olvasásra nyíljon meg?
Azt akarom elérni, hogy írásra csak bizonyos felhasználóknak nyíljon meg a fájl.
Köszönöm!
-
vilag
tag
válasz
martonx #2277 üzenetére
A vállalkozóbarátságot már volt szerencsém tapasztalni, amikor utánakérdeztem, hogy egy cukrász végzettségű ember hogyan tudja legalizálni ha néha néha süt egy-egy tortát valakinek pénzért
(A párom cukrász)
De nem biztattak nagyon.
Így maradt az illegális tevékenység.Úgy is mondhatnám mi vagyunk a sötétben bujkáló ellenforradalmár...
-
vilag
tag
válasz
sztanozs #2274 üzenetére
Remélem nincs, most már minden bizonnyal megnézem.
Az nyilvánvaló, hogy a benne tárolt adathalmaz a cég tulajdona, de remélem maga a program nem...
Ha konkrétan nincs kikötve a munkaszerződésben, akkor elvileg szabad a gazda?
Ha esetleg el akarnám adni, akkor kéne valamiféle vállalkozást is létrehoznom, hogy adózási szempontból is jogszerű legyen?
-
vilag
tag
Üdv!
Tudja valaki, hogy hogyan vannak itt a szerzői jogok?
Úgy értem, hogy ha VB-vel írok egy programot, akkor azt mondjuk eladhatom? -
vilag
tag
válasz
sztanozs #2262 üzenetére
Na, nem akarom elkiabálni, de úgy tűnik működik a dolog.
Úgy néz ki valóban a referenciákkal volt a probléma.
Ha elindítod, és gubanc van, akkor a "References" menüben a problémás referencia neve elé oda kerül, hogy "MISSING: "Úgy tűnik, ez jellemzően abból adódik, hogy a 2003-as office (11.0) nem találja a későbbi 2007-es officehoz (jelen esetben 14.0) referenciát.
Mélyebb vizsgálatra nem volt alkalmam, mert még nem tudtam a bizonyos gép elé kerülni, de ha odajutok, akkor megírom a tapasztalatokat.
Köszönöm mindkettőtöknek a segítséget!
-
vilag
tag
Halihó!
Nem tudja véletlenül valaki, hogy melyik topikban találok olyan mágust aki segítene nekem összedobni egy nem túl bonyolult Android alkalmazást?
Keresgéltem a fórumon, de nem találtam fejlesztőknek szóló topikot.
-
vilag
tag
válasz
sztanozs #2260 üzenetére
Értem a különbséget.
Most az az érdekes helyzet állt elő, hogy elindítottam azt a fájlt amit a másik gépen próbáltam futtatni, és most meg nekem írja ki a szóban forgó hibaüzenetet.
Mókás kis hiba ez, de már jó lenne tudni mi a megoldás...
Biztosan csak a referencia okozhatja ezt a hibát?
(Akkor ha jól értem a referenciák az adott munkafüzethez kötöttek.)
Új hozzászólás Aktív témák
Hirdetés
- Erős specifikáció, kompakt formában
- Samsung Galaxy A54 - türelemjáték
- Autós topik
- Milyen RAM-ot vegyek?
- DOOM - The Dark Ages
- Mass Effect
- Egy helyre gyűjti az eltérő áruházak játékait a Microsoft
- PlayStation 1 / 2
- Motorola Edge 50 Neo - az egyensúly gyengesége
- Örülhetnek a tankok szerelmesei, jön a Spearhead 2
- További aktív témák...
- Apple iPhone 14 256GB/ 86% Akkuval / 12 hónap jótállással!
- Samsung Galaxy S23 Plus 256 GB Kártyafüggetlen 1Év Garanciával
- Realme 8i 64GB / Normál állapotban / 12 hónap jótállással
- Apple iPhone 15 Pro Max - Natural Titanium - Újszerű karcmentes állapotban! 100% akku! Gyári garis!
- AKCIÓ! Gigabyte B85-HD3 B85 chipset alaplap garanciával hibátlan működéssel
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged