Hirdetés

2024. május 6., hétfő

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Visual Basic

Hozzászólások

(#1751) martonx válasza Homer (#1750) üzenetére


martonx
veterán

Érteni véllek, és szerintem ez alapján egyrészt erősen túlbonyolítod a dolgot.
Másrészt ez itt egy VB szakmai topik, aminek nem feladata programozni tanítani, programozás technikákat, design patterneket, DB séma módszertanokat oktatnia.
Mivel rendes, értelmes tagnak látszol, privátban, mailben szívesen segítek, amikor időm engedi. Egyébként jó nyomon jársz, próbálgatásokkal tudod csiszolni a tudásodat.

Én kérek elnézést!

(#1752) tomi0829


tomi0829
csendes tag

Sziasztok!

Szeretném kérni a segítségeteket egy egyszerű Excel makróval kapcsolatban.
Annyi lenne a gond, hogy van két adat tömb, ami számokat tárol, és sorrendbe kellene rendeznie.

ker_hatar = Array("400", "1150", "9654")
masolander = Array("346", "1096", "5600", "6826", "8301", "10205", "11611", "12035", "13523", "14663", "15640", "16617")

TALALAT = 11

For l_j = 0 To 3

For I = 0 To TALALAT

If masolander(I + 1) > ker_hatar(l_j) Then

vegleges_hatar(I) = masolander(I)
Cells(16 + I, 3) = I & ".Határ >2 = " & vegleges_hatar(I) & "|| L_I= " & I & "|| L_J= " & l_j
Else

vegleges_hatar(I) = ker_hatar(l_j)
Cells(16 + I, 3) = I & ".Határ 1< = " & vegleges_hatar(I) & "|| L_I= " & I & "|| L_J= " & l_j
l_j = l_j + 1

End If

Next

Next

Azt szeretném, hogy a kapott eredmény ez legyen:

masonader ker_hatar eredmény
346 400 400
1096 1150 1150
5600 9654 6826
6826 8301
8301 9654
10205 10205
11611 11611
12035 12035
13523 13523
14663 14663
15640 15640

Remélem tud valaki segíteni!
Köszi előre is!
Üdv

(#1753) martonx válasza tomi0829 (#1752) üzenetére


martonx
veterán

Excelben egyrészt minek használsz tömböket? Ott van erre egy millió excel cella.
Másrészt nem tudom mit is akarsz pontosan, de az excel beépített FKERES, VKERES függvényeivel próbálkoznék első körben, a felesleges makró programozás helyett.
És amikor megvannak az eredmények, akkor a cellákat könnyen sorba is tudod rendezni.

Én kérek elnézést!

(#1754) tomi0829 válasza tomi0829 (#1752) üzenetére


tomi0829
csendes tag

Igen ebben igazad van.
Viszont ez a pár sor csak egy része egy nagyobb programnak, ami a végén sorba rendezi a talált sorszámokat illetve később szelektál. Az a gond, hogy a sorba rendezésnél megakadtam, pedig nagyon egyszerű lenne.
A lényeg, hogy van 2 tömb amiben vannak tárolt adatok.
masolander(I)
346
1096
5600
6826
8301
10205
11611
12035
13523
14663
15640

Második tömb:
ker_hatar(l_j)
400
1150
9654

Ezeket kellene rendeznie, úgy hogy a kapott érték ez legyen:
Eredmény
400
1150
6826
8301
9654
11611
12035
13523
14663
15640
16617

I = 0
j = 0

For I = 0 To talalat

If masolander(I + 1) < ker_hatar(j) Then
vegleges_hatar(I) = ker_hatar(j)
Cells(16 + I, 4) = I & ". " & vegleges_hatar(I) & " |" & ker_hatar(j) & " 1< " & masolander(I + 1)
j = j + 1

Else
vegleges_hatar(I) = masolander(I + 1)
Cells(16 + I, 4) = I & ". " & vegleges_hatar(I) & " |" & ker_hatar(j) & " 2> " & masolander(I + 1)

End If

Next

Nem tudom, hogy ebben mit rontottam el...

(#1755) martonx válasza tomi0829 (#1754) üzenetére


martonx
veterán

http://www.cpearson.com/excel/VBAArrays.htm
Ugyan továbbra is alapvető koncepcionális hibának tartom a tömbök erőltetését Excel makróban, mikor az egész excel egy nagy két dimenziós tömb, de itt hátha találasz megfelelő példa kódot.

Én kérek elnézést!

(#1756) tomi0829 válasza martonx (#1755) üzenetére


tomi0829
csendes tag

ok, köszi

(#1757) ArchElf válasza martonx (#1755) üzenetére


ArchElf
addikt

Ezzel azért vitatkoznék... :)

AE

Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]

(#1758) martonx válasza ArchElf (#1757) üzenetére


martonx
veterán

én személy szerint egy tömb sorba rendezését tényleg úgy oldanám meg excelben, hogy eleve cellákba tölteném az adatokat, majd a cellákat sorba rendezném, és kész is. Egyébként az egész VBA-n látszik, hogy a tömbök kezelése eléggé mostoha gyerek benne.

Ugyanígy fenti módszerrel szoktam tömbben keresni is, azaz erre is a cellákat, és az FKERES-t használom inkább.

Ráadásul, amennyivel macerásabbnak tűnik cellákban keresni, sorba rendezni annyival gyorsabb, mint VBA-ban for ciklusokat pörgetni, mindenféle feltétel mentén.

És erre mondtam, hogy excel makróban koncepcionális hiba nem a cellákat, és az excel built-in funkcióit használni tömb műveletekre.

De mindez csak a véleményem, tapasztalatom. Nem mondom, hogy ez az egyetlen járható, ürdözítő út.

Én kérek elnézést!

(#1759) mezis válasza tomi0829 (#1754) üzenetére


mezis
nagyúr

[Egy algoritmus (van több is)]

[ Szerkesztve ]

mezis

(#1760) vilag


vilag
tag

Üdv!

A következő problémára keresek választ:

Adott egy userformon több frame, melyek szintén több vezérlőt tartalmaznak.
Egy közbenső frame léptetési sorrendben utolsó vezérlőjének exit subjába írtam meg egy vizsgálatot, amely ebből következőleg a vezérlőből való kilépéskor elvégez bizonyos ellenőrzést.
A probléma azonban az, hogy ha ez az adott frame utolsó (aktív) vezérlője, akkor az exit sub nem fut le sem akkor ha tabbal közlekedem, sem pedig akkor ha egérrel. Akkor fut le az említett exit sub ha újra visszatérek a frambe (mondjuk egérkattintással)

Valakinek van ötlete, hogy mi okozza ezt, illetve, hogy hogyan lehet meggyógyítani vagy kitrükközni?

Előre is köszönöm!

[ Szerkesztve ]

(#1761) #90999040 válasza vilag (#1760) üzenetére


#90999040
törölt tag

Gondolom exit eseményt akartál írni, mert az exit sub egy kicsit más. ;)

A lényeg az, hogy ez nem csak akkor következik be, ha az utolsó aktív vezérlőről van szó, hanem amikor egy frame-n belüli vezérlőről átváltasz egy frame-n kívülire. Ugyanis ilyenkor nem a frame-n belül levő vezérlő exit-je fut le, hanem a frame exit-je.

Ezt pl. így ki lehet kerülni:

A userformon belül létrehozol egy Control típusú változót, pl.: Private active As Control

Ezután az adott frameben levő minden vezérlőjének Enter() eseményébe beírod ezt: Set active = Me.<Frame neve>.ActiveControl

Az adott vezérlőd exit()-jébe pedig ezt:

Private Sub <Vezérlőd>_Exit(.........
If Not active Is Nothing Then
'itt lehet meghívni az eseményt
End If
End Sub

Ez mellett persze még a frame exit()-jét is le kell kezelni:

Private Sub <Frame neve>_Exit(.......
If Me.<Vezérlőd>.Name = Me.<Frame neve>.ActiveControl.Name Then
Set active = Nothing
'itt ugyanúgy meghívod a vezérlőd exit()-jénél végrehajtandó kódot
End If
End Sub

(#1762) vilag válasza #90999040 (#1761) üzenetére


vilag
tag

Igen, ezzel csak az a baj, hogy ez rengeteg plusz melót igényel, tekintve, hogy minden egyes vezérlő Enter() eseményéhez meg kellene írni.

Az ActiveControl-al már próbákoztunk másik programban, hasonló ok miatt de az nem működik megfelelően.

Ha pl. van egy formod amin belül van egy frame, amint belül pedig egy vezérlő és a kurzor a vezérlőben villog, tehát elvileg ugye a vezérlő az aktív, az ActiveControl azt fogja eredményül adni, hogy az aktív kontrol a userform.
Ezúton is köszönjük neki. Így el nem tudom képzelni, hogy ez mire lehet jó.

Egyébként találtunk akkor erre megoldást, de az hack volt.

Szóval nekem valami jóval egyszerűbb megoldásra lenne szükségem, mert a framen belül és kívül is van jónéhány vezérlő.

Üdv, vilag

(#1763) ArchElf válasza vilag (#1762) üzenetére


ArchElf
addikt

A kevés munkás hack megoldás lesz a jó... [link]

AE

Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]

(#1764) himre82 válasza Homer (#1750) üzenetére


himre82
csendes tag

időközben kész lett a programod?

egyébként hagyd az acces-t, de még az mdf fájlokat meg az sql lite-ot is. Lassúak. De nagyon.

Még ha fejlesztői környezetben gyorsnak is tűnnek, a kliens gépén "kínhalál".

Amilyen futó környezetet vázoltál, arra alkalmas lehet egy postgresql szerver (pgadminIII-mal), van hozzá net connector, és iszonyú gyors. És még az adatokat sem lehet manipulálni fájl szinten, nem úgy, mint egy acces mdb esetében.

Egyébként ajánlanám az sql áttanulmányozását. Hihetetlenül leegyszerűsítené a dolgodat szerintem.

És nem kell félni a bonyolult sql utasításoktól. Pont erre találták ki.

(#1765) Homer válasza himre82 (#1764) üzenetére


Homer
tag

Szia Himre82!

Nem lett még kész a progim, de apránként azért haladok vele. :)

Nem akartam leírni az egész problémát mert hát nem várom el senkitől, hogy megodja helyettem, és tulajdonképpen csak egy-egy részében akadok el mindig. Ezekre itt-ott mindig találok is megoldást, csak később mindig máshol futok hasonló zsákutcákba. Na de akkor már ezt is közkincs tárgyává teszem:

Sajna nem tudok sql servert használni, mert a progimat munkahelyi környezetben használnám majd, és ott nincs lehetőségem adatszolgáltatót üzemeltetni. :\ Ezért maradtam az access file-nál. Hogy ezt is magyarázzam egy picit, az Excel kezelésével a kollégák nagy része már találkozott, így nem okoz gondot nekik a táblák módosítgatása az eddig használt VBA makrós nyilvántartásban (...ezzel persze hibákat generálva a program futásában...). Tudom, itt is le lehetne védeni a munkalapokat jelszóval, de úgy gondoltam, ha már VB, akkor kicsit fejlesztem a tudásomat és gyakorlásképpen megpróbálom inkább megcsinálni az adatkezelő progit, ami már nem excel táblákat módosítgat, hanem igazi adatbázis motorra épül. (Most jöhetnek a kritikák, hogy akkor meg miért nem tisztán accessben csinálom meg? A kérdés jogos! A válsz: azért, mert tanulom a VB-t! Mivel nem szakmám a programozás, csak hobbi szinten űzöm! Szerintem ez is nagy dolog már, hogy idáig eljutottam önszorgalomból.) Az Exceles táblával amúgy azóta semmi gond nincs. Az első pár hiba után, amit manuálisan javítottam, elmagyaráztam többieknek, hogy mi okozta, és azóta mindenki rendesen használja, csak amikor azt megírtam, akkor még nem volt arra igény, hogy mind az állapotfigyelt, és mind a nem állapotfigyelt szerszámot egy rendszerben kezeljük. (A másik dolog, hogy a VB tudásom is sokat fejlődött azóta, és egy csomó dolgot már nem úgy csinálnék meg mint anno.)

Az SQL áttanulmányozása egyébként jó ötlet! Egyet is értek veled, de egyelőre megmaradnék az SQL alapoknál. Később biztos ráfekeszem majd erre is, ha még érdekel majd a dolog. Tényleg jó dolgokat meg lehet csinálni vele, az eddigi tudásoml már elég ahhoz, hogy ezt belássam. :)

[ Szerkesztve ]

(#1766) himre82 válasza Homer (#1765) üzenetére


himre82
csendes tag

Az adatszolgáltató lehet akár egy rendes munkaállomás is.

Örülök neki, hogy szépen haladsz. Annak idején én is így kezdtem.

(#1767) ArchElf válasza Homer (#1765) üzenetére


ArchElf
addikt

Ha munkaállomás - és egyszerre egy felhasználós -, akkor szerintem az sqli a legegyszerűbb (ha nem kellenek bonyolult adattípusok és "fejlett" sql szerkezetek).

AE

Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]

(#1768) Cafu19900916


Cafu19900916
csendes tag

Sziasztok! A segítségeteket kérném, mivel én nem vagyok járatos Visual BAsicben, ezért hozzátok fordulnék segítségért: kaptam eg ynagyon jó ismerősömtől egy kódrészletet, ami a szakdogájához kellene, de mivel ő műszaki menedzsernek tanul távol áll tőle a programozás. A programkód a következő lenne:

Function Szoveget_General(Hossz As Integer, Seed As Integer) As String
Const Kisbetuk = "aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz"
Const Szamjegyek = "0123456789"
Const Egyeb = "'!%$/=<>()\/[]#&@{}<,;:.?+-_ "
Dim i As Integer, db As Integer, Karakterek As String, st As String
Rnd (-1)
Randomize (Seed)
Karakterek = Kisbetuk + UCase(Kisbetuk) + Szamjegyek + Egyeb
db = Len(Karakterek)
st = ""
For i = 1 To Hossz
st = st + Mid(Karakterek, Int(Rnd * db) + 1, 1)
Next
Szoveget_General = st
End Function

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

(#1769) Homer válasza Cafu19900916 (#1768) üzenetére


Homer
tag

És mi a kérdés? :))

(#1770) Lefty


Lefty
addikt

sziasztok!

azt, hogy tudom megcsinálni, hogy adott egy tábla, melynek 2. oszlopában x mezőnként van egy szám, a számok nem egyeznek. majd a szám mellett mellett pár oszlopra van egy pár oszlopból álló tábla üres sorokkal megszakítva változó hosszal, de a 2. oszlopban levő szám nem ismétlődik. ezen oszlopok mellé a 2. oszlopban levő szám tartozik, így melléjük kéne kíratni a számot. mindig addig tartozik a többi adathoz a 2. oszlopban levő szám, míg ott új szám nem jön, utána az azt követőekhez már az új szám tartozik így annak kellene melléjük kerülnie. a 2. oszlopban levő számok mindig ugyanazzal a 3 számmal kezdődnek, többi részük más.

arra gondoltam, hogy ha a 2. oszlopban levő érték ezzel a bizonyos 3 számmal kezdődik, akkor betöltöm változóba majd ebből a változóból beíratom a megfelelő oszlopba olyan feltétel mellett, hogy az előtte levő oszlop nem üres. de a változóba hogy kerül bele az új szám a 2. oszlopban ha majd újat talál? hogy adja át a változó az új értéket egy másik változónak? Köszi :)

(#1771) martonx válasza Lefty (#1770) üzenetére


martonx
veterán

Szia!

Bocs, de ezt én így nem értem. Nem is akarom érteni. Példát akarok látni, és akkor szívesen segítek.

Én kérek elnézést!

(#1772) Lefty válasza martonx (#1771) üzenetére


Lefty
addikt

:D igen, kicsit zavaros. viszont már megoldottam :))

(#1773) shiz


shiz
csendes tag

Üdv!

A következő kód javításában kérnék segítséget.
A hiba a végén van. Ha jól gondolom akkor a with blokk-hoz nem jól deklarálok de nem tudom hol a hiba.
Sub Gomb2_Kattintás()

Dim sor As Integer
Dim oszlop
Dim ml As Worksheet
Set ml = Worksheets("Munka1")
With ml
For sor = 9 To 1500 Step 8
oszlop = Application.Match(1, .Range("C" & sor & ":BJ" & sor), 0)
If VarType(oszlop) = vbError Then
felhet = "nincs"
keszlet = "nincs"
Else
felhet = .Cells(sor, oszlop).Offset(-6, 2).Value
keszlet = .Cells(sor, oszlop).Offset(2, 2).Value
End If
Next
End With

[B]Dim eredmeny As Variant
Set erdmeny = keszlet - felhet / 2)[/B]

With eredmeny
If eredmeny > 0 Then
.Range("BK" & sor).Value = 0
Else
.Range("BK" & sor).Value = eredmeny
End If
End With
End Sub

(#1774) martonx válasza shiz (#1773) üzenetére


martonx
veterán

node minek ide with egyáltalán?

Ez is feleslegesenek tűnik:

Dim ml As Worksheet
Set ml = Worksheets("Munka1")

Ez egyértelműen zárójel hibás:

Set erdmeny = keszlet - felhet / 2) Debugolás a barátod ;]

Ez így működésképtelen. Ismétlem, minek ide with?

With eredmeny
If eredmeny > 0 Then
.Range("BK" & sor).Value = 0
Else
.Range("BK" & sor).Value = eredmeny
End If
End With

Ehelyett simán csak valami ilyesmi kellene neked:
If eredmeny > 0 Then
Range("BK" & sor).Value = 0
Else
Range("BK" & sor).Value = eredmeny
End If

Én kérek elnézést!

(#1775) shiz válasza martonx (#1774) üzenetére


shiz
csendes tag

Gondoltam kicsi részletezem mire is kellene mert még így sem működik.

A oszlopban termékek 2. sortól 13 soronként.
C:BJ-ben különböző adatok a termékekhez.
A tábla 9. sorától kezdve 1500 ig minden 8 sorban meg kellene vizsgálni szerepel e benne az "1" érték.
Találat estén ettől a cellától jobbra és és fel illetve jobbra és le található cellák különbségét ki kellene íratnom BK oszlopba az 1 találati érték sorától 7 sorral feljebb.
(illetve hiba helyett vmi szöveget kellene kiíratnom arra az esetre ha a match nem találna semmit.

(#1776) martonx válasza shiz (#1775) üzenetére


martonx
veterán

feltennél valahova egy példa excelt, pár sorral? Ez annyira ujj gyakorlat, hogy megírnám a makrót hozzá 1-2 perc alatt (hogy mikor lesz erre 1-2 percem, az más kérdés). Így meg csak itt tanácstalankodunk.

Én kérek elnézést!

(#1777) shiz válasza martonx (#1776) üzenetére


shiz
csendes tag

Szia!

Ide feltettem a táblából egy darabot: Tábla

"BK"-ban látszi, hogy mi is az amire szükségem lenne eredményként.
Nem valószínű, hogy előfordul de egy hibakeresés csak kell szerintem arra az esetre ha az adott sorba nem szerepelne 1-es érték(erre írtam volna a match-hez egy "nincs" szöveget.

A segítséget előre is köszönöm.

Üdv:

(#1778) krokk


krokk
senior tag

srácok kellene ötletet, hogy az alábbit, hogy tudom megvalósítani accessben, illetve meg lehet-e egyáltalán....

Szabaság nyilvántartás.
Hónap szinten kellene megjelenítenem, hogy az emberek melyik napokon vannak szabadságon.
Kb ilyen kellene:
Első oszlop egymás alatt a nevek a többi oszlopban meg a hónap napjai.
A sorokba meg napoknál beixelve vagy más háttérszínnel a szabadság napjai.
Adatbázisban a tól ig dátumot tárolom.

Excelben szépen néz ki, de Access és VBA segítségével, hogy hogy kéne adatbázisból ezt prezentálni...
Nemrég kezdtem csak VBA-zni meg Accessben szöszmötölni, htmlben jobban otthon vagyok ott simán megrajzolok egy ilyen táblát és feltöltöm adatokkal.
De itt pl ha input mezőkbe vagy címkékbe tenném az nem épp a legjobb főleg mert nem nagyon tudom őket dinamikusan létrehozni és címezni vagy legalábbis nagyon macerás.

De ha lekérdezésre, vagy diagrammra van valami ötletetek, hogy miként lehetne látványosan megjeleníteni az is segítség lenne... csak jelen pillanatban ötlettelen vagyok, hogy miként és hogyan lehetne ezt megvalósítani.

Keresgéltem neten szoba foglalásos programra mert ez áll legközelebb, de vagy fizetős volt ha találtam, vagy a forráskód nem volt publikálva, stb....

Remélem tudtok ötletet adni rá...

Köszi.

the funniest thing about this text is that by the time you realize it doesn't say anything it's too late for you to stop reading it

(#1779) martonx válasza krokk (#1778) üzenetére


martonx
veterán

erre való a pivot
Ugyan accessben még sose használtam, MSSQL-ben, excelben már jópárszor.
Guglizz rá, és találasz jópár access pivot példát.

Én kérek elnézést!

(#1780) martonx válasza shiz (#1775) üzenetére


martonx
veterán

Sub Count()
Dim var As Variant
For i = 9 To 1500 Step 13
var = Application.Match(1, Rows(i).Cells, 0)
If Not IsError(var) Then
'ilyenkor az i mutatja, hogy melyik sorban találtunk, var mutatja, hogy melyik oszlopban
'azaz e két info ismeretében bármit meg tudsz csinálni
MsgBox ("találtam")
End If
Next
End Sub

Én kérek elnézést!

(#1781) krokk válasza martonx (#1779) üzenetére


krokk
senior tag

köszi.
keresszttáblás lekérdezés a neve magyar accessben :)
meglássuk, bár itt is még a problémám az, hogy lehet egy külön táblát kell létrehoznom majd a napoknak :)

the funniest thing about this text is that by the time you realize it doesn't say anything it's too late for you to stop reading it

(#1782) EkSYS


EkSYS
senior tag

Sziasztok !

Tudna nekem valaki egy olyan html rövid kis kódsort írni ami egy adatok.xlsx -be bepakol pár adatot amit a html felületen lehet beadni?
Az számít ha az xlsx egy a hálózaton lévő másik gépen van?

köszi! :R
b

Eki - az eredeti

(#1783) martonx válasza EkSYS (#1782) üzenetére


martonx
veterán

Persze, biztos vagyunk itt páran akik tudnánk.
A hálózati elérés nem jelenthet gondot, feltéve hogy a gépek rendben látják egymást.

Én kérek elnézést!

(#1784) EkSYS válasza martonx (#1783) üzenetére


EkSYS
senior tag

Szia!

Nagyon köszönöm a válaszodat!!
:R :R :R :R :R :R :R :R :R :R :R :R :R :R :R :R :R :R :R :R :R :R :R :R :R

Eki - az eredeti

(#1785) martonx válasza EkSYS (#1784) üzenetére


martonx
veterán

Ez most irónia akart lenni? Semmi konkrétat nem válaszoltam. :B

Én kérek elnézést!

(#1786) sztanozs válasza EkSYS (#1782) üzenetére


sztanozs
veterán

html-ben (mármint pure html-ben) szerintem nem lehet megoldani. JS vagy VBS már működhet, de ahhoz meg nem szükségszerűen kell html.
Bár jobban belegondolva elég jól kiegészíthető egy vbs-ből nyitott és generált html oldal a vbs kóddal. Nem egyszerű dolog, de megoldható.
Google: manipulate excel with vbsript
Google: vbscript html form
Mindkét keresésben az első oldal szinte összes találtata releváns.

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

(#1787) martonx válasza sztanozs (#1786) üzenetére


martonx
veterán

feltételezem .hta-ra gondolt emberünk?

Én kérek elnézést!

(#1788) sztanozs válasza martonx (#1787) üzenetére


sztanozs
veterán

Én inkább azt feltételezem, hogy nem tudta, hogy html vagy hta, vagy mi - csak annyit, hogy "böngészőből" adna hozzá excel táblához sorokat.

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

(#1789) EkSYS válasza sztanozs (#1786) üzenetére


EkSYS
senior tag

köszi! Utána nézek!

:R

Eki - az eredeti

(#1790) vilag


vilag
tag

Sziasztok!

Szembe kerültem egy eleddig megoldhatatlannak tűnő problémával.
Több kiutat is látok belőle, csak nem tudom kivitelezhető e, illetve, hogy hogyan.

Van nekem egy excelre épülő VBA projektem.
Ez gyakorlatilag a hálózatról is futtatható kis programocska.

Jelenleg úgy működik, hogy egy .bat fájlra mutató parancsikont tetettem ki a felhasználókkal. Ez a .bat fájl indítja az abban megadott helyen lévő excel fájlt.

Ennek a .bat fájlra mutató parancsikonja azonban egy sima kötegfájl az ikonja.
Ez meglehetősen ronda.
Szeretném elérni valahogyan, hogy felhasználói beavatkozás nélkül legyen egy általam beállított kép az ikon.

Nekem az alábbi megoldások jutottak eszembe:
1. Ne egy .bat fájl, hanem egy .exe fájl tartalmazza az elérési utat (elvileg az .exe már tárolhat ikont is). Sajnos lövésem sincs hogyan lehet exe fájlt programozni, és hosszas keresgélés után sem jutottam előrébb.

2. Magából a projektből kellene valahogyan egy exe fájlt csinálni (ha egyáltalán kehetséges)

3. Egy .bat fájlt megírni úgy, hogy az elvégezze a felhasználó helyett a parancsikon kihelyezését az asztalra és az ikoncseré is. (ezt meg nem tudom megcsinálni).

Szóval szeretnélek titeket megkérni, hogy akár más megoldással, vagy akár a fentiek közül valamelyik megoldás kivitelezésével segítsetek megoldani a problémát!

Egy másik probléma, hogy a .bat fájl indításával egy parancsfájl ablak is megnyílik ami addig ott is marad míg az excel tábla nyitva van.
Nem lehetne valahogy megoldani, hogy ez az excel fájl megnyitásakor bezáródjon, vagy legalább láthatatlan legyen?

Köszönettel, volag

(#1791) sztanozs válasza vilag (#1790) üzenetére


sztanozs
veterán

1) háááát - szerintem elég meredek ötlet - bár vb.net-et kézzel is meg tudod írni és kézzel fordítani vbc.exe-vel (Windows\Microsoft.NET\Framework alatt keress), nem kell visual studio sem hozzá.
2) Excelből nem tudsz exe-t csinálni, esetleg szerezz be egy VB6-ot vagy egy VB.NET (Express ingyen van) és hacsak nem Office specifikusak a VBA tevékenységei, akkor át tudod tenni a projektedet (kis tanulással) VB6-ba, vagy VB.NET-be.
3) minek .bat fájl, ha egyszer az excelre kattintva is elindul - annak is ki lehet tenni parancsikont és annak is tudsz szerintem ikont változtatni. A .bat-ból indítsára meg (inkább .cmd-t használj), asszem ha call-al hívod meg a fájl akkor nem várja meg a futást, hanem kilép.

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

(#1792) martonx válasza vilag (#1790) üzenetére


martonx
veterán

Ez fábol vaskarika készítés. Szerintem az egyetlen normális megoldás, hogy letöltöd a legújabb Visual Studio-t, és VB.NET-ben csinálsz egy olyan exe-t, amilyet csak akarsz.

Én kérek elnézést!

(#1793) vilag válasza sztanozs (#1791) üzenetére


vilag
tag

Először is köszönöm a válaszokat!

Az első két megoldási javaslattal kapcsolatban nincs semmi tapasztalatom, szóval nem tudom, hogy vajon mekkora meló lenne egy több mint 5000 soros kód lefordítása.

Valakinek valami tapasztalat ezzel kapcsolatban?

A bat fájlra -mint írtam- azért van szükség jelenleg, mert ez a fájl tartalmazza az excel fájl nevére mutató hivatkozást. Vagyis inkább ez nyitja meg a benne megadott hivatkozást.
Minderre azért van szükség, mert a fájl nevét időnként változtatom. Erre a verziószám változások miatt van szükség. Ebből kifolyólag pedig az arra mutató parancsikonok érvénytelenek lennének.

Azért keresek olyan megoldást amivel magában a fájlban lehet tárolni a parancsikont, vagy automatizálni annak lecserélését, mert a hálózat (illetve a program) felhasználóit 100 km is elválasztja egymástól, így nem mehetek oda minden egyes géphez és végezhetem el én az ikoncserét
Azt meg ne is mondjam, hogy a felhasználók milyen szinten állnak informatikából...
Vagy aki meg ért is hozzá, az esetleg tesz rá...

(#1794) vilag válasza martonx (#1792) üzenetére


vilag
tag

A meglévő program átfordítása mekkora erőfeszítést igényelne vajon?
Illetve még ha le is fordítom, minden gépen menne vajon vagy esetleg kell hogy legyen hozzá telepítve valamilyen program, hogy fusson?

Utóbbit azért kérdezem, mert a hálózatban nem rendelkezem rendszergazda jogosultságokkal. (legalább is nem egészen legálisan :)) )

(#1795) martonx válasza vilag (#1794) üzenetére


martonx
veterán

Attól függ milyen .Net verzióval fordítod, olyan .Net futtató fog kelleni.
XP-ken alapból semmilyen sincs, win7-en már van 3.5-ös alapból, tehát ezekre nem kell külön telepíteni.
És igen az 5000 soros kódot újra kell írnod, noha a szintaktika hasonlósága miatt ez korántsem olyan vészes munka, mintha pl. C-re írnád át.

Én kérek elnézést!

(#1796) sztanozs válasza vilag (#1793) üzenetére


sztanozs
veterán

5000 sor nem egy vészes munka, ha ismered a program működését, a megvalósítandó célokat, az adatstruktúrát, stb.

A fájl átnevezgetést (inkább a szükségességét) viszont nem nagyon értem.

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

(#1797) vilag válasza martonx (#1795) üzenetére


vilag
tag

Minden céges gépen XP van.
Sajnos azonban a legtöbb gépen még az SP3 sincs fent, nemhogy a .net keretrendszer...

De azért lehet, hogy ha más nem kíváncsiságból megpróbálom majd átfordítani.
A későbbi futtatáshoz is kell majd gondolom a keretrendszer gondolom.
Azt azonban nem tudom, hogy ha abból exe-t csinálok akkor is kell? (mintha azt írtátok volna, hogy abból már lehet exe-t csinálni.)

Üdv, vilag

(#1798) sztanozs válasza vilag (#1797) üzenetére


sztanozs
veterán

VB és VB.NET-ben is megírhatod, de annak, hogy a VB runtime fent legyen egy gépen kb annyi a valószínűsége, mint hogy a .NET fent legyen (sőt mára már megkockáztatom, hogy az utóbbié nagyobb).
A .NET keretrendszer nem egy nagy dolog, fel kell rakni (meg kell patchelni) és már mehet is. Amúgy le tudod ellenőrizni, hogy az adott gépen fent van-e, csak meg kell nézni, hogy ez a könyvtár létezik-e és vannak alatta v* alkönyvtárak:
%systemroot%\Microsoft.NET\Framework

Vb6-ból és VB.NET-ből is exe-t lehet csinálni. Egyik sem interpreteres nyelv (mint a vba, vagy mondjuk dos-os időkből a qbasic).

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

(#1799) martonx válasza vilag (#1797) üzenetére


martonx
veterán

Azért eléggé nulla tudással állsz neki, ha életedben nem hallottál még a Visual Studio-ról és a .Net technológiáról. No sebaj sosem késő szintet lépni. :) Ez esetben lehet mégsem lesz ujjgyakorlat átportolnod VB.NET-re a cuccot? :B
És bizony futtatáskor is kelleni fog a .Net, nem csak az exe elkészítésekor. Mivel a .Net nem fog elrontani semmit a felhasználók gépén, az illegás rendszergazdai hozzáféréseddel is nyugodtan feltelepítheted.

Én kérek elnézést!

(#1800) vilag válasza martonx (#1799) üzenetére


vilag
tag

Sajnos akkor mindkét megoldást (VB6, .NET) el kell vetnem, mert még ha tudom is a rendszergazda jelszót, nem lesz alkalmam feltenni minden gépre.
Még amik helyben vannak, azok csak-csak, mert mondjuk a kora reggeli órákban megcsinálom mikor nincs itt senki, de a másik két központban lévő gépekre nem tudom feltenni. Elmenni nem tudok (na meg nem is akarok), a gépneveket meg nem tudom.

Innentől meg a rendszergazda jóindulatán múlik, hogy hajlandó e ennyit vacakolni....
de ahogy ismerem első szóra biztos nem csinálja meg.

Útvonal

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