Új hozzászólás Aktív témák
-
Ispy
nagyúr
Még egyszer:
ennek így nincsen értelme. Szorozni csak számokat lehet, a textbox értékét meg a text tulajdonsággal tudod lekérni/módosítani.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
TextBox2.Text = TextBox1.Text * TextBox1.Text
End Sub -
Pali79
aktív tag
válasz
Petya25 #2797 üzenetére
Így sem jó valami:
Error 1 Operator '*' is not defined for types 'System.Windows.Forms.TextBox' and 'System.Windows.Forms.TextBox'.Ez lenne a kód:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
TextBox2 = TextBox1 * TextBox1
End Sub -
Pali79
aktív tag
A label az egy üres címke. Az egyik üres címkébe beírva a négyzet oldalhosszúságát, az OK gombot megnyomva a másik üres címkébe beírja az első címkébe beírt szám saját magával szorzásának eredményét. Ez a hibaüzenet:
Error 1 Operator '*' is not defined for types 'System.Windows.Forms.Label' and 'System.Windows.Forms.Label'.
-
Pali79
aktív tag
Sziasztok!
Most kezdtem ismerkedni a VB-vel. Beszereztem a VB 2010 express változatát és egy könyvet ami ugyan a 6-ot mutatja be, gondoltam jó lesz ez is, de valami mégsem stimmel. Nem tudom, hogy a program működésében van különbség vagy én csinálok valamit rosszul.
Szóval a feladat az lenne, hogy készítsek olyan programot ami a négyzet területét kiszámolja. A probléma azzal, hogy az egyszerű matematikai jelekre azt írja, hogy nem ismeri. Tehát amikor leírom neki hogy LABEL2 = LABEL1 * LABEL1 a csillagra azt írja nem ismeri.
Mi a megoldás erre? -
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.
-
Petya25
őstag
válasz
martonx #2785 üzenetére
SQL-ben mindenem kész van amit eddig használtam, de ha nagyon szorulok átmegyek.
2000 lekérdezést nem szívesen írnék át, elsőre a GUI-n próbálnám megoldani az elvárt kimenetet.Ispy
Nem olyan nagy a baj, csak brutál mire mindent legyártok.
Sima riportolás megoldható viszonylag fájdalommentesen csak épp nem a régi megjelenítést adja.
Igazából most pár dolgon vakarózok, timeout (hiába állítom), jelentés fazon ami nincs, pivot és diagram nagyon gáz így hirtelen. Meg majd még a rakás egyedi megoldás amit a formokon eddig használtam....
Esetleg pár gyakorlati tanácsod lenne a dolgaimra? -
Petya25
őstag
-
Petya25
őstag
válasz
Delila_1 #2779 üzenetére
Lehet én nem fogalmaztam még az elején pontosan, nem excelben próbálom megoldani, hanem Visual Studio-val. Meglévő MsSQL táblákból és lekérdezésekből jönnek az adatok.
Mindkét kérdésben én voltam a gyík....
Az elemválasztós problémámra találtam megoldást, a ComboBox-nak adott forrás összes mezője használható szűrőnek nem csak a megjelenített. Meg két külön forrást használtam amit én kevertem el....
És a diagramnál ugyan simán nem lehet rádobni adatot, de a DataSource beállítása után a Series properties-nél az X és Y tagjainak már használhatók az értékek...
Nem mondom, hogy egyszerű, de legalább elég nehézkes.Na most már csak a Pivot fazont kéne kitalálnom, hogy hozom össze, ahol összegzett adatok is vannak.
Köszi a tippeket meg a segítséget.
-
Delila_1
veterán
válasz
Petya25 #2778 üzenetére
A képeken láthatod, hogy az adatokat tartománnyá alakítottam, majd az A2:B10-nek nevet adtam. Ez lett a ComBobox RowSource bemenő tartománya (Munka1!ID_Nev)
A ComboBox ColumnCount értéke 2, ezért látszik mindkét oszlop. Az egyik nevet (Anna) szándékosan 2 ID-hez rendeltem.A név kiválasztásakor a lenti makró beviszi a kívánt értékeket a 2 labelbe.
Private Sub ComboBox1_Change()
Dim sor As Integer
With Sheets(1)
sor = Application.Match(ComboBox1, .Columns(1), 0)
Varos = .Cells(sor, 3)
Fogl = .Cells(sor, 4)
End With
End SubAzt még most sem értem, miért egy diagramról akarsz értékeket bevinni a formra, miért nem abból a tartományból, amiből létrehoztad a diagramot.
-
Petya25
őstag
válasz
Delila_1 #2777 üzenetére
Köszi a választ.
A grafikonnál arra gondoltam, hogy meglévő adatokból nem tudok "felhúzni" adatot a formra. Amíg DataGridView-ra simán ráteszem a táblám/lekérdezésem adatait, a Chart-ra nem tudom. Adatokat hogy tudnék feltenni? A DataSource-nak megadom a formon elérhető lekérdezést, de a Series properties-nél már nem tudom a kívánt oszlopokat elérni.
Na a második válaszodat én nem értem.
Sorszámot ugyan tudnék választani egy listából (pl 1, 2, 3) de abból hogy lesz névsor esetén Lacika. User nem tudja mi a sorszám mögötti név előre. Ez alapján tudnék egy olyan lekérdezést készíteni ahol mint paraméter felhasználnám a nevet (bár ez nem túl szép mert mi van ha két lacika van, viszont listázható) és mint szűrő adnám a formnak. Az jobb lenne, hogy ugyan nevet listáznék de a mögötte lévő ID-vel együtt tudnám kiválasztani, ahol az ID mehetne láthatatlanul a szűrőbe. Accessben ez sima ügy volt. Egyelőre ilyet nem találtam, még csak ismerkedem vele. -
Delila_1
veterán
válasz
Petya25 #2776 üzenetére
1. A grafikonos kérdést nem értem.
2. Teszel a formra egy textboxot, ahol megadod a rekord sorszámát. Mivel az itt megadott érték szöveg típusú (ezért hívják textboxnak), át kell alakítanod számmá – pl. hozzáadsz 0-t, vagy szorzod 1-gyel. Ezután már beírhatod a form objektumaiba a cells(sorszám, oszlop) értékeket.
-
Petya25
őstag
Sziasztok
Lenne két láma kérdésem.Studioban a táblázatos adatokat simán fel lehet húzni egy formra akár paraméterekkel szűrve is, addig grafikonon nem akaródzik összejönni. Annak valami trükkje van? Nem tudok ráhúzni adatot.
[link]Meg ha feltettem adatmezőket az adatforrásból egy formra csak a rekord léptetőkkel tudok köztük mászkálni. Ehhez egy comboboxot használnék, ahol rögtön a kívánt rekordra lehet ugrani. Ezt itt meg lehet oldani?
[link]köszönöm
-
Ispy
nagyúr
válasz
BigBadPlaYeR #2774 üzenetére
Form.LocationChanged eventel kell játszani.
-
BigBadPlaYeR
senior tag
Üdv!
A Combobox-os végül elengedtük, máshogy oldottuk meg az adatok beírását.
Viszont a Datatable-től villám gyors lett a GridView! Köszönöm az ötletet!Lenne egy másik kérdésem is:
VB.net-ben hogyan lehet megoldani, hogy két user form "egymáshoz tapadjon"? Van egy Main form, amiről több kiegészítő formot lehet indítani. Amikor a Form2 indul, egyből a Main Form mellett jelenik meg, eddig ok. Azt szeretném, ha mozgatom a main form-ot, akkor a form2 is mozduljon vele (az már csak a hab lenne a tortán, ha fordítva is működne). -
BigBadPlaYeR
senior tag
Azzal még nem próbálkoztam. Bár nem tudom, hogy arra hogyan fog reagálni, hogy az első 4 oszlop függvényében változik az 5-6. oszlopban lévő ComboBox-ok tartalma (sőt, a 6. Combobox tartalma még az 5. oszlopban lévő értéktől is függ).
Ez lesz a következő akkor, köszönöm az ötletet!
-
Ispy
nagyúr
válasz
BigBadPlaYeR #2769 üzenetére
És ha csinálnál inkább egy datatable-t, azt feltöltöd és utána megadod a gridnek, DataSource=DT.
-
Delila_1
veterán
válasz
BigBadPlaYeR #2769 üzenetére
A helyfoglalásokat (Dim) a ciklus elé írd, és csak a nevük és típusuk szerepeljen ott.
Dim ConfigName As String, PartNo As String, Description As String
A ciklusban már csak értéket adj ezeknek:
ConfigName = myConfigsList.Item(i)
PartNo = swActiveModel.CustomInfo2(myConfigsList.Item(i), "PartNo")stb.
-
BigBadPlaYeR
senior tag
Üdv!
VB.NET-ben készítek a kollegámmal egy kiegészítőt egy CAD-programhoz. Adatokat akarunk megjeleníteni egy DaraGridView-ban (CustomInfoDataGrid néven fut a kódban). Ott van a probléma, hogy amikor a CAD-ből kiolvasott adatokat fel akarom tölteni a sorba, az késleltetéssel megy végbe. Bizonyos számú lépésen még túl kell mennie, mire ténylegesen megjelenik az új sor az adatokkal.
For i As Integer = 0 To (myConfigsList.Count - 1)
' Változók behívása az aktuális config-ból
Dim ConfigName As String = myConfigsList.Item(i)
Dim PartNo As String = swActiveModel.CustomInfo2(myConfigsList.Item(i), "PartNo")
Dim Description As String = swActiveModel.CustomInfo2(myConfigsList.Item(i), "Description")
Dim Finish As String = swActiveModel.CustomInfo2(myConfigsList.Item(i), "Finish")
@ Dim Jelleg As String = swActiveModel.CustomInfo2(myConfigsList.Item(i), "Jelleg")
' Aktuális DataGrid sorhoz infók hozzáadása
Debug.Print("----PrepareDataGridView - AddRowKezd")
# CustomInfoDataGrid.Rows.Add(ConfigName, PartNo, Description, Jelleg) 'MaterialValue, Finish)
Debug.Print("----PrepareDataGridView - AddRowVége")
Next iA #-el jelölt sorban van a parancs, hogy adja hozzá a sort az adatokkal. De ez nem történik meg, egészen addig, amíg a következő loop-ban el nem ér a @-al jelölt sorig. Ez alapból nem lenne baj, csak az értékek függvényében a további oszlopok más-más értéket kapnának. És amíg nincs kitöltve az összes érték, a következő folyamat hibára fut.
Van valakinek ötlete, hogy ez így normális, vagy a kódunkban van valami hiba? Valahogyan azonosítani kellene, hogy mikor töltötte fel az új sort. Próbáltam az idővel is játszani, beállítottam a végén már 10 másodperces várakozást is, de egészen addig nem jelent meg a sor, amíg a @-al jelölt elemhez nem ér a program.
Előre is köszönök minden ötletet!
-
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. -
Delila_1
veterán
válasz
csaszizoltan #2766 üzenetére
Dim sor As Variant
sor = Application.Match("keresett_érték", Columns(1), 0)
If VarType(sor) = vbError Then
MsgBox "Nem szerepel az A oszlopban a keresett érték", vbCritical, "Hiba"
On Error GoTo 0
Exit Sub
End IfFontos, hogy a változót, aminek az Application.Match függvénnyel akarsz értéket adni, Variant típusúként deklaráld.
-
csaszizoltan
csendes tag
Keress rá az alábbira:
vba run time error 1004 tulajdonsága nem érhető el
és az alábbi találat:
Excel(VBA) Miért nem működik a .Match parancs?
idézet belőle:
"Azért, mert ha nincs" (itt: találat) ", akkor hibát generál."Értem én, hogy az On Error-nak el kéne kapnia a nem talált eseteket, de hátha a találaton lévő
On Error Resume Next
változat megoldja.Elképzelhető még a hiba okára a változók deklarációjának (Dim) elmaradása.
Másrészt az eső sorba írt
Option Explicit
-tel fordítási időben szűrhetünk hibákat. -
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!
-
Delila_1
veterán
Elég ennyi:
With Selection
.BorderAround LineStyle:=xlContinuous, Weight:=xlThin 'körbe
.Borders(xlInsideVertical).Weight = xlThin 'belső függőleges
End WihtA stílust és a színt nem kell külön megadni, mert így az alapértékek lesznek érvényesek (xlContinuous és xlAutomatic)
-
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? -
sztanozs
veterán
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")
-
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. -
sztanozs
veterán
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 -
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?
-
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! -
dWan
tag
válasz
Delila_1 #2741 üzenetére
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) -
dWan
tag
válasz
Delila_1 #2735 üzenetére
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.
-
dWan
tag
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
-
Delila_1
veterán
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
-
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...
-
Amiens
tag
válasz
sztanozs #2721 üzenetére
Köszönöm szépen!
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... -
Amiens
tag
válasz
sztanozs #2719 üzenetére
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 -
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
-
-conrad-
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
-
Ferenc.
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 koraSok sikert mindenkinek a továbbiakban!
-
martonx
veterán
válasz
Ferenc. #2709 üzenetére
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
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
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
é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.
-
Ferenc.
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!
-
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ázatbanPé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őbenElőre is köszönöm a segítségeteket.
-
Delila_1
veterán
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.
-
bundli
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
100-as tartomány, ahol kettesével össze vannak vonva a cellák, bennük tartalommal. Ezt hogyan lehet törölni?
-
bundli
tag
válasz
Delila_1 #2700 üzenetére
Köszi, ez azóta megoldódott!
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
Új hozzászólás Aktív témák
Hirdetés
- BESZÁMÍTÁS! Apple Mac mini 2024 M4 16GB 256GB SSD számítógép garanciával, hibátlan működéssel
- BESZÁMÍTÁS! HP Elitebook 840 G11 üzleti notebook - Intel Core Ultra 5 135U 16GB DDR5 RAM 256GB W11
- LG Ultragear 27GN60R (fekete szín)
- Azta! Dell Latitude 7440 -65% "Kis Gamer" Üzleti Profi Ultrabook 14" i7-1370P 16/512 FHD+ IRIS Xe
- Lenovo Thinkpad X280, 12,5" FHD IPS Touch , I5-8350U CPU, 8GB DDR4, 256GB SSD, W11 ( olvasd végig )
- ÁRGARANCIA!Épített KomPhone i5 13400F 32/64GB RAM RTX 4060 Ti 8GB GAMER PC termékbeszámítással
- ÁRGARANCIA! Épített KomPhone i5 10600KF 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
- Motorola E40 64GB, Kártyafüggetlen, 1 Év Garanciával
- BenQ PD-3200-U Monitor - Designer 4K 32"
- BANKMENTES részletfizetés Noblechairs HERO RL valódi bőr Gamer Szék
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest