- Az Intel a legmodernebb chipgyártó géppel előzheti meg az egész szektort
- Leváltaná a Google a sütiket, de ez nem elég
- Nem igaz, hogy indiaiak működtetik az Amazon pénztármentes technológiáját
- Már azelőtt szoftvert írnak a chipekhez, hogy elindulna a gyártás
- Van, ahol már törvényben védik az agyhullámainkat
Új hozzászólás Aktív témák
-
26centi
csendes tag
sziasztok,
én is most teszem kezdőlépéseimet vba-ban. és nem szeret engem. se.egy óriási adathalmaz adott feltétel alapján kiválasztott sorát szeretném egy másik munkalap, változóban (n) tárolt számú sorába másolni. kreáltam is egy kódot.
Do
Sheets("tools in SAP 3100").Activate 'forrás munkalapIf Cells(i, 14) = "#Hiányzik" Then
Rows(i).Select ' átmásolandó sor
Selection.Copy
Sheets("missing cost centers").Select 'cél munkalap
Rows(n).Select 'ezen a ponton kiakad, Application-defined or object defined error üzenettel Hibakód:1004
ActiveSheet.rows(n).Paste
n = n + 1End If
i = i + 1Loop Until Cells(i, 1) = ""
sajnos a hibakód helpjét elolvasva sem kaptam a leghalványabb utalást sem hogy mi a nyűgje. két sorral feljebb pedig ugyanez az utasítás működik.
van valakinek ötlete, hogy miért nem vagyunk barátok?
előre is kösz,
derűs, dolgos munkanapot -
26centi
csendes tag
válasz martonx #1552 üzenetére
nos nem tudom mit jelent az pontosan, hogy létezik-e ezen a helyen, de miután deklaráltam, és még értéket is adtam neki ugyanezen subrutinban, gondolom létezik. ha más nem, értékadásnál már nyafogott volna, hogy baja van, de az lefut.
Sub missing_cost_centers()
Dim i, n As Integer
i = 9
n = 2
Do
Sheets...... -
ArchElf
addikt
válasz 26centi #1553 üzenetére
Sheets("missing cost centers").Select 'cél munkalap
helyett lehet, hogy egy
Sheets("missing cost centers").Activate 'cél munkalap
kellene...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]
-
Homer
tag
válasz 26centi #1551 üzenetére
Szia!
Ha tudod a sorok számát akkor:Sub Akarmi()
Worksheets(1).Select
Dim ujsor As Integer
ujsor = 1
For Index = 1 To 10
Rows(CStr(Index) & ":" & CStr(Index)).Select
If Cells(Index, 2).Text <> "#HIÁNYZIK" Then
Selection.Copy
Worksheets(2).Select
Rows(CStr(ujsor) & ":" & CStr(ujsor)).Select
ActiveSheet.Paste
Worksheets(1).Select
ujsor = ujsor + 1
End If
Next Index
End SubEgyébként én cellánként másolgatnám az értékeket anélkül, hogy mindig kijelölgetném a második worksheetet valahogy így:
Ha a vizsgált cella értéke megfelelő akkor
Worksheets(2).Cells(XY).text=worksheets(1).cells(ZY).text
(Sokkal gyorsabb lesz afutása a makrónak, és nem vibrál a kép futás közben )Jah, bocs, elfelejtettem írni, hogy az a baj, hogy a sor kijelölésének formája:
Rows("1:1").select
Ebből gondolom látod mi a gond: String paramétert várna a rows sub
Remélem segítettem[ Szerkesztve ]
-
26centi
csendes tag
Helló,
Kösz az ötleteket, sajnos a megoldás nem ez lett. Nem értem, hogy miért, de annak ellenére, hogy egy alőző sorban aktiválom (mindegy, hogy .select vagy .activate-el) a cél munkalapot, a rows(n).select sort csak úgy fogadja el, hogy előtte a munkalapot is beírom.
Ez működik:
Worksheets("missing cost centers").Activate
Worksheets("missing cost centers").Rows(n).SelectEz nem működik:
Worksheets("missing cost centers").Activate
Rows(n).Select (Rows(CStr(n) & ":" & CStr(n)).Select -el sem)A makrót ugyan a forrás munkalaphoz hoztam létre, de ha ez a baj, akkor sem értem a hibaüzenetet. Ha a cél munkalap aktiválása a sor kiválasztás sorra már nem hat, akkor miért nem választja ki az n. sort az anya-(forrás)munkalapon???
Úgy látszik itt még bőven van mit megtanulni a hivatkozásokról, mert a hétköznapi logika alapján ez elég katyvasz.
Egyébként kösz a tippeket, a cellánkénti másolás és a képernyőfrissítés kikapcsolása is hasznomra lesz még.
Derűs, dolgos munkanapot
-
ArchElf
addikt
válasz 26centi #1558 üzenetére
Használd akkor így:
Worksheets("missing cost centers").Activate
ActiveWorksheet.Rows(n).Select(vagy ActiveSheet - fejből nem tudom...)
AE
[ Szerkesztve ]
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]
-
Homer
tag
válasz 26centi #1558 üzenetére
Szia!
"A makrót ugyan a forrás munkalaphoz hoztam létre..."
Szerintem ezzel is lehet gond. Csinálj egy modult és másold át abba a makródat. Egy próbát megér.Közben rájöttem, hogy balgaságot írtam.
A Rows nem csak Stringet hanem integert is el kellene hogy fogadjon, tehát a
Rows("2:2").select-nek ugyan úgy működnie kéne mint a Rows(2)-nek.
Bocs. -
Baboka
tag
Sziasztok!
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:A50")) Is Nothing Then Exit Sub
If Selection.Cells.Count > 1 Then Exit Sub
If Target <> "" Then
Rows(Target.Row).Interior.ColorIndex = 10
Else
Rows(Target.Row).Interior.ColorIndex = xlNone
End If
End Subezt a programot szeretném úgy átalakítani hogy ha kijelölök egy cellát akkor az egész sort beszinezze, de ha másik cellát jelölök ki akkor az előző sor visszaálljon az előző állapotába.
-
Homer
tag
Szia!
Nem teljesen értettem amit akartál, de ha minden igaz akkor ilyesmi válaszra vársz.
Egyrészt az nem teljesen világos, hogy az intersect minek bele? Gondolom a több cella egyszerre történő kijelölése végett van benne, így ez esetben az általam javasolt megoldás nem működik majd. De azért gondolkodtam rajta. Tess:Public elozo, default As Integer
Const uj = 3Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Az új sor színének beállítására
Rows(Target.Row).Interior.ColorIndex = uj'Annak a vizsgálatára, hogy kell-e visszaállítani formátumot, azaz első kijelölés, vagy már volt előtte kijelölve valami?
If elozo <> 0 Then
Rows(elozo).Interior.ColorIndex = default
End If'Az előzőleg kijelölt sor száma
elozo = ActiveCell.Row' itt az eredeti cella formátumát kellene beállítani az 5 helyett de ezt pontosan nem értettem a leírásodból... :S
default = 5
End Sub -
Sweet Lou 6
addikt
Üdv.
Tud valaki linkelni olyan forrást, amelyből megtanulhatom a VB.NET szintaktikáját?
sweetlou6.wordpress.com
-
Homer
tag
válasz Sweet Lou 6 #1563 üzenetére
Üdv.
Pár könyv amiket én nézegettem:
Magyar és angol nyelven is elérhetők:
Fekete (és Kék) könyv. (Black book)
Alex Mackey - A NET 4.0 és a VS 2010Csak angol:
Visual Basic 2010 Programmer's Reference
Professional Visual Basic 2010 and .NET 4
Visual_Studio_2010_All-in-One_For_Dummies...és ha nagyon kezdő vagy (, mint én is), akkor ezek is hasznosak lehetnek, mert a VB alapok elsajátításához szerintem jók:
James Foxall - Tanuljuk meg a Visual Basic 2005 használatát 24 óra alatt
Demeter M. Ibolya - Visual Basic 6.0 lépésről lépésre
Juhász Tibor, Kiss Zsolt- Visual basic 2008-2010 Programozasi összefoglalo
Tóth Bertalan - Programozzunk vb rendszerben(Úgy írtam a neveket, hogy rákeresve gugliban az első-második találat már a közvetlen link lesz.)
[ Szerkesztve ]
-
martonx
veterán
-
martonx
veterán
válasz Sweet Lou 6 #1567 üzenetére
Pedig a videók elég beszédesek, legyenek bármilyen nyelven.
Én kérek elnézést!
-
Baboka
tag
Köszönöm ez egyelőre jó. Az előző formátumnál arra gondoltam hogy ez a színezés ez egy előre formázott táblázatban lesz, nagyon sok oszlopa van azért kell ez hogy az egész sort átszínezi ha rajta állok és ha más sorba kerül az aktív cella akkor, az előző sornak a formátumát állítsa vissza. Nem tudom mennyire írom érthetően, még eléggé amatőr vagyok VBA-ból
-
Homer
tag
Örülök, hogy segíthettem.
Egyébként ajánlok neked is egy könyvet:
Balogh Gábor - Visual Basic és Excel programozás
a neten megtalálod...Megpróbálom elmagyarázni mi nem volt teljesen világos:
- Szóval ha van egy táblázatod amiben minden sor (esetleg minden oszlop is) egyforma formátumú, akkor nem gond ha előre meghatározott stílust állítasz be default értéknek.
régi sor(x) stílus = régi formátum- Ha a sorok megegyeznek, de az oslopok formátuma eltér (pl színük más) akkor a cellék formátumát egyesével kell állítgatni.
régi cella(régi sor, oszlop(1...x)) formátuma = default cellastílus (régi sor, oszlop(1...x) formátuma- Ha az eredeti sorok formátumai is eltérnek egymástól (azaz különbözőek), akkor még bonyolultabb a helyzeted, mert a default értéket az eredeti stílus szerint kell meghatározni.
tehát pl a visszaállításnál a
cella1 stílus = eredeti cellaformátum1.oszlop
cella2 stílus = eredeti cellaformátum2.oszlop
...Tudom nem teljesen érthető a magyarázat, bocs.
-
EkSYS
senior tag
Sziasztok!
Abban tudna valaki segiteni hogy hogyan lehet egy combobox tartalmát betölteni egy adott tartományból? (esetleg egy egyszerü példa is hasznos lenne )
köszi!
Szerk: rá is jöttem:
Me.ComboBox1.List = Worksheets("Sheet1").Range("B12376").Value[ Szerkesztve ]
Eki - az eredeti
-
erich85T
csendes tag
Sziasztok!
Múltkor már írtam a fórumban, és kaptam is segítséget amiért nagyon hálás vagyok, nagyon megkönnyítette a munkámat. Azonban akadt egy másik problémám is amit megkellene oldanom excelben, remélem ismét sikerül valamiféle segítséget kapnom.
Feladat: Kamatszámítás
Adott egy excel táblázat egy „Tartozások”, valamint egy „Jegybanki alapkamat” munkalappal.
A „Tartozások” munkalapon az alábbi oszlopok vannak:
Tartozás kezdetének dátuma - Tartozás kiegyenlítésének dátuma – Név - Tartozás összege (kamat nélkül) - Tartozás összege (kamattal)
Az első 4 oszlopban lévő adatok adottak, nekem az 5. oszlopba kellene valamilyen módon Excel segítségével összeget számolnom a „Tartozás kezdetének dátuma „ valamint a „Tartozás kiegyenlítésének dátuma” alapján a „Jegybanki alapkamat” fülön lévő értékekkel.A probléma az, hogy egy adott kezdő dátumtól az adott kiegyenlítés dátumáig akár több jegybanki alapkamat változás is történik. Eszerint több jegybanki alapkamattal kell számolni az adott intervallumban ahhoz, hogy megkapjuk a „Tartozás összege (kamattal)” oszlop értékeit.
Tehát röviden: Egy kezdő és egy befejező dátum közötti intervallumban az alaptartozásra akarom megkapni a kamattal számolt tartozás összegét úgy, hogy az adott dátumtól dátumig lévő időszakban több jegybanki alapkamattal kell számolnom.
Excel fájl: http://muszakitanacsado.hu/doksi/kamatszamitas2.xlsx
Találkozott e már valakin hasonló feladattal? Van-e valakinek valamiféle megoldása rá? Excelben ez egyszerűen megoldható vagy makroprogramot kell rá írni?
Előre is köszönöm a hozzászólásokat!
-
martonx
veterán
válasz erich85T #1573 üzenetére
Hát fel kellett fognom a problémát. Makroval biztosan meg lehet oldani, de azzal sem egyszerű. Függvények szvsz erre nem alkalmasak.
Igaziból háttal ülsz a lovon. A nagy cégek nem véletlenül csinálják, hogy:
1. Vagy minden hónap végén ráteszik a késedelmi kamatot a folyószámlára, az éppen aktuális kamattal
2. Vagy a késedelmi kamat kiterhelésekori éppen aktuális kamattal számolnak, és ha pl. az ügyfél fizetni akar, vagy értesítőt küldenek neki, akkor ez az éppen aktuális szám szerepel rajta.
3. A kettő módszer keveréke, havonta ráteszik a késedelmi kamatot, akit pedig hó közben érdekel az aktuális állás, annak a 2-es módszerrel kiszámolják az utolsó hóközijét.
A szerződések apró betűs részeiben ez szerepelni is szokott. Éppen ezért, mert így utólag ember legyen a talpán, aki visszanézi a régi kamatokat, ezekhez számol munkanapokat, és a többi. Br...
De biztosan meg lehet csinálni, ha rengeteg időt rászánsz, biztos egész szép megoldások is születhetnek.
A problémád inkább algoritmikus jellegű, mintsem VB specifikus.Én kérek elnézést!
-
ArchElf
addikt
válasz martonx #1576 üzenetére
Elméletileg mindig az elszámolás napján (havi elszámolásnál mindig a hónap fix napján, éves elszámolásnál az év fix napján; stb.) érvényes kamatlábbal kell számolni.
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]
-
martonx
veterán
-
ArchElf
addikt
válasz martonx #1578 üzenetére
Hát, ha akkor tartozott és a szerződés szerint az aktuális kamatláb az irányadó, akkor az akkori értékekkel kell kiszámolni (már ha a szerződés pl az írja elő, hogy havonta kell nyilvántartani a tartozás mértékét).
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]
-
-
kozicsd
tag
Sziasztok
Lenne egy pár nagyon alap feladat, amit az öcsémnek meg kellene csinálnia. Én a vba-t nem vágom, ezért fordulok hozzátok, hogy le tudjam ellenőrizni. Nagyon fontos lenne
1.feladat:Írasd ki egy kollekció összes elemnének a nevét!
2.feladat:Az első 100 páratlan számot add össze!
3.feladat:Írj eljárást, ami az összes cellát nagybetűssé teszi!
4.feladat:Írj eljárást, ami paraméterként kap két fájlt, és az első fájl tartalmát belemásolja a másodikba!Köszönöm előre is a segítséget
üdv
Dávid -
-
ArchElf
addikt
válasz kozicsd #1583 üzenetére
C és VBA közti alapvető különbségek:
nincs { }
nincs ; a sor végén
nincs == helyette is = kell
nincs != helyette <> kell
nincs return, hanem Exit Funtion és Exit Sub
a visszaadandó értéket Function esetén a funkció nevének megfelelő változóba (nem kell inicializálni) kell tenni.
For-nak Next a párja, a break pedig az Exit For (continue nincs se for-ban, se loop-ban)
nem
if ( ... )
{ ... }
else
{ ... }
hanem
If ... Then
...
Else
...
End Ifnem
while (...)
{ ... } hanem
do while (...)
...
loop
ha egy metódus Sub és nem Function akkor nincs visszaadott érték és nem kell az argumentumokat zárójelbe tenni
Nem kell a változókat inicializálni (kivéve az osztályokat).+ van help, a metódusokat meg lehet találni benne
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]
-
vilag
tag
Halihó!
Egy újabb problémával találtam magam szemben VBA kapcsán.
Van nekem egy adattáblám ami, ugyebár tartalmazza az adatokat.
Userformon szeretnék keresést eszközölni a megfelelő kulcsadat segítségével.
A probléma pedig abban áll, hogy jelenleg csak úgy tudom visszakérni a megfelelő sor megfelelő oszlopának adatát, ha megmondom neki, hogy hanyadik oszlopból kérem vissza a kívánt adatot.
A cél viszont az lenne, hogy ne oszlopszámot kelljen megadnom, hanem az oszlopfejléc nevét, mert könnyen lehet, hogy még plusz oszlopokat kell közbeszúrnom, és ekkor minden egyes oszlopszámra hivatkozó kódrészletet újra kéne kézzel számolnom.
Jelenleg így használom:ComboBox4.Text = gtorzs.Cells(gsor, 7)
ahol gtorzs=a munkalap neve
gsor=a kiván sor sorszáma
7=oszlop számaTehát azt szeretném, hogy a "7" helyett legyen az oszlopfejléc neve (tudom, az hosszabb lesz, de így bárhová tehetném a táblán belűl).
Hogyan tudnám ezt kivitelezni?
Köszönöm a segítséget!
Üdv, vilag -
Homer
tag
Én úgy oldanám meg első körben, hogy a fejléc sorain végigmennék egy each cells in row(1) ciklussal, aztán egy változóban eltárolnám azt az oszlopszámot ahol a cella értéke megyezik a keresett oszlopnévvel. Ezután már hivatkozhatsz arra az oszlopra mint oszlop sorszám...
-
Homer
tag
Vagy pl:
Public Sub test()
Dim Keresett As String
Keresett = "Keresettoszlopszövege"
oszlop = 1
Dim megvan As Boolean
megvan = False
While Worksheets("Munka1").Cells(1, oszlop) <> Keresett And Not megvan And _ Worksheets("Munka1").Cells(1, oszlop) <> ""
oszlop = oszlop + 1
If Worksheets("Munka1").Cells(1, oszlop) = Keresett Then megvan = True
Wend
If megvan Then MsgBox (Keresett & " megvan, a következő oszlopban: " & oszlop) Else MsgBox ("Nincs meg")
End SubMondjuk ha a keresett oszlop pont az első akkor nem működik, de nem tartana sokáig módosítani, hogy azzal is működjön. (Neked is hagyok gondolkodni valót )
-
EkSYS
senior tag
sziasztok!
Ha valaki esetleg tud segíteni abban hogy miként lehet egy makró futása közben egy user inputtal várakoztatni a továbbfutást (mondjuk egy formon van több text és combo, és amikor ezek tartalmát ellenőríztetem egy makróval akkor ha üres textb.-t talál akkor klikkeljen bele a text.-be és egy msgbox vagy ok után menne tovább) , érdekelne
bEki - az eredeti
-
vilag
tag
Üdv!
Ez akár jó is lehetne, de túl hosszú és ha jól látom akkor minden egyes (keresett) oszlopfejléc szövegre meg kéne írni, ami több fáradtság lenne, mint ha minden egyes változáskor (ami mondjuk ritkán fog változni ha egyszer elkészült az egész) kézzel újraszámozom a megfelelő kódrészletet.
Nincs esetleg valami rövidebb megoldás?
Én gondoltam a vlookup-ra, de aztán elvetettem, minthogy meg kéne adni melyik oszlopban keresse a keresési értéket, de ha ezt tudnám akkor már nem volna szükség az egészre.
Tulajdonképpen nekem az is elég lenne, ha találnánk valami olyan megoldást ami megmondja, hogy a keresett szöveg milyen számú oszlop milyen számú sorában van (persze elég csak az oszlop száma is). Innen már nyert ügyünk lenne.
Egyébként köszönöm az eddigi ötletelést is!
-
Homer
tag
Ha olyan függvényt írsz ami paraméterként megkapja a keresett szöveget, visszaadási értéke pedig az oszlop száma, akkor elég egyszer megírni, utána használhatod a függvényt ahányszor, és ahol csak akarod!
Valahogy így:
private function oszlop(byval mitkeresel as string) as integer
itt, a fent leírt módszerrel a fejlécsor összes elemén végigmész, majd
ha megvan a keresett oszlop akkor
return keresettoszlopszám
else
msgbox("Nincs meg minden oszlop")
end[ Szerkesztve ]
-
martonx
veterán
A baj az, hogy amit szeretnél az kivitelezhető, de összetettsége miatt baromira nem egy fórum keretein belül.
Klasszikusan elértél arra a szintre, ahol vagy veszed a fáradtságot és magadtól kimókolod a megoldást, vagy fizetsz érte, és helyetted egy szabadúszó programozó valamelyik ráérős estéjén megcsinálja neked.Én kérek elnézést!
-
Homer
tag
válasz martonx #1594 üzenetére
Nem olyan bonyolult ez. Nekem nem ez a munkám, de érdekel a dolog.
Ezt hoztam össze:Public Sub proba()
....MsgBox (keres("h"))
End SubPublic Function keres(mit As String) As Integer
...Dim elem As Object
...Dim oszlop As Integer
...oszlop = 0
...For Each elem In Range("A1", "Q1")
.....oszlop = oszlop + 1
.........If mit = elem.Value Then
.............keres = oszlop
.........End If
...Next
End FunctionHogy olvashatóbb legyen bepontpontpontoztam. Persze ha picit még gondolkodnék rajta biztosan találnék más megoldást is. (Pl. az elem típusa nem túl elegáns object-ként kezelve, dehát műxik.)
A lényeg, hogy ha írsz egy ilyen function-t akkor azt bárhányszor meghívhatod a fenti sub-ban. Ez a megoldás A-tól Q oszlopig vizsgálja az egyezéseket. Ha nincs egyezés akkor 0-val tér vissza a függvény.
[ Szerkesztve ]
-
vilag
tag
Üdv!
Esetleg mit szóltok az excel "hol.van" (match) függvényére. Nekem úgy tűnik használható lenne az adott problémára.
Az ötlet egyébként a kollégámé, őt illeti a dícséret.
Microsoft excel súgó:
"A függvény egy olyan elem tömbben elfoglalt relatív pozícióját adja vissza, amely megadott értékkel megadott módon egyezik. A HOL.VAN abban különbözik a többi kereső függvénytől, hogy a megtalált elem helyét adja meg, és nem magát az elemet.Szintaxis
HOL.VAN(keresési_érték;tábla;egyezés_típus)
Keresési_érték: Az az érték, amelynek segítségével a táblázatban a keresett érték megtalálható."
-
Homer
tag
Én még sosem használtam eddig a HOL.VAN függvényt, de jah, igazad van! Azzal is meg lehet oldani a feladatot. (Mondjuk a fenti megoldásom is hasonló eredményt adna.)
A konkrét feladattól függ, hogy én melyiket használnám. Ha nem muszáj makrobizni, akkor én a helyedben megmaradnék a "gyári" függvényeknél...