- D1Rect: Nagy "hülyétkapokazapróktól" topik
- lezso6: Nem látszik a kurzor Chrome alatt a beviteli mezőkben?
- Lalikiraly: SÜNI energiaital.
- gban: Ingyen kellene, de tegnapra
- user2: Kia Ceed Gold 160 1.5 T-GDI MY2024
- sziku69: Fűzzük össze a szavakat :)
- Elektromos rásegítésű kerékpárok
- Gurulunk, WAZE?!
- eBay-es kütyük kis pénzért
- bambano: Bambanő háza tája
Új hozzászólás Aktív témák
-
ArchElf
addikt
válasz
Cpt. Flint #1499 üzenetére
Amúgy VB6, vagy VB.NET?
Általánosságban - kicsit olvasgassál még a változók hatóköréről...
1. Hiába teszed publiccá, a függvény újra létrehozza változót és az felülcsapja (érvényességben) a globálisan létrehozott azonos nevű változót. A függvénynek át kell adni a változót. A globális változók használatát meg el kell felejteni.
2. Ha megnézed a függvény paramétereit, ott van deklarálva a változó. A függvényt meg úgy hívod meg, hogy:
csakszam TextBox1, KeyCode
ActiveControl - le kell ellenőrizni, hogy az aktuális ActiveControl TextBox-e és csak akkor kell lefuttatni a függvényt.
3. ez inkább csak hack... de azért nem rossz. De gondolom vágólap meillesztésre nem működik.
4. MaskedTextBox: vb6, vb.net
(bocs,. vb6 alatt MaskedEdit)AE
-
Cpt. Flint
tag
válasz
ArchElf #1498 üzenetére
szóval, itt több rendbeli félreértés van.
1. maga a KeyCode úgy tűnik, nem vihető át, mert rendszerváltozó, hiába teszem public-ká, akkor is üres lesz, amint másik sub-ba ugrok. természetesen tudom, hogy egy felhasználói publikus változóba kiíratva átvihető, alkalmaztuk is, csak reménykedtünk, hátha mégis lehet az eredetit használni, merthogy úgyis azt kínálja fel a rendszer, mikor egy új keydown subot létrehozol. megspóroltunk volna egy saját változót, meg minden ilyen subban egy plusz sort.
2. honnan jön a tb változó? mert mi pont azt szeretnénk megspórolni, hogy minden keydown subban konkrétan (az adott vezérlő nevével/indexével) értéket kelljen neki adni. mivel ez esetben ez a rész mindegyik subban eltérő lesz, azaz nem lehet simán másolni, oda kell figyelni.
magyarul én a set tb=TextBox1 helyett a set tb=ActiveControl kifejezést szeretném használni, mert ez univerzális. csakhogy nem működik, mert az ActiveControl a VB szerint nem a TextBox1, amiben épp kavarok, hanem a MultiPage1. ez a problem.
3. A "Locked"-nek az az értelme, hogy így egyszerűen nem íródik be a textboxba a hibás karakter, és passz, megy tovább.
4. "Changed" az mi? Én nem találom. Ha a "Change"- re gondolsz, akkor azért a KeyDown-ból megy az egész, és nem a Change-ből, mert a KeyDown még a karakter megjelenése _előtt_ lefut, a Change meg csak utána (tehát ott már csak törölni tudnék).masked textbox hogy megy? a Format()-ra gondolsz?
-
ArchElf
addikt
Átvihető, csak át kellene adni neki.
A változók a VB-ben nem globálisak (hacsak nem annak lettek definiálva), a hatókörük csak az adott szerkezetre (szubrutinra, osztályra) vonatkozik.
így add át neki:
Sub csakszam(tb As TextBox, kc As Integer)
'8: backspace, 9: tabulátor, 13: enter, 17: Ctrl, 32: space, 46: delete, 48-57: felső számok, 86: v, 96-105: numpad számok, 109: numpad mínuszjel, 110: numpad pont, 186: é, 187: ó,
'188: vessző, 189: kötőjel, 190: pont, 191: ü, 192: ö, 219: ő, 220: ű, 221: ú, 222: á, 226:í
If kc = 8 Or kc = 46 Or _
(kc >= 48 And kc <= 57) _
Or (kc >= 96 And kc <= 105) Then
tb.Locked = False
Else
tb.Locked = True
End If
End SubAmúgy miért locked, ennek így semmi értelme nincs???
Én inkább a Changed-et használnám és megvizsgálnám, hogy az összes karakter érvényes-e (vagy egyszerűen használnék masked textbox-ot)...
AE
-
vilag
tag
Üdv!
Újabb fogós kérdés merült fel.
Egy multipage egyik lapján egy különböző frameeken belűl vannak nekem egy vezérlőim.
A vezérlőkbe beírható karaktereket szeretném korlátozni. Mivel egy részüknél ugyan az a korlátozás szükséges (vagyis csak számok írhatóak be), subrutinná tettem egy eddig vezérlőnként alkalmazott eljárást.
Sub csakszam()
'8: backspace, 9: tabulátor, 13: enter, 17: Ctrl, 32: space, 46: delete, 48-57: felső számok, 86: v, 96-105: numpad számok, 109: numpad mínuszjel, 110: numpad pont, 186: é, 187: ó,
'188: vessző, 189: kötőjel, 190: pont, 191: ü, 192: ö, 219: ő, 220: ű, 221: ú, 222: á, 226:í
If 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 SubA vezlőnél pedig ez van megírva:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 'Ügyirat alszámba csak számot enged írni
csakszam
End SubGondolom sejtitek, hogy ez így nem működőképes (vagyis nem általánosságban), különben nem írtam volna.
Gondoltam könnyen általánossá tehető a dolog egy huszárvágással, mert a "Textbox1" helyére egyszerűen bevezetek egy változot, amely mindig az aktuális vezérlő nevét helyettesíti.
Azonban úgy nem működőképes a dolog.
Egyik okát tudom: a KeyCode "rendszerváltozó" tartalma nem vihető át egy másik rutinba csak egy változón keresztül (mondjuk azt nem értem miért nem tehető a KeyCode rendszerváltozó egyszerűen publikussá, erre is várok valami okosat ha lehet). Ezt még meg is oldottam.NADE, azt mondja meg valaki, hogy hogyan lehet kinyerni, hogy melyik az aktív vezérlő????
Mert ugyan is ha beteszem mondjuk, hogy:Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 'Ügyirat alszámba csak számot enged írni
x=ActiveControl
csakszam
End Subakkor az x értéke furcsa módon nem az lesz, hogy "Textbox1", hanem az, hogy "Multipage1".
Pedig a súgója azt állítja, hogy az aktív vezérlő nevét adja eredményül, már pedig én erősen a Textbox1-ben buzerálódom.
Várom a megoldási javaslatokat, esetleg konkrét kódrészlettel is.
Az is érdekelne (ahogy fentebb is írtam, hogy ha meg tudja mondani valaki), hogy a KeyCode rendszerváltozó miért nem tehető publikussá.Köszönöm a segítségeteket!!!!!!!
-
martonx
veterán
válasz
öcsi-bácsi #1494 üzenetére
Írsz egy word makrót. Ez a makró az alábbiakat fogja csinálni:
1. létrehoz egy excel fájlt, amiben minden futásakor frissíti access-ből az adatokat.
2. elindítja megfelelően felparaméterezve a körlevél generálótEnnyi. A 2-es pontra pont itt feljebb találsz példa makrót, az 1-es pont se olyan nagy kaland. Egyébként a word körlevél varázslója milyen adatforrásokat fogad el? Csak excel? (Az itthoni gépemen bevallom LibreOffice van, így nem tudom megnézni
)
-
öcsi-bácsi
csendes tag
Sziasztok!
Accses lekérdezés adatait szeretném world körlevélbe illeszteni.
Van ötletetek, hogyan tehetném meg?
Akár VB, akár acces jelentés formája érdekelne. -
#90999040
törölt tag
válasz
öcsi-bácsi #1491 üzenetére
Pontosan ezekről beszéltem. Ezt a kódot így is meg lehetne csinálni:
Sheets("munka1").Select
pass = "123456789"
Sheets("munka2").Unprotect pass
Sheets("munka1").Range("a1").Copy Destination:=Sheets("Munka2").Range("A1")
Sheets("munka2").Protect Password:=passEz pontosan azt csinálja, amit a Tiéd, csak nem 11, hanem 5 sorban.
Újra kihangsúlyozom: VBA-ban a Select és az Activate használatát csak elkerülhetetlen esetben célszerű használni, így a legtöbb esetben az Application.ScreenUpdating használata is feleslegessé válik(kivéve, ha az aktív munkalapra másolsz nagy mennyiségű adatot), valamint a kód is áttekinthetőbb. -
öcsi-bácsi
csendes tag
válasz
öcsi-bácsi #1490 üzenetére
megtaláltam:
Sub rög4()
'minta védelem feloldására
Sheets("Munka2").Select
'azért kell először feloldani a védelmet, mert a kijelölés munka1!a1 megszűnik
pass = "123456789"
ActiveSheet.Unprotect pass
'most lehet másolni!
Sheets("munka1").Select
Range("a1").Select
Selection.Copy
Sheets("Munka2").Select
Range("A1").Select
ActiveSheet.Paste
'majd rátenni a védelmet!
ActiveSheet.Protect Password:=pass
Sheets("munka1").Select
End Sub -
öcsi-bácsi
csendes tag
válasz
#90999040 #1489 üzenetére
Köszi, rendes vagy.
Közben találtam egy megoldást:
'visszhang kikapcs
Application.ScreenUpdating = False
"makró fut"
Application.ScreenUpdating = TrueAmi viszont közben kérdésessé vált: adatokat másolok egy űrlapról makróval, egyik excel lapról a másikra, viszont szándékaim szerint a második lap egyfajta adatbázis lesz, amit ellátnék lapvédelemmel. Viszont a makróm természetesen megáll, ha a második lap védelmét bekapcsolom.
Kérdésem: hogyan másolhatna a makróm mégis ide adatokat? -
#90999040
törölt tag
válasz
öcsi-bácsi #1488 üzenetére
Másolás közben kerüld a Select és az Activate használatát!!!
Dim munkalap As String
munkalap = "munka1"
Worksheets(munkalap).Range("a1:c3").Copy _
Destination:=Worksheets(munkalap).Range("e1")Ha a másolás után a célterületet szeretnéd aktívan látni, akkor arra add ki a Select-et.
-
öcsi-bácsi
csendes tag
Sziasztok!
Szeretném, ha a makróm futása közben nem mutatná az oldalakat ahonnan adatokat másol, csak a végeredményt!
Biztosan van rá valami utasítás,csak még kezdő vagyok.
Előre is köszi.
-
#90999040
törölt tag
válasz
Cpt. Flint #1486 üzenetére
És a másik alkalmazás VBA utasításkészletét is? Tehát levezényelhetném az excelből (DDEExecute nélkül) a körlevélkészítést a MailMerge-vel valami módon?
Természetesen. A legegyszerűbb, ha az excel vba referenciáihoz hozzáadod a "Microsoft Word x.y Object Library"-t. Ez után már használhatod pl. így(vilag #1472-es hozzászólása alapján):
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Set wrdApp = CreateObject("Word.Application")
With wrdApp
.Visible = True 'látszik a word alkalmazás
Set wrdDoc = .Documents.Open(".doc fájl neve") 'megnyitja a word documentumot
.ActiveDocument.MailMerge.MainDocumentType = Word.wdFormLetters
.ActiveDocument.MailMerge.OpenDataSource Name:=".xls fájl neve", _
LinkToSource:=True, _
Format:=Word.WdOpenFormat.wdOpenFormatAuto, _
Connection:="Munka1$", _
SQLStatement:="SELECT * FROM `Munka1$`"
With .ActiveDocument.MailMerge
.Destination = Word.wdSendToPrinter
.SuppressBlankLines = False
With .DataSource
.FirstRecord = 14
.LastRecord = ig2 'saját változó
End With
.Execute Pause:=False 'Mailmerge futtatása
End With
End With
'wrdDoc.Close 'documentum bezárása
'wrdApp.Quit 'word bezárása
'takarítás
'Set wrdApp = Nothing
'Set wrdDoc = Nothing -
Cpt. Flint
tag
válasz
#90999040 #1482 üzenetére
Engem igazán az izgatna, hogy változót hogy tudok átadni mondjuk excelből wordbe.
Mert itt a legnagyobb problémánk az volt, hogy a körlevél rekordszám az excelben megfelelő programrésszel meghatározott/szűrt sorok száma kell legyen, de ezt a változót csak az excel tábla egyik cellájából bírtuk kibányászni Wordből indított DDE hívással, ami egy baromi körülményes és vacak megoldásnak tűnik nekem:
lngChannel = DDEInitiate(App:="Excel", Topic:="akarmi.xls")
ig2 = DDERequest(Channel:=lngChannel, Item:="r11c17")
Application.DDETerminateAll
Többek között ez csak a "Munka1" lapról szed, én nem tudtam elérni, hogy más munkalap legyen a forrás, aztán csak a R1C1 stílusú hivatkozás működött; illetve ha nem volt látható a hivatkozott cella (mondjuk el volt rejtve vagy össze volt csukva az adott sor v. oszlop), akkor valami nem jó értéket adott vissza (karakterként négyzet, chr$-ként talán 13?).
Sajnos a DDERequestről eddig nem sikerült normális (a VBA helpnél bővebb) leírást találnom, úgyhogy nem is vagyok tisztában vele, hogy esetleg valami más, értelmesebb, kezelhetőbb formában használható-e. -
martonx
veterán
válasz
Zsargon89 #1481 üzenetére
VB.Net tud alapból mindenféle Serial Portot kezelni.
Az USB pedig nem más mint Universal Serial Bus, azaz egy serial port.
Még nagy guglizás sem kell hozzá, msdn-en egész jó példák vannak.
A kódod esetében már múltkor is pedzegettem, hogy nincs szükség benne a winapi hivatkozásokra.http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx#Y0
-
#90999040
törölt tag
Ha az Excel VBA Tools >> References résznél hozzáadod a Microsoft Word x.y Object Library-t, akkor használhatod a Word objectumait.
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
Set wrdDoc = wrdApp.Documents.Add
'wrdDoc.Close
'wrdApp.QuitEz Excelből elindít egy word alkalmazást, hozzáad egy dokumentumot, és ha az utolsó 2 sor elejéről kiveszed az aposztrofokat, akkor be is zárja.
Persze lehetne a referencia hozzáadása nélkül is, akkor viszont a Word.Application és a Word.Document helyett Object-eket kellene írni.Természetesen a word-ből is lehet az excel objektumait használni.
Csak mint írtam, ekkor alapból nem "ismerik fel" a másik alkalmazás konstansait. ezért kell ezeket külön definiálni, mert különben teljesen mást csinál a kód, mint amit szeretnénk...
-
Zsargon89
csendes tag
Sziasztok!
Itt van egy program kód, és ezt szeretném megcsinálni, hogy ne LPT-n hanem USB-n tudjam használni. Ezt hogy tudom megtenni? milyen dll-t töltsek le? s milyen parancsokkal tudom ki be kapcsolni? -esetleg ha veszek egy USB to LPT átalakítót, akkor működne a jelenlegi program? maradna az LPT port címe ugyan ez?
(Olyan laptopon kéne lefuttatni ezt a progit, amiben nincs PLT port)Választ előre is köszönöm!
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Sub PortOut Lib "io.dll" (ByVal Port As Integer, ByVal Value As Byte)
Public Declare Function PortIn Lib "io.dll" (ByVal Port As Integer) As ByteSub TEST()
Dim x As Long
Dim y As Long
Dim v As Long
Dim c As Long
kezdes:
v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- 6 számjegyű számláló" & Chr(13) & Chr(10) & "2- 7 számjegyű számláló")If v = 1 Then GoTo sz1
If v = 2 Then GoTo sz2
If v <> 1 Or 2 Then GoTo kezdessz1:
v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")If v = 1 Then GoTo elso1
If v = 2 Then GoTo masodik1
If v <> 1 Or 2 Then GoTo sz1elso1:
x = InputBox("Írja be a bepörgetni kívánt értéket!")
For i = 1 To x
Call PortOut(888, 1)
Sleep 1
Call PortOut(888, 0)
Sleep 1
Next
GoTo vegemasodik1:
x = InputBox("Írja be a jelenlegi számlálóállást!")
y = InputBox("Írja be az elérni kívánt számlálóállást")
c = (y - x)
If (x > y) Then c = ((999999 - x) + 1 + y)
For i = 1 To c
Call PortOut(888, 1)
Sleep 1
Call PortOut(888, 0)
Sleep 1
Next
MsgBox (c)
GoTo vegesz2:
v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")If v = 1 Then GoTo elso2
If v = 2 Then GoTo masodik2
If v <> 1 Or 2 Then GoTo sz1elso2:
x = InputBox("Írja be a bepörgetni kívánt értéket!")
For i = 1 To x
Call PortOut(888, 1)
Sleep 1
Call PortOut(888, 0)
Sleep 1
Next
GoTo vegemasodik2:
x = InputBox("Írja be a jelenlegi számlálóállást!")
y = InputBox("Írja be az elérni kívánt számlálóállást")
c = (y - x)
If (x > y) Then c = ((9999999 - x) + 1 + y)
For i = 1 To c
Call PortOut(888, 1)
Sleep 1
Call PortOut(888, 0)
Sleep 1
Next
MsgBox (c)
GoTo vegevege:
MsgBox ("SZÁMLÁLÓ BEÁLLÍTVA" & Chr(13) & Chr(10) & "TOVÁBBI JÓ MUNKÁT!")
End Sub -
vilag
tag
válasz
#90999040 #1473 üzenetére
Bocs, de nekem ez nem eléggé világos (ez mondjuk az én hibám). Megtennéd, hogy részletezed kicsit?
Elmondanád, hogy a fenti problémát hogyan oldanád meg ezzel a módszerrel?
Mert ugyan most működik, de ha lehet akkor egyszerűsítek rajta, plusz a módszer ismerete biztosan nem fog káromra válni.Köszi!
-
Brown ügynök
senior tag
válasz
Brown ügynök #1478 üzenetére
Az a lényeg, hogy a-t behelyettesítve mindig negatív oldalról közelít a 0-hoz, b-t behelyettesítve pedig pozitív oldalról.
-
Brown ügynök
senior tag
válasz
Brown ügynök #1476 üzenetére
Itt lesz a megoldás elrejtve: [link] Azt szeretném kérdezni, hogy az első példában mikor helyettesítünk"a"-ba és mikor "b"-be?
-
martonx
veterán
válasz
Brown ügynök #1476 üzenetére
egyedül a pénzáram nem érthető számomra, a többi szimpla matematikai műveleteket jelent a kamatlábbal.
-
ArchElf
addikt
válasz
Brown ügynök #1474 üzenetére
Annuitásos módszernek van leírása, vagy matematikai modellje (kell hogy legyen)...?
AE
-
Brown ügynök
senior tag
Annuitásos módszerrel ki kell számolnom a hitel törlesztőrészletet egy adott futamidőre. Ez excelben a célérték kereséssel könnyen megoldható. Azonban nekem úgy kell megírnom a programot, hogy excel beágyazás ne legyen benne.
Addig sikerült eljutni, hogy ha a kintlévőség a futamidő végére nem nulla akkor case select állapotokkal meghatározom, mennyit korrigáljon (mennyit adjon hozzá / vegyen el) a törlesztőrészleten. Pl:
Select Case kintlévőség
Case 500 To 1000
törlesztő += 0.1
stb.Ez így baromi hosszú programkódot eredményez. Ezt kellene nekem valami matematikai összefüggés segítségével redukálnom. Bármilyen konstruktív ötletet jöhet, pl. segítenétek megérteni, hogyan is működik a goal seek fv. az is nagy segítség lenne (azt hiszem).
-
#90999040
törölt tag
ezt kell a kívánt Word doksiba, vagyis a célfájlba írni
Ha a Word konstansait definiálod az Excelben, akkor Excelben is használható.
Az Excel ugyanis alapból nem tudja a Word konstansait. Pl.:Const wdSendToPrinter = 1
Ezeket az értékeket meg tudod nézni Wordben úgy, hogy kiiratod őket. Pl.:
Debug.Print wdSendToPrinter
-
vilag
tag
válasz
martonx #1466 üzenetére
Hali!
Megoldódott a probléma!
A kód (ezt kell a kívánt Word doksiba, vagyis a célfájlba írni):
ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
ActiveDocument.MailMerge.OpenDataSource _
Name:="xyz", _ 'forrásfájl helye
LinkToSource:=True, _
Format:=wdOpenFormatAuto, _
Connection:="Munka1$", _
SQLStatement:="SELECT * FROM `Munka1$`"
With ActiveDocument.MailMerge
.Destination = wdSendToPrinter
.SuppressBlankLines = False
With .DataSource
.FirstRecord = 14
.LastRecord = ig2 'saját változó
End With
.Execute Pause:=False
End WithNeház szülés volt, de meglett!!!
-
neo446
csendes tag
Sziasztok!
Excel bajom van és hátha tud valaki segíteni.
A feladat az lenne, hogy egy adott összeghez meg kell határoznom az utalási költséget.
Vagyis van A-B-C oszlopom, és ebben fel vannak sorolva az értékhatárok és hogy mennyi az utalási költség.
A,B,C
0,100,5
101,300,50
301,500,100
501,1000,150
1001,2000,200
stb...
Egy olyan függvényre lenne szükségem, aminek mondok egy utalandó összeget ezt összeveti az A-B oszlopokkal és visszaadja a C oszlopban szereplő utalási költséget.
Logikai függvényekkel próbáltam megoldani, de sajnos túl sok sort kell vizsgálni/felsorolni és szegény excel besokal tőle.
Köszönöm a segítséget előre is! -
Senki9876
tag
Egy VB programozóra lenne szükségem aki tudna segíteni egy VB ben írt program átalakításában.
Ha valakinek lenne ideje segíteni, rám írhatna.
Előre is köszönöm a segítséget. -
martonx
veterán
hopsz a munkalap választásra megvan a válasz, gugli a barátod
Tedd bele az OpenDataSource-ba, hogy : Connection:="Munka1"
Ennek analógiájára, lehet lenne valami Headers:=true is vagy ilyesmi. Ez utóbbi csak ötlet volt. Ááá a HDR:=YES; mintha pont ezt jelentené.OpenDataSource Name:="C:\Documents\Names.xls", _
ReadOnly:=True, _
Connection:="Sales"Szóval akkor nem a header-rel lesz bajod, hanem a munkalap kiválasztásával.
Esetleg még egy próba lehetőség letiltani a felugró ablakokat, ilyenkor hátha csöndben a háttérben megcsinálja? Application.DisplayAlerts = false
-
vilag
tag
válasz
martonx #1463 üzenetére
Ezeken már túl vagyok, de a wordben rögzített makrót nem tudom maradéktalanul átfordítani excelbe, mert nem egészen értem minden részét, de valaki ebben segít akkor lehet, hogy meg is oldódik a probléma. Alább a rögzített makró:
Sub
ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
ActiveDocument.MailMerge.OpenDataSource Name:= _
"V:\Postakönyv\nyomtatas.xls", ConfirmConversions:=False, ReadOnly:=False _
, LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:= _
"", Revert:=False, Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=V:\Postakönyv\nyomtatas.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type" _
, SQLStatement:="SELECT * FROM `Munka1$`", SQLStatement1:="", SubType:= _
wdMergeSubTypeAccess
End SubAddig eljutottam, hogy az "SQLStatement" adja meg a munkalapot, de még így is megáll (gondolom azért mert nem tudtam megadni a fejléc van/nincs-re a választ. Szóval az ablak így is feljön, a különbség csupán az, hogy nincs egyetlen egy kiválasztható munkalap sem a listán.
Sejtem, hogy a Extended Properties=""HDR=YES kell nekem, de nem tudom úgy megírni az excelben, hogy az eljáráshíváskor az is átkerüljön.
-
Brown ügynök
senior tag
válasz
Brown ügynök #1460 üzenetére
1. Ha a sorszám = 0 akkor kiíródnak az alapadatok.
2. A Next előtt, miután hozzáadtuk az aktuális sort megvizsgáljuk a szükséges cella értékét. Ha nem 0 akkor változtatunk a szükséges értékeken.
3. Me.DataGridView1.Rows.Clear()
-
vilag
tag
Hali!
Számomra megoldhatatlannak tűnő problémába ütköztem.
Arról lenne szó, hogy van nekem egy postakönyv.xls táblám. Ebben tárolom soronként az adott levélhez tartozó értékeket. Ez a tábla szolgál adatbázisként egy (illetve több) wordfájlhoz (mint boríték és tértivevény sablon).Azt szeretném elérni, hogy a postakönyv mentése után ne kelljen azt bezárnom és a kívánt wordfájlt elindítva (a már korábban csatolt postakönyv.xls-t sql futását engedélyezve) nyomtatnom.
A cél az lenne, hogy a postakönyvből userform segítségével tudjam meghatározni, hogy melyik word fájlt indítsa el (természetesen csak a háttérben) és mettől meddig terjedő tételeket nyomtassa ki.
A megoldás már félig megvan. Odáig eljutottam, hogy az excellel elindítom a kívánt wordfájlt, majd hozzácsatolom a postakönyv.xls-ből kiexportált (ez a rész is megírva) nyomtatas.xls-t.
Léptetésben működik is a dolog, egyedül ott akad meg a dolog, hogy rákérdez, hogy az adatbázis tábla melyik lapját kívánom csatolni és az eslő sora oszlopfejléceket tartalmaz e.
Azt szeretném elérni, hogy ez ne akassza meg a folyamatot és ne legyen rákérdezés, hanem az előre definiált lapot csatolja és az első sor oszlopfejléceket tartalmazzon.
Eddig a programkód:
channelnumber = Application.DDEInitiate(app:="WinWord", topic:=op1)
Application.DDEExecute channelnumber, "[fileopen .name=""V:\Postakönyv\00-TV_sablon_(16,5x10,6_cm)1.doc""][mailmergeopendatasource .name=""V:\Postakönyv\nyomtatas.xls"" ][mailmergeopendatasource .SQLStatement:=SELECT * FROM `Munka1$`][mailmerge .destination=1, .mergerecords=1, .from=14, .to=" + ig + ", .mailmerge][appclose ""word""]" '[FILEPRINT .range=0]" '[appclose " + Chr(34) + "word" + Chr(34) + "]" '[toolsoptionssave .globaldotprompt=0]Ahol op1 = "V:\Postakönyv\00-TV_sablon_(16,5x10,6_cm).doc"
ig = Trim(Str(hanysor + 13))
ahol:
hanysor= hány tételt kell nyomtatniElőre is köszönöm a segítséget!
-
Brown ügynök
senior tag
Lenne egy problémám, amivel már sokat foglalkoztam de nem akar összejönni a megoldás...
Cél: Azt szeretném elérni, hogy a Do Loop Until ciklus addig futtassa a For Next ciklust, amíg a For Next ciklus végére az egyik cella értéke el nem éri a nullát.
A For Next lefutása esetén annyi történik, hogy a DataGridView-hoz hozzáadódik egy újabb sor, bizonyos számított értékekkel. Ezt egészen addig teszi amíg a futamidő tart (pl. 12 hónap, 12 sor). Igen ám, de a 0. sorban szeretném megjeleníteni a kiinduló értékeket, (tehát összesen 13 sor jelenne meg ) Hogy lehetne ezt megoldani?
Következő kérdés: A Do Loop Until-nak addig kellene futnia, amíg For Next ciklusban a ciklus végére az egyik oszlop értéke 0 nem lesz. Tehát valahogy érték változásokat kellene rögzítenem, mielőtt újból lefut a For Next. Hol változtassam meg az értéket, hogy a For Next a megváltozott értékekkel fusson?
És egy utolsó kérdés. Amikor a For Next lefutott ( 13 sor ), hogyan tudom eltüntetni ezeket a sorokat és a legközelebbi számításnál, újra csak 13 sort megjeleníteni?
Nagy segítség lenne.
-
Brown ügynök
senior tag
válasz
Brown ügynök #1458 üzenetére
Sikerült így megoldani:
Private Sub Szamolas() Handles btnCalculate.Click
Dim DatumCH As Date
Dim Datum As String
Dim Hitel As Int32
Dim DG As New DataTable()
Dim lRow As New DataGridViewRow
DatumCH = DateTimePicker1.Value
Datum = DatumCH.ToString()
Hitel = NumericUpDown1.Value
Dim Cell1 As New DataGridViewTextBoxCell
Cell1.Value = Hitel
lRow.Cells.Add(Cell1)
Dim Cell2 As New DataGridViewTextBoxCell
Cell2.Value = Datum
lRow.Cells.Add(Cell2)
grdTorlesztesiTerv.Rows.Add(lRow)
End SubNa most így minden cella értékét sorban kell megadni (ahogy a fejléc diktálja). Ez hasonlít kicsit a javascriptre. Van ennél egyszerűbb / jobb megoldás? Vagy egyéb tanács?
-
ArchElf
addikt
válasz
Brown ügynök #1456 üzenetére
VS2008 mellé használd az MSDN-t, és rögtön tudod, melyik osztály mit csinál.
Amúgy a leít kódodban nem az a rossz, sor, hanem az aláhúzott:
Private Sub Szamolas() Handles btnCalculate.Click
Dim Datum As Date
Dim Grid As String
Datum = DateTimePicker1.Text
Grid = Datum
End SubA Date (azaz DateTime) szerintem nem eszi meg közvetlenül a string-et, hanem fel kell dolgozni a Parse függvénnyel. Ráadásul a DateTimePicker-nek van közvetlen property-je a Dátum lekérdezásáre, ez a Value. Ha pedig DateTime-ot akarsz String-gé formázni, arra (általában minden más osztálynál is) ott a ToString metódus, ami az bject osztályból öröklődik:
Private Sub Szamolas() Handles btnCalculate.Click
Dim Datum As DateTime
Dim Grid As String
Datum = DateTimePicker1.Value
Grid = Datum.ToString()
End SubJa, és ez még semmit nem ír ki sehová
AE
-
Brown ügynök
senior tag
Nemrég kezdtem el VB.NET-t tanulni VS 2008 E-n. A feladat egy hiteltörlesztő program elkészítése lenne, ami a megadott paraméterek alapján kiszámítaná a törlesztés összegét havi bontásban és ezt táblázatos formában jelenítené meg.
Egyelőre annyit szeretnék, hogy a megadott adatokat (dátum, futamidő, stb.) kiírassam a táblázat első sorába. Eddig jutottam a dátummal:
Private Sub Szamolas() Handles btnCalculate.Click
Dim Datum As Date
Dim Grid As String
Datum = DateTimePicker1.Text
Grid = Datum
End SubTisztában vagyok vele, hogy a Grid = Datum nem jó de a neten nem tudtam kiszűrni ezt kis részt ami nekem kell.
-
RexpecT
addikt
Értem, köszi a válaszokat.Ezen kívül még lesz Progab1 illetve Proglab2 tárgyam is majd a következő és a rákövetkező félévben.Eddig ott vagy C# vagy JAVA vagy PHP volt, ha jól tudom, de most lehet változtatnak.De a lényeg, hogy hasznát lehet venni a munkaerőpiacon
.
-
martonx
veterán
válasz
RexpecT #1452 üzenetére
Gazdasági informatikán a C++-al kitörölheted.
Én a VB-vel elfogult vagyok, makró programozáshoz baromi nagy segítség a VB tudás, személy szerint a VB.Net nagy kedvencem (ennek mondjuk gyakorlatilag eltűnt a piaca), a vbscript is hasznos lehet céges, hardver üezemeltetési környezetben.
-
RexpecT
addikt
Előző félévben C++ -ot tanultam az egyetemen, ebben a félévben VB lesz.Mennyire piacképes a nyelv?Szerintem a C++ -ot érdemesebb lett volna folytatni, szélesebb felhasználást biztosít.Vagy rosszul gondolom, jöhetnek a Pro és Kontra érvek
.Egyébként Gazdaság Informatika szakra járok.
-
Zsargon89
csendes tag
Köszönöm a segítséget mindenkinek!!!
Összejött -
Zsargon89
csendes tag
S igen. Köszönöm!!! sikerült
-de lenne még 1 kérdésem:
Hogy tudom ezt futtatható állományként menteni?
Köszönöm! -
Zsargon89
csendes tag
Na most, odáig eljutottam, hogy ha Consol Porjectet csinálok, ott már lefut a program.
Már csak annyi lenne, hogy hogy tudom eltűntetni, a fekete ablakos konzolt?
(az jön elő. és mögötte van az én progim)Oke köszi, próbálom.
-
#90999040
törölt tag
válasz
Zsargon89 #1444 üzenetére
Elindítod a Vs 2008-at.
File -> New -> Project...
A megjelenő ablakban létrehozol egy Forms projektet.
Project -> Add Module...
A létrehozott modulba bemásolod a kódodat, majd megcsinálod vele, amiket előzőleg írtam.
A modulba ezután beleteszed ezt:Sub Main()
TEST()
End SubHa ez megvan, akkor Solution Explorer ablakban*** dupla katt a "My project"-re.
Itt az Application fülön az "Enable Application Framework" elől a pipát kiveszed.
Ugyanezen a fülön "Startup Object"-nél a "Sub Main"-t választod ki.
Ha mindent jól csináltál, akkor F5-re indulnia is kellene a programnak.***: ha nem látszik ez az ablak, akkor View -> Solution Explorer
-
Zsargon89
csendes tag
válasz
martonx #1445 üzenetére
Egyenlőre, egy ledet vilan fel, a megadott "értékszer...",
- de majd egy számlálót kéne annyiszot tovább léptetnie, amennyi értéket beírunk.
(Tényleg, ha jól tudom egy láb 3,valamennyi volt. Egy pl.6 voltos ezközt, ha 2 lábra kötöm rá, az ér? [persze megfelelő ellenálással...] -
martonx
veterán
válasz
Zsargon89 #1444 üzenetére
Az LPT-t nyomtatáshoz használod vagy valamilyen egyéb eszközt vezérelsz vele?
Ha nyomtatáshoz használod, akkor mégis csak a vbscript-es ötletemnél kellene maradni. Ha egyéb eszközt irányítasz vele, akkor tényleg érdemes .Net-esíteni. Ebben tudunk segíteni.
Visual Studio-ban is gondolom elég lesz egy Console application projekt.
-
Zsargon89
csendes tag
válasz
#90999040 #1430 üzenetére
Szeretném lecserélni, de Sajna a VB studio 2008hoz (meg máshoz se) nem értek
Elindítom a prpgramot, és New Project- de ott kidob több dolgot is.
Itt meiket kell kiválasztanom? próbáltam úgy hogy ezekközüll kiválasztottam egyet, és ott adtam hozzá modult, s abban szerettem volna írni, de különböző projecteknél különböző hiba.
-bár mikor Formot inítottam, ott nem írt ki hibát a program (modulban), de hiába töröltem a formot, futtatásnál mégis előhozott egy üres ablakot. -
ArchElf
addikt
-
ArchElf
addikt
válasz
martonx #1441 üzenetére
Lehet, hogy nem kell a nyomtatáshoz win api (azaz megoldható másképp is), de ez tutira nem működik VBS alatt:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Sub PortOut Lib "io.dll" (ByVal Port As Integer, ByVal Value As Byte)
Public Declare Function PortIn Lib "io.dll" (ByVal Port As Integer) As Byte
Innentől kezdve hiába nevezi át a fájlt, nem fog futni a WSH-ban...AE
-
Oly
őstag
válasz
ArchElf #1438 üzenetére
Igen, Access Űrlapon egy gomb.
A Bontás Pending a Fájl név.
a probalkozasok, a kiertesites és a kiertesito az űrlapon található textBoxok.
Egyébként ide menti, hogy ki és mikor "próbálkozott".
3 próba után lezárjuk.
Ezeket is deklaráljam? (Eddig működött nélküle)A user() pedig Module1-ben van:
Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) _
As Long
Function user()
Dim s As String
Dim cnt As Long
Dim dl As Long
Dim CurUser As String
cnt = 199
s = String(200, 0)
dl = GetUserName(s, cnt)
If dl <> 0 Then
CurUser = Left$(s, cnt - 1)
Else
CurUser = ""
End If
user = CurUser
End FunctionEzzel adom meg az aktuális felhasználó NT login nevét. (keresztnev.vezetkenev)
-
ArchElf
addikt
Hol van ez futtatva (access, ha jól rémlik?)
Hirtelen ezeket találtam:
- Mi az a Bontás Pending?
- GOTO értelmetlen, használj Exit Sub-ot
- probalkozasok hol kap értéket, nincs átadva a Sub-nak, ez valami globális objektum?
- user() implementálva van?
- Ezeket mire használod?
Kiertesito1, Kiertesites1, Kiertesito2, Kiertesites2, Kiertesito3, Kiertesites3
- indentálásra figyelj:
If akármi Then
'művelet 1
'művelet 2
Else
'művelet 3
'művelet 4
End If
így legalább olvasható lesz a kód
- használj Option Explicit-et (minden változót kötelező deklarálnod Dim akármi-vel, de legalább véd az elgépelés és a túlzott mértékű változó használat ellen)AE
-
ArchElf
addikt
-
Oly
őstag
Most addig eljutottam, hogy néhány helyen már futnak a scriptek, de még mindig nem mind.
pl ez sem:Private Sub Command34_Click()
Dim proba As Long
'Dim sortores As String
'sortores = ""
hivas = MsgBox("Hívtad a kontaktot?", vbQuestion + vbYesNo, "Megerősítés")
If hivas = vbNo Then
GoTo Vege
End If
If probalkozasok.Value > 0 Then
sortores = vbCrLf
End If
probalkozasok.Value = probalkozasok.Value + 1
nvf = MsgBox("Sikerült elérni az ügyflelet?", vbQuestion + vbYesNo, "Kérdés")
If nvf = vbYes Then
hozzafuz = InputBox("Eredmény", "Kérlek add meg, hogy mire jutottál")
lezarass = MsgBox("Lezáruk a jegyet sikeres kiértesítéssel?", vbQuestion + vbYesNo, "Lezárás")
If lezarass = vbYes Then
Lezarva = 2
MyFile = "BP.txt"
fnum = FreeFile()
Open MyFile For Append As fnum
Write #fnum, Now(), user(), "M", ID, Lezarva
Close #fnum
End If
Else
hozzafuz = "Nem vette fel"
End If
Kiertesites_eredmenye = Kiertesites_eredmenye & sortores & probalkozasok & ". kiértesítés: " & hozzafuz
If probalkozasok.Value = 1 Then
Kiertesito1 = user()
Kiertesites1 = Now()
End If
If probalkozasok.Value = 2 Then
Kiertesito2 = user()
Kiertesites2 = Now()
End If
If probalkozasok.Value = 3 Then
Kiertesito3 = user()
Kiertesites3 = Now()
lezaras = MsgBox("Ez volt a harmadik próbálkozás! Lezáruk a jegyet sikertelen kiértesítéssel?", vbQuestion + vbYesNo, "Lezárás")
If lezaras = vbYes Then
Lezarva = 3
MyFile = "BP.txt"
fnum = FreeFile()
Open MyFile For Append As fnum
Write #fnum, Now(), user(), "M", ID, Lezarva
Close #fnum
End If
End If
Vege:
End Sub -
martonx
veterán
válasz
#90999040 #1429 üzenetére
de miért kell windows API függvény? Emberünk azt kérte, hogy ne csak office-on belül tudja használni az összehozott programját. Erre javasoltam a vbscriptet.
Persze csinálhat belőle VB.Net-et is (vagy tőlem akár powershell-t, vagy bármit), csak a vbscript készítéshez elég egy file átnevezés, és máris futtathatja bárhonnan. -
ArchElf
addikt
válasz
#90999040 #1429 üzenetére
Közvetlenül nem, kell írni hozzá egy COM Wrappert (legyen akár natív, akár .NET assembly). Pár dologra még oda kell figyelni a wrappelésnél, pl. struct nem használható. Ha valaminek a visszatérési vagy bemeneti értéke struct, akkor azt vagy szét kell szedni a com hívásban, vagy be kell csomagolni egy osztályba (és a wrapperben kibontani).
Oly: Lehet, hogy segít...
AE
-
#90999040
törölt tag
válasz
Zsargon89 #1424 üzenetére
Visual Basic 2008-ra javaslom a következőket:
A Long-okat cseréld le Integer-re.
Az inputboxokat pedig módosítsd így:
v = Integer.Parse(InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- 6 számjegyű számláló" & Chr(13) & Chr(10) & "2- 7 számjegyű számláló"))Az Integer.Parse() (vagy más konverziós függvény) azért kell, mert Vb.net-ben az inputbox stringet ad vissza.
-
martonx
veterán
válasz
Zsargon89 #1424 üzenetére
Szia!
Javaslom neked a vbscriptet. Az 95%-ban kompatibils az office makróval.
Azaz a kódodat másold át notepad-be, majd mentsd le .vbs néven.
Ezt command line-ból cscript valami.vbs néven fogod tudni futtatni.Debugolni pedig cscript //X //D valami.vbs-ként fogod tudni, ha mégsem menne egy az egyben vbs-ként.
-
Oly
őstag
Sziasztok.
Mivel nem tudjuk a területi beállításokat állítani minden gépen, ezért valami más megoldásra lenne szükségem.
Próbálkoztam, hogy az én gépemen is átállítom angolra, de nem történt semmi, majd mikor visszaállítottam magyarra, akkor az én gépemen sem ment már a dolog.
Sőt!
Ami eddig ment (másik adatbázisban), az sem megy most már.Van valami alternatív lehetőség, ami területi beállítástól független?
Sajnos ez az alkalmazás több 100 gépen (PC, Terminal, Laptop) fog futni, és nem tudjuk máshogy megoldani.Ha kell, újra építem az egészet, csak mondjátok el hogy mire figyeljek...
Milyen karaktereket ne használjak, vagy mi miatt akadnak ezek össze?ELőre is köszönöm.
-
Zsargon89
csendes tag
Sziasztok!
.bas to .exe Hogy?
Microsoft Excel-ben /Makro/ Visual Basic Szerkesztő-ben írtam egy "modult" -vagy mit,
mely LPT portot vezérel. (Sokat szenvedtem vele)
Ezt a "programot" szeretném, excel nélküli, önnáló, futtatható állományként elmenteni.
Excel (Visual basic szerkesztő) csak .bas kiterjesztést enged.
iexpress-el próbáltam, de ott csak a háttérben fut le valami. (nem hiszem h az én progim, mert az adatbekéréssel kezdődik...)
Már letöltöttem a Visual Basic 2008+Visual C Sharp progrot, de oda hiába másolom be amit írtam, futtatásná hibát ír ki. (már ha tudom futtatni ...)Hogy tudom, a .bas kiterjesztést .exe ként menteni? -vagy hogy tudom a fájlt Visual Basic 2008 vagy Visual C Sharp-ban működésre bírni?
(esetleg extra lenne, ha a io.dll-fájlt nem kéne külön (ez kell a progihoz) bemásolnom system32-be hanem magával hordozná, vagy automatice bemásolná...-de ez tényleg csak extra..)
Válaszokat előre is köszönöm!A megírt cucc ez lenne:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Sub PortOut Lib "io.dll" (ByVal Port As Integer, ByVal Value As Byte)
Public Declare Function PortIn Lib "io.dll" (ByVal Port As Integer) As ByteSub TEST()
Dim x As Long
Dim y As Long
Dim v As Long
Dim c As Long
kezdes:
v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- 6 számjegyű számláló" & Chr(13) & Chr(10) & "2- 7 számjegyű számláló")If v = 1 Then GoTo sz1
If v = 2 Then GoTo sz2
If v <> 1 Or 2 Then GoTo kezdessz1:
v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")If v = 1 Then GoTo elso1
If v = 2 Then GoTo masodik1
If v <> 1 Or 2 Then GoTo sz1elso1:
x = InputBox("Írja be a bepörgetni kívánt értéket!")
For i = 1 To x
Call PortOut(888, 1)
Sleep 500
Call PortOut(888, 0)
Sleep 500
Next
GoTo vegemasodik1:
x = InputBox("Írja be a jelenlegi számlálóállást!")
y = InputBox("Írja be az elérni kívánt számlálóállást")
c = (y - x)
If (x > y) Then c = ((999999 - x) + 1 + y)
For i = 1 To c
Call PortOut(888, 1)
Sleep 500
Call PortOut(888, 0)
Sleep 500
Next
MsgBox (c)
GoTo vegesz2:
v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")If v = 1 Then GoTo elso2
If v = 2 Then GoTo masodik2
If v <> 1 Or 2 Then GoTo sz1elso2:
x = InputBox("Írja be a bepörgetni kívánt értéket!")
For i = 1 To x
Call PortOut(888, 1)
Sleep 500
Call PortOut(888, 0)
Sleep 500
Next
GoTo vegemasodik2:
x = InputBox("Írja be a jelenlegi számlálóállást!")
y = InputBox("Írja be az elérni kívánt számlálóállást")
c = (y - x)
If (x > y) Then c = ((9999999 - x) + 1 + y)
For i = 1 To c
Call PortOut(888, 1)
Sleep 500
Call PortOut(888, 0)
Sleep 500
Next
MsgBox (c)
GoTo vegevege:
MsgBox ("SZÁMLÁLÓ BEÁLLÍTVA" & Chr(13) & Chr(10) & "TOVÁBBI JÓ MUNKÁT!")
End Sub -
ArchElf
addikt
válasz
#90999040 #1422 üzenetére
Rájöttem közben mi lehet a probléma...
Mivel a class futásidőben generálódik, így lehet, hogy két futáskor nem ugyanazt a signature-t adja neki a fordító. Így hiába tárolom el az osztályt egy ideiglenes tárban (a memóriában) két futtatás között, a következő futtatáskor már "más" RelStore class generálódik meg, amire a fordító nem talál leírást, és nem tud hozzáférni a metódusokhoz sem.
Megnéztem közben, a helytelenül visszaadott osztályoknál a
VarType(rs) 13-at ad vissza:
vbDataObject - 13 - A data-access object
A TypeName meg Unknown-t...
Kénytelen leszek sima stringekkel dolgozniAE
-
#90999040
törölt tag
válasz
ArchElf #1421 üzenetére
Ez így tökéletesen működik:
Class RelStore
'Cache Time 5 min
Private d_Timer
Private b_Member
Private b_Init
Private VALIDITY
Private Sub Class_Initialize
VALIDITY = 300
d_Timer = 0
b_Member = False
b_Init = False
End Sub
Public Function Initialize(Membership)
d_Timer = Timer
b_Member = Membership
b_Init = True
End Function
Public Sub Invalidate()
Class_Initialize
End Sub
Public Function IsMember()
IsMember = b_Member
End Function
Public Function IsValid()
IsValid = (b_Init AND ((Timer > d_Timer + VALIDITY) OR (Timer < d_Timer)))
End Function
End Class
Set rs = new RelStore
DebugWrite rs.isvalidSzerintem ez: htCache(SearchString) nem RelStore classt ad vissza.
-
ArchElf
addikt
-
#90999040
törölt tag
-
ArchElf
addikt
Gyors VBScript kérdés...
Csináltam egy kicsi osztályt (alant), és egy Hastable-be bepakolom (tudom talán kicsit meredek). A problémám az, hogy az egyik függvényt nem hajlandó meghívni a futtatókörnyezet...
Osztály:
Class RelStore
'Cache Time 5 min
Private d_Timer
Private b_Member
Private b_Init
Private VALIDITY
Private Sub Class_Initialize
VALIDITY = 300
d_Timer = 0
b_Member = False
b_Init = False
End Sub
Public Function Initialize(Membership)
d_Timer = Timer
b_Member = Membership
b_Init = True
End Function
Public Sub Invalidate()
Class_Initialize
End Sub
Public Function IsMember()
IsMember = b_Member
End Function
Public Function IsValid()
IsValid = (b_Init AND ((Timer > d_Timer + VALIDITY) OR (Timer < d_Timer)))
End Function
End ClassAhol kicsomagolnám a Hastable-ből:
If htCache.ContainsKey(SearchString) Then
Set rs = htCache(SearchString)
If rs.IsValid Then
IsMember = rs.IsMember
Else
IsMember = False
htCache.Remove SearchString
End If
Else
DebugWrite "Object NOT found in cache: " & SearchString
End IfHibaüzenet:
An error occurred on line 97 while executing script 'User Group Check'
Source: Microsoft VBScript runtime error
Description: Object doesn't support this property or method: 'rs.IsValid'Ja és próbáltam már így is
Public Property Get IsValid
IsValid = (b_Init AND ((Timer > d_Timer + VALIDITY) OR (Timer < d_Timer)))
End PropertyAE
-
Homer
tag
Üdv ismét! Gondoltam leírom amit azóta sikerült megtudnom. Azaz inkább azt írom le, hogy hogyan oldottam meg a feladatot. A maskedtextbox resetonspace tulajdonságának true-ra állításával a space-ekket "lekezeli a textbox". (Space inputra a maszk nem lép digitet ha azt a karaktert a maszk nem engedi, mint pl. a "0" maszk esetén.) Azonban így is gondot okozhat ha a user az arrow key-ekkel vagy egérrel elmozdítja kurzort begépelés közben. Ezt a kivételt utólag a MaskCompleted tulajdonság ellenőrzésével egyszerűen lehet kezelni.
A megoldás tehát:
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
MsgBox(MaskedTextBox1.MaskFull)
End SubPrivate Sub MaskedTextBox1_TextChanged(sender As Object, e As System.EventArgs) Handles MaskedTextBox1.TextChanged
If MaskedTextBox1.MaskCompleted Then Button1.Enabled = True Else Button1.Enabled = False
End SubA button1 így csak akkor elérhető ha teljesen ki van töltve a textbox, és oda pedig csak érvényes karaktereket (tehát space-t nem!) lehet írni. Probléma megoldva!
Köszönöm mindenkinek aki esetleg gondolkodott rajta!
-
Oly
őstag
-
-
Homer
tag
Sziasztok!
A maskedtextbox osztállyal kapcsolatban egy érdekes dolgot tapasztaltam. Mindenkinél így működik, vagy én vagyok a láma ehhez (is)?
Szal a problémám a következő: Az MSDN szerint a maszkolásnál a 0 maszk jelentése, hogy csak egy SZÁM KARAKTERT (0...9) fogad el a box, viszont azt KÖTELEZŐ megadni. 9-es maszk esetén kellene elfogadnia a space-t és valamilyen szám digitet.Ehhez képest a 000-000 maszk simán engedi a " 1-234" vagy " - " vagy a "1 2- 3" karaktersorozatokat.
Ez miért van? Hibás az osztály, vagy az MSDN leírás róla? Esetleg valami spec Visual Studio beállítás esetén műxik csak a dolog? Amiben próbáltam: Visual Studio 2010 (Visual Basic)Előre is köszönöm ha valaki segítő szándékú válaszra méltatna!
-
zoli1962
csendes tag
Sziasztok !
Mint nagyon kezdő lenne egy kérdésem. VB6-ban csinálom. Van két legördülő menüm (combobox) az egyikbe írok dolgokat legyen a könnyebb érthetőség kedvéért pékárunál,hús,tejtermék. Ha kiválasztom valamelyiket akkor a második legördülő menüben pékárunál az általam felsorolt kifli,zsemle,kenyér jelenjen meg.Valamit meg is tudtam csinálni de minden kategória váltásnál hozzáadja a második legödülő menühöz és egyre több sor lesz.
Ha valaki tudna..köszönöm -
martonx
veterán
Új hozzászólás Aktív témák
Hirdetés
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Milyen billentyűzetet vegyek?
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Okosóra és okoskiegészítő topik
- Kompakt vízhűtés
- SSD kibeszélő
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Házi hangfal építés
- The Division 2 (PC, XO, PS4)
- Szünetmentes tápegységek (UPS)
- További aktív témák...
- BESZÁMÍTÁS! Apple MacBook Pro 14 M4 Pro 24GB RAM 512GB SSD garanciával hibátlan működéssel
- AKCIÓ! Acer Predator Triton Neo 16 15 notebook - Ultra 9 185H 32GB RAM 2TB SSD RTX 4070 WIN11
- Telefon felvásárlás!! Apple Watch SE/Apple Watch SE 2 (2022)
- Apple iPhone 14 Pro Max 128GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! ASUS TUF Z390-PLUS GAMING alaplap garanciával hibátlan működéssel
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged