2017. február 27., hétfő

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Visual Basic

Hozzászólások

(#2701) bundli válasza Delila_1 (#2700) üzenetére


bundli
(fanatikus tag)

Köszi, ez azóta megoldódott! :R

Most olyan problémám lenne, hogy van 3 darab cella, amelybne szöveg van, ezt szeretném kimenteni egy txt fájlba egy gombbal úgy, hogy gombnyomáskor el lehessen dönteni azt, hogy hova mentődjön a fájl egy popup menüben.

Az egyszerűség kedvéért legyen A1:A3 tartomány amit egy .txt fájlba kelljen kimenteni

(#2702) bundli


bundli
(fanatikus tag)

Merged/Összevont cellák tartalmának törlésére valami ötlet valakitől? Azt találtam róla neten, hogy ha unmergelem őket akkor lehet törölni, de ez az opció sajna nem játszik nálam, mert utána összevonva kellenének.

Tehát adott egy A1:C100-as tartomány, ahol kettesével össze vannak vonva a cellák, bennük tartalommal. Ezt hogyan lehet törölni?

(#2703) alfa20 válasza bundli (#2702) üzenetére


alfa20
(senior tag)

Szia,

Tartalom törlést próbáld meg esetleg:
Range("A1:C100").ClearContents

[ Szerkesztve ]

"Az agy olyan, mint az ejtőernyő: csak akkor működik, ha nyitott." (Thomas Dewar)

(#2704) bundli válasza alfa20 (#2703) üzenetére


bundli
(fanatikus tag)

Igen, pont ezzel próbáltam, de nem engedte az összevont cella miatt.

(#2705) alfa20 válasza bundli (#2704) üzenetére


alfa20
(senior tag)

nálam 2010-es Excel-ben nincs gondja, szépen törli:

"Az agy olyan, mint az ejtőernyő: csak akkor működik, ha nyitott." (Thomas Dewar)

(#2706) Delila_1 válasza bundli (#2704) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

El lehet kerülni a cellák összevonását, mert bár megengedi az Excel, sokszor váratlan hibákat okoz.

Az A1:A3 összevonása helyett ezt tedd:

• Beírod az A1-be a címet,
• Kijelölöd az A1:A3 tartományt,
• Cellaformázás, igazítás fül,
• A szöveg igazítása vízszintesen legördülőből "A kijelölés közepére" opciót válaszd ki.

Látszólag középre kerül a cím, és itt a látszat az, ami számít. Ha szegélyeket alkalmazol, azok is megfelelnek majd a kívánt kinézetnek.

Szerk.: a teljes tartományban megszünteted az összevonásokat, majd végrehajtod az első szöveg középre helyezését. Ezután már csak ki kell jelölnöd a következőt, az F4 gyorsbillentyű ezt is középre teszi. Az F4 az utolsó műveletet ismétli. Kijelölsz - F4, kijelölsz - F4.

[ Szerkesztve ]

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2707) Nikkie


Nikkie
(újonc)

Kedves fórumozók,

A segítségeteket szeretném kérni egy excel vba kód kis részletével kapcsolatban.

Készítettem egy macrót ami tökéletesen is fut (megkeresi akit kell, listát készít majd azt pdf-ként csatolja, kiküldi a levelet a pdf-el, beleteszi amit kell, to/cc field-eket kitölti, stb.) viszont egy részét szeretném változtatni de sajnos elakadok ott, hogy ha több emberem van a listában akkor hogy küldje ki a leveleket egyesével, de úgy, hogy az egy emberhez tartozó jegyeket összegyűjti egy levélbe?

Lentebb csatolok egy képet is random adatokkal.

Szóval tömören a kérésem az lenne, hogy tud-e segíteni valaki egy olyan macró részlettel, ami lenti táblázatból kigyűjti az egy névhez tartozó adatokat majd azt továbbra is pdf-ként csatolja és ezután megismétli a lépést mindaddig, amíg van név az E3 mezőben
Ez a lista minden héten változik, van hogy csak 10 különböző név van benne, vangy hogy több, esetleg kevesebb van a táblázatban

Például:
1) minden anna@abc.com-hoz tartozó jegyet ami a képen látszik tegyen egy pdf-be
2) kreálja meg a levelet (a pdf-el) és küldje ki a címzettnek (van erre egy To mező beállítva) és egy Cc-nek (szintén van erre mező beállítva)
Az ide tartozó részek már előre megvannak és mint írtam minden megy úgy ahogy kell hogy ha csak 1 emberről van szó.
3) ezután keresse meg a következő embert, kreálja meg a pdf-et és küldje ki annak is a levelet, majd ismételje ezt addig ameddig van név a Submitter (E3) mezőben

Előre is köszönöm a segítségeteket.

(#2708) sztanozs válasza Nikkie (#2707) üzenetére


sztanozs
(PH! addikt)
LOGOUT blog

Készítettem egy macrót - a többi részt elolvasva, az hiszem már itt hibázik a kérdés

[ 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...

(#2709) Ferenc.


Ferenc.
(kvázi-tag)

Sziasztok!

Örülök, hogy találtam olyan aktív magyar fórumot ahol foglalkoznak még a visual basic-el. Egy kedves, nyugdíjas ismerősömnek szeretnék segíteni, mert már több mint 10 éve a visual basic 6 programról álmodik, hogy szeretne vele programozni. Van is könyve a programról, leírásokkal. S most már számítógépe is van. Gondoltam segítek neki, nem lehet bonyolult.. Én személy szerint nem értek semmit hozzá, én csak beszerezni szeretném neki ezt a programot a számítógépére, de hiába írok be a google-ba bármit, sehol nem lehet se megvenni, se letölteni ( pár iso-t letöltöttem, de lemezre kiírva semmi használható nem volt tehát nem a visual basic 6 volt).

Aztán a visual studio 6 -ra kezdtem rákeresni( ha jól látom a studio része a visual basic), de a studiot sem tudom beszerezni. Így azért írok ide, hogy ha valaki tudna segíteni abban hogy a visual basic 6 -ot, hogy tudom beszerezni, ( cd kulcsunk van), tehát csak a cd tartalmak kellenének( cd1 cd2 , msdn) library), akár csak neten átküldve, s természetesen honorálnánk is! Tehát ha valaki tud segíteni ebben kérem írjon!

Ismerősöm kívánságát szeretném teljesíteni, meg valamennyit már ért a visual basic 6 -hoz régről ezért is ragaszkodik ehhez a verzióhoz ( tudom van már sokkal újabb, de azzal nem boldogulna s a ragaszkodás nagy úr), tehát ezért kell a visual basic 6 vagy visual studio 6 (nem tudom melyik a helyes kifejezés). S igaz hogy a számítógépe windows 8 , lassan win 10 , de az éjszakát azzal töltöttem, hogy utána nézzek, hogy ezt a visual basic 6 -ot hogy lehet feltenni windows 7/8/10 -es gépre, s van rá megoldás! ( Visual Studio 6.0 Installer wizard v.4.5 ), tehát megoldható, így "csak" maga a szóban forgó programmal, a visual basic 6 beszerzésénél akadtam el, s nincs ötletem.

Köszönöm szépen előre is a segítséget!

(#2710) martonx válasza Ferenc. (#2709) üzenetére


martonx
(PH! addikt)

Nézd aranyos a törekvésed, de lássuk be a Visual Basic 6 nem csak hogy régi, de az informatikában már egyenesen ősi a maga 20 éves korával. Őszintén meglepődnék rajta, hogy ha valahol az internet legeldugottabb bugyraiban sikerülne is fellelned, sikerülne-e vajon feltelepítened :D

A bácsi teljesen nyugodtan elkezdhet programozni helyette a legújabb Visual Basic nyelven, hiszen maga a basic szintaxis alig-alig változott, hello world-öt nem nehéz bármilyen nyelven írni :D

Az meg ne tántorítson el a legújabbtól, hogy de nektek a VB6-hoz van licenszetek, hiszen időközben az újabb verziók ingyenesek lettek :K és az se vezessen félre, hogy a VB6-hoz van könyvetek, hiszen az internet tele van könyvekkel, és könyvet is egyszerűbb egy napra kész nyelvhez találni, mint egy 20 éveshez.

Én kérek elnézést!

(#2711) Ferenc. válasza martonx (#2710) üzenetére


Ferenc.
(kvázi-tag)

Köszönöm a választ! Akkor újabb verzió kell, utána nézek, de melyik verziót ajánljátok ami fut windows 8 vagy 10 -es gépen, de eléggé hasonló kinézetre a visual basic 6 -hoz?

[ Szerkesztve ]

(#2712) Ferenc.


Ferenc.
(kvázi-tag)

Jó hírem van! Egy utolsó próbát még adtam magamnak ma este hogy hátha meg lesz a visual basic 6 ,új gépre, s bele vetettem magam az internet bugyraiba..

Egy youtube videó hozzászólása között akadtam egy linkre, ami elvileg a vb6 -ra vezet, ami olyan hogy megy új op rendszereken is, szkeptikusan letöltöttem, majd feltelepítettem, s legnagyobb meglepetésemre, működik! Itt a link: [link]

Igaz most windows 7 -re raktam fel, de ha ezen megy akkor mennie kell win 8/10 -en is szerintem, de az majd holnap derül ki, akkor megyek a bácsihoz telepíteni. S itthon most olyannyira belejöttem ,hogy még meg is magyarosítottam a VB6 -ot! :) Ezen magyar honlap segítségével: [link] , s ez is működik, így most már magyar a VB6. No azt hiszem én így mindent megtettem amit lehet, az ügy érdekében.
S lényeg ezzel, hogy csak van megoldás, hogy aki akarja, tudja használni a vb6 -ot új gépeken is, hiába a 20 éves kora:) Sok sikert mindenkinek a továbbiakban!

[ Szerkesztve ]

(#2713) -conrad-


-conrad-
(PH! addikt)

Sziasztok,
most ismerkedem a VBA-val, és lenne is egy kérdésem ahol elakadtam:
Írtam egy függvényt, működik rendesen. Azt szeretném, hogy mindig elérjem mert sokszor kell, így a personal.xlsb-be mentettem, átneveztem az egyik modult "fuggvenyek"-re, oda akarom majd tenni az összeset ami ilyen egyedi.
A problémám az, hogy nem férek hozzá egyszerűen, tehát ha elkezdem gépelni, hogy "=függvényne..." akkor nem dobja be a függvényneve"-t, hanem csak úgy érem el, hogy "=PERSONAL.XLSB!függvényneve()"

Meg lehet azt oldani, hogy ne kelljen mindig megadni a personal.xlsb-t? Hova mentsem?
(minden munkafüzetbe macera betenni, mert kb. 10 percig használom és nyitom a következőt)

Köszi :)

(#2714) Bobrooney válasza -conrad- (#2713) üzenetére


Bobrooney
(senior tag)

Igen, függvényt (Function) írj ne eljárást (Sub).
Vagy mindig más fájlba szeretnéd használni 1 másik fájlban lévő függvényt??

[ Szerkesztve ]

(#2715) Delila_1 válasza -conrad- (#2713) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

A függvényvarázslóval hívd meg, ott kiválaszthatod a felhasználói kategóriát, abból meg az éppen szükséges függvényedet.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2716) Amiens


Amiens
(tag)

Sziasztok!

Excel-ben makrókkal küldöm ki az e-maileket.
Az alapértelmezett fiókcímemet szeretném megváltoztatni, hogy ne az én nevemben küldje el az e-maileket.
Mennyire lehet erre megoldást találni?

Ami

Zuk Z2 / Nokia E72

(#2717) Bobrooney válasza Amiens (#2716) üzenetére


Bobrooney
(senior tag)

(#2718) Amiens válasza Bobrooney (#2717) üzenetére


Amiens
(tag)

Szerintem ez nem segített most rajtam. :))
De köszönöm azért!

Zuk Z2 / Nokia E72

(#2719) sztanozs válasza Amiens (#2718) üzenetére


sztanozs
(PH! addikt)
LOGOUT blog

Tedd fel valahova, hogy oldottad meg. Addig nem igazán tudunk segíteni, amíg nem látjuk, mit csináltál.

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...

(#2720) Amiens válasza sztanozs (#2719) üzenetére


Amiens
(tag)

Parancsoljatok! :)
Sub level()

sor = 2
kinek = Sheets("Alap").Range("b6")

Set OutApp = CreateObject("Outlook.Application")
While Not IsEmpty(Sheets(kinek).Cells(sor, 2))
If Sheets(kinek).Cells(sor, 1) = "Igen" And IsEmpty(Sheets(kinek).Cells(sor, 6)) Then
keres = Sheets(kinek).Cells(sor, 2)
Set OutMail = OutApp.CreateItem(0)
With OutMail
If Sheets("Alap").Range("b8") = "Nem" Then
.To = Sheets(kinek).Cells(sor, 3)
Else
.To = "valaki@valami.hu"
End If
If Sheets("Alap").Range("b7") = "Igen" Then
.CC = Sheets(kinek).Cells(sor, 4)
End If
.Subject = Sheets("Alap").Range("b1") & "-" & Sheets(kinek).Cells(sor, 2)
.HTMLBody = ""
.HTMLBody = .HTMLBody & Replace(Sheets("Alap").Range("b2"), Chr(10), "<br>") & "<BR>"
.HTMLBody = .HTMLBody & Replace(Sheets(kinek).Cells(sor, 5), Chr(10), "<br>") & "<BR>"
.HTMLBody = .HTMLBody & Replace(Sheets("Alap").Range("b3"), Chr(10), "<br>") & "<BR>"

If Not IsEmpty(Sheets("Alap").Range("b4")) Then
wb1 = ActiveWorkbook.Name
Workbooks.Open (Workbooks(wb1).Sheets("Alap").Range("b4"))
wb2 = ActiveWorkbook.Name
s = 1
kuld = False
While Not IsEmpty(Workbooks(wb1).Sheets("Alap").Cells(s + 9, 1))
sh = Workbooks(wb1).Sheets("Alap").Cells(s + 9, 1)

Select Case Workbooks(wb1).Sheets("Alap").Cells(s + 9, 3)
Case "Nem kell"
Workbooks(wb2).Sheets(sh).Select

Application.DisplayAlerts = False
Workbooks(wb2).Sheets(sh).Delete
Application.DisplayAlerts = True

Case "Mind"
Case "Szűrő"
oszlop = Workbooks(wb1).Sheets("Alap").Cells(s + 9, 2)
Workbooks(wb2).Sheets(sh).Select
msor = Workbooks(wb1).Sheets("Alap").Cells(s + 9, 4)
msor = msor & ":" & msor
Rows(msor).Select
Selection.AutoFilter
ActiveSheet.Range("$A:$XB").AutoFilter Field:=oszlop, Criteria1:="<>" & keres

Range(Cells(Workbooks(wb1).Sheets("Alap").Cells(s + 9, 4) + 1, 1), ActiveCell.SpecialCells(xlLastCell)).Select
Selection.EntireRow.Delete
[A1].Select '.pdf miatt
ActiveSheet.PageSetup.Orientation = xlLandscape '.pdf miatt
ActiveSheet.PageSetup.FitToPagesWide = 1 '.pdf miatt
ActiveSheet.ShowAllData
End Select

s = s + 1
Wend

Filename = ActiveWorkbook.Path & "/" & Workbooks(wb1).Sheets("Alap").Range("B5")
Application.DisplayAlerts = False
If Workbooks(wb1).Sheets("Alap").Range("D5") = ".pdf" Then
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Filename, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
Else
ActiveWorkbook.SaveAs Filename
End If

ActiveWorkbook.Close SaveChanges:=False

Application.DisplayAlerts = True

Set myAttachments = OutMail.Attachments
myAttachments.Add Filename

End If
.Attachments.Add Sheets("Alap").Range("C7")
.Send 'or use .Display
Sheets(kinek).Cells(sor, 6) = Time()
End With
End If
sor = sor + 1
Wend

End Sub

Zuk Z2 / Nokia E72

(#2721) sztanozs válasza Amiens (#2720) üzenetére


sztanozs
(PH! addikt)
LOGOUT blog

Az Outlook.Application csak olyan címzett nevében hajlandó küldeni, amelyikre SendAs joggal rendelkezel: [link]
Esetleg használhatod a SentOnBehalfOfName property-t, de szerintem látszani fog, hogy tőled jött.

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...

(#2722) Amiens válasza sztanozs (#2721) üzenetére


Amiens
(tag)

Köszönöm szépen! :C
Tökéletesen működik! Mivel van meghatalmazásom a másik e-mail cím használatához, így patentul beírtam ezt a kódrészletet:
If Sheets("Alap").Range("D1") = "Másik cím <másvalaki@valaki.hu>" Then
.SentOnBehalfOfName = Sheets("Alap").Range("D1")
End If

Mindezt betettem egy cellalistába, és voálá, annyit és azt teszek bele, akit akarok... :DD

[ Szerkesztve ]

Zuk Z2 / Nokia E72

(#2723) Amiens


Amiens
(tag)

Újabb felvetés:

Egy munkalapon szeretnék keresni adott oszlopra és sorra, így a keresett érték a két tömb csomópontja lenne... :F

Zuk Z2 / Nokia E72

(#2724) Delila_1 válasza Amiens (#2723) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

Az INDEX és a HOL.VAN (angolban MATCH) fügvvények kombinációjával keresheted meg az értéket.

A C10 cella képlete
=INDEX(A1:D7;HOL.VAN(A10;A:A;0);HOL.VAN(B10;1:1;0))

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2725) Amiens válasza Delila_1 (#2724) üzenetére


Amiens
(tag)

Szuper! :) Köszönöm szépen!
Ezzel indítom a reggeli melót... :))

Zuk Z2 / Nokia E72

(#2726) Delila_1 válasza Amiens (#2725) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

Jó munkát! :)

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2727) Delila_1 válasza Amiens (#2725) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

Mutatok egy másik módszert.
Kijelölöd a tartományt, Képletek | Definiált nevek | Kijelölésből új, Felső sorból és Bal oszlopból bejelölve. Ez létrehozza a sorok és oszlopok tartományát a megfelelő nevekkel.

A létrehozás után érdemes megnézni a Névkezelő-ben, milyen nevek jöttek létre.
Ezután már csak a szóköz, más néven metszet operátort kell alkalmazni, ahol a sor és oszlop nevét egy szóköz köti össze, mint a képen a B10 cellában.

Arra kell ügyelni, hogy a címek nem tartalmazhatnak szóközt (Nagy Anna), és nem kezdődhetnek számmal.
Az első esetben a Kijelölésből új menüpont a szóköz helyére alsó kötjelet tesz, Ebben az esetben a B10 képlete: =Nagy_Anna február.
Számmal kezdődő címsoroknál is alsó kötjel kerül a név elejére.

1. hét -> _1._hét

[ Szerkesztve ]

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2728) Amiens válasza Delila_1 (#2727) üzenetére


Amiens
(tag)

Eszméletlen, hogy mennyi időt és energiát lehet megspórolni, egy ilyen egyszerű megoldásával! :C
Ezer köszönet! :R

Zuk Z2 / Nokia E72

(#2729) Delila_1 válasza Amiens (#2728) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

Szívesen. :)

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2730) dWan


dWan
(lelkes újonc)

Sziasztok!

Lenne egy minden bizonnyal egyszerű kérdésem, remélem valaki tud segíteni.

Adott egy számsorozat, 9 elemből áll, nem vészes. Az alatta lévő sorba kéne a fenti sort szummázni, az adott cellának megfelelő felső soros értékkel bezárólag. Továbbá van még egy változó cella is, amely azt adja meg, hogy visszamenőleg hány cella értékét kell összeadni. Van valakinek tippje?

Köszi

(#2731) Amiens válasza dWan (#2730) üzenetére


Amiens
(tag)

Valami ilyesmire gondoltál?
Range("A10").Value = Application.Sum(Range(Cells(1, 1), Cells(9, 1)))
Range("A11") = Range("A1:A9").Cells.SpecialCells(xlCellTypeConstants).Count

Zuk Z2 / Nokia E72

(#2732) dWan válasza Amiens (#2731) üzenetére


dWan
(lelkes újonc)

A vb-t most kezdtem el, szóval 100%-ban nem biztos, hogy értem amit írtál. De így elsőre ez nem teljesen azt csinálná amit szeretnék.

A működő gépek számát akarom megadni, úgy, hogyha az élettartamot változtatom akkor értelemszerűen az is változzon

[ Szerkesztve ]

(#2733) Delila_1 válasza dWan (#2732) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

Melyik cellában, mit akarsz összegezni? Add meg a cellák címét, mert a képen nem látom, melyik az a bizonyos 9.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2734) dWan válasza Delila_1 (#2733) üzenetére


dWan
(lelkes újonc)

Az eredményt a D9:L9-be szeretném.
A szummázandó sor a D8:L8.

A változó, hogy a D8:L8 soron visszamenőleg hány adatot szeretnék összeadni az pedig a C2

(#2735) Delila_1 válasza dWan (#2734) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

Még mindig nem tiszta. Olyan képet tegyél fel, ahol a D9:L9-be beírod, milyen eredményekre van szükséged.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2736) Delila_1 válasza dWan (#2734) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

Azt hiszem, kitaláltam, mire gondolsz.

D9 -> =HA(D8>0;D8;"")

E9 -> =HAHIBA(D10+E8;"")

Ezt a képletet másold jobbra, ameddig kell.

[ Szerkesztve ]

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2737) dWan válasza Delila_1 (#2735) üzenetére


dWan
(lelkes újonc)

C2 értékét változtatni szeretném, erre pedig annak kellene történnie, hogy a D8:L8 sor egy részletén, adott cellától C2 értékének megfelelően visszafelé összeadja az elemeket, és az adott cella alá, a D9.L9 sorba írja ki az értéket.

Lényegében a C2 értéke 0-9 között érdekes, ha több akkor már nem változik a D9:L9 sor.

Functionnal kérik megírni.

(#2738) Delila_1 válasza dWan (#2737) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

M1-be =KÓD(KÖZÉP(CÍM(8;4+$C$2-1);2;1))-16

D9-be =HA(KÓD(OSZLOP())<=$M$1;D8;"")

E9-be =HA(KÓD(OSZLOP())<=$M$1;E8+D9;"") , ezt másold jobbra.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2739) Delila_1 válasza dWan (#2737) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

Megvan az igazi!

D9: =HA($C$2>=OSZLOP()-4;D8;"")
E9: =HA($C$2>OSZLOP()-4;E8+D9;"")

Nem kell segédcella, az E9 képletét másold jobbra.

[ Szerkesztve ]

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2740) dWan válasza Delila_1 (#2739) üzenetére


dWan
(lelkes újonc)

Az utolsó majdnem jó. Csak így az a gond, hogy a 4. elemnél(G9) ha 3 a feltétel cella nem kerül semmi, valójában pedig ide 30+40+20-nak kellene szerepelnie és így tovább

(#2741) Delila_1 válasza dWan (#2740) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

Akkor most próbáld meg úgy leírni, hogy meg lehessen érteni.
A D8:L8 tartományban számok vannak.

Mi kell és melyik cellába, ha a C2=1, ha a C2=3, ha a C2=4, stb.

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2742) dWan válasza Delila_1 (#2741) üzenetére


dWan
(lelkes újonc)

C2=1 d9=d8, e9=e8...l9=l8
C2=2 d9=d8, e9=e8+d8, f9=f8+e8...
C2=3 d9=d8, e9=e8+d8, f9=f8+e8+d8...
C2=4 d9=d8, e9=e8+d8, f9=f8+e8+d8, g9=g8+f8+e8+d8...
...

Tehát ismét, c2 értékének megfelelő számú cellát adunk össze. A cellákat a sorban visszafelé kell számolni.
pl, ha c2=4, akkor g9=g8+f8+e8+d8, de a következő cella már h9=h8+g8+f8+e8 lesz,
ha c=2, akkor g9=g8+f8 (csak 2 tagod adunk össze visszamenőleg)

(#2743) Delila_1 válasza dWan (#2742) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

A D9 képlete

=HAHIBA(SZUM(INDIREKT(CÍM(8;OSZLOP()-$C$2+1) & ":" & CÍM(8;OSZLOP())));SZUM($D8:D8))

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2744) dWan válasza Delila_1 (#2743) üzenetére


dWan
(lelkes újonc)

És tényleg, köszönöm!!

Bár sajnos érteni nem értem, de megpróbálom felfogni valahogy :)

(#2745) Delila_1 válasza dWan (#2744) üzenetére


Delila_1
(PH! kedvence)
LOGOUT blog

Nem egyszerű.

Szívesen. :)

Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.

(#2746) A Gabor


A Gabor
(újonc)

Lenne egy olyan kérdésem, hogy VB-ben lehet-e telepítőt készíteni?
Nem InstallShieldre vagy InnoSetupra gondolok.
Vagy mit csinál a telepítő? (Gondolom fájlokat másol valahova, de érdekelne pontosan a működése)
Előre is köszönöm a válaszokat!

(#2747) sztanozs válasza A Gabor (#2746) üzenetére


sztanozs
(PH! addikt)
LOGOUT blog

Ez VB6, VBA vagy VB.NET kérdés?

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...

(#2748) martonx válasza A Gabor (#2746) üzenetére


martonx
(PH! addikt)

Amennyire emlékszek VB.NET-hez magában a Visual Studio-ban tudsz telepítőt létrehozni, ha olyanod lenne.

Én kérek elnézést!

(#2749) sztanozs válasza sztanozs (#2747) üzenetére


sztanozs
(PH! addikt)
LOGOUT blog

VBA-hoz találtam korábban self-updater-t, azt szabtam testre:
[link]

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...

(#2750) vilag


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 Sub

Ezt 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 Sub

Valamit 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?

[ Szerkesztve ]

(#2751) vilag válasza vilag (#2750) üzenetére


vilag
(tag)

Itt találtam:
[link]

[ Szerkesztve ]

(#2752) sztanozs válasza vilag (#2751) üzenetére


sztanozs
(PH! addikt)
LOGOUT blog

Inkább vbscripttel csinálnám - az nem ennyire túlbonyolított: [link]

Persze admin jog kell mind a két megoldáshoz, nem lehet ez a gond nálad?

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...

(#2753) vilag válasza sztanozs (#2752) üzenetére


vilag
(tag)

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.

(#2754) sztanozs válasza vilag (#2753) üzenetére


sztanozs
(PH! addikt)
LOGOUT blog

Szerintem felesleges Windows API-val küzdeni...

VBS simán átültethető VBA-ba:
Public Sub InstallFont()
Dim objShell As Object ' Shell
Dim objFolder As Object ' Folder
Dim objFSO As Object
Dim srcFolder, srcFile

'Ide kell a Font forrás könyvtára
srcFolder = "\\networkserver\sharedfolder\publicfonts"

'Ide kell a font file neve
srcFile = "code128.ttf"

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(srcFolder)
Set objFSO = CreateObject("Scripting.Filesystemobject")

If Not objFSO.FileExists("C:\Windows\Fonts\" & srcFile) Then
Dim objFolderItem As Object ' FolderItem
Set objFolderItem = objFolder.ParseName(srcFile)
On Error Resume Next
objFolderItem.InvokeVerb "Install"
If Err Then
Debug.Print Err.Description
Err.Clear
End If
On Error GoTo 0
Set objFolderItem = Nothing
End If
Set objFSO = Nothing
Set objFolder = Nothing
Set objShell = Nothing

End Sub

[ 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...

(#2755) vilag válasza sztanozs (#2754) üzenetére


vilag
(tag)

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.

(#2756) sztanozs válasza vilag (#2755) üzenetére


sztanozs
(PH! addikt)
LOGOUT blog

Ezzel le tudod kérdezni a memberhip-et:
Function IsMember(userDomain As String, userName As String, groupDomain As String, groupName As String) As Boolean
Dim grp As Object
Dim grpPath As String, userPath As String

grpPath = "WinNT://" & groupDomain & "/" & groupName
Set grp = GetObject(grpPath & ",group")

userPath = "WinNT://" & userDomain & "/" & userName
IsMember = grp.IsMember(userPath)
End Function

Így hívd meg (angol windows-on - magyaron ugye más az Admin Group neve):
IsMember(Environ("userdomain"), Environ("username"), ".", "Administrators")

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...

(#2757) vilag válasza sztanozs (#2756) üzenetére


vilag
(tag)

Köszönöm szépen!

Hétfőn első dolgom lesz, hogy megpróbáljam átültetni a gyakorlatba.

Üdv, vilag

(#2758) vilag válasza sztanozs (#2756) üzenetére


vilag
(tag)

Köszönöm!

Működik a lekérdezés.
Annyit kellett tenni, hogy az "Administrators"-ot "Rendszergazdák"-ra kellett cserélni.

Visszatéréskor True értéket adott, persze most véletlenül sem találtam olyan felhasználót aki nem admin joggal van :)

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Visual Basic
Copyright © 2000-2017 PROHARDVER Informatikai Kft.