-
IT café
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Új hozzászólás Aktív témák
-
Fferi50
őstag
válasz tgumis #23112 üzenetére
Szia!
Tettem fel ide egy kis példát. A combobox forrása az A2:A48 cellákban található. Hozzá van kapcsolva az F1 cellához.
Amikor elkezdesz gépelni valamit, akkor a megfelelő értékek automatikusan töltődnek, ha lehúzod a legördülő listát, onnan kezdődnek a választható értékek. Kiválasztod enterrel, majd kijelölsz egy cellát és rákattintasz. Ebbe a cellába automatikusan beíródik a combo (és az F1 cella) értéke.Remélem, segít neked ez a dolog.
Van még egy kikommentelt része is, ott a B oszlopot tölti folyamatosan, függetlenül attól, hogy hova kattintottál el a comboboxról.
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz botond187 #23116 üzenetére
Szia!
Képlettel nem lehet módosítani az adott cella tartalmát, mert az körkörös hivatkozás hibát ad.
Vagy makrót írsz, vagy a mellette levő cellába beírod a következő képletet:
B1-be pl. ="XY" & A1 ahol XY a két új karakter. Ezután a cellát kijelölve másol, beilleszt értéket és ezt teszed át az eredeti cellába.Üdv.
-
Fferi50
őstag
válasz Dolphine #23123 üzenetére
Szia!
Szinválasztásra ott a jobb egérgomb, cellaformázás, kitöltés. A három szined gyorsan ott lesz a kiválasztható szinek elején.
Vagyis beírod a jegyet, enter. Utána egérrel visszaállsz a cellára és végigcsinálod a fenti műveletet.De szerintem ennél sokkal jobb lenne, ha a három különböző eredményt 3 külön oszlopba írnád az adott tanulónál. Máris megvan oldva a probléma, még az oszlopot is színezheted, ha akarod.
Üdv.
-
Fferi50
őstag
válasz Dolphine #23138 üzenetére
Szia!
Javaslatom következő: (kicsit módosítva a már korábban leírtakat).
Beírod a számot a cellába,kijelölöd a számot, benne maradsz a cellában, jobb egérgomb - cella formázás, betűszint kiválasztod, ok. Utána enter.
Ki sem kell lépned a cellából a betűszínezéshez.Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz botond187 #23141 üzenetére
Szia!
Két dolog okozta a hibát:
1. Az első sortól indítottad a ciklust és így a cikkszámot is kereste, ami persze nem volt.
Ezért ezt a sort: For sor = 1 To usor át kell javítani erre: For sor = 2 To usor
2. Az A oszlopban vannak üres cellát, ami szintén hibát okoz. Vagy "eltünteted" az üres cellákat, vagy beírod a következő feltételt a makróba:
ehhez = Cells(sor, "A")
If ehhez <> "" Then
sorS = Application.Match(ehhez, Range("D:D"), 1)valamint a lezárását:
Next
End If
NextA félkövérrel szedett sorokat kell beszúrnod a másik kettő közé.
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz botond187 #23145 üzenetére
Szia!
A makró elejére írd be egy uj sorba:
Dim szamol as integerIde szúrd be a félkövér sort:
sorS = Application.Match(ehhez, Range("D:D"), 1)
szamol = 0
For sorK = 1 To usorIde szintén:
If Cells(sorK, "A") >= tol$ And Cells(sorK, "A") <= ig$ Then
If szamol = 6 Then Exit For
If Cells(sor, "B") = "" Then
És még ide:
End If
szamol = szamol + 1
End IfÜdv.
-
Fferi50
őstag
válasz botond187 #23162 üzenetére
Szia!
Itt az egész makró, hátha elírtál valamit:
Sub kieg()
Dim sor As Long, usor As Long, sorS, sorK As Long, szamol As Integer
Dim ehhez As String, tol$, ig$
Columns(2) = ""
usor = Range("A" & Rows.Count).End(xlUp).Row: sor = 1
For sor = 2 To usor
ehhez = Cells(sor, "A")
If ehhez <> "" Then
sorS = Application.Match(ehhez, Range("D:D"), 1)
szamol = 0
For sorK = 1 To usor
tol$ = Cells(sorS, "E"): ig$ = Cells(sorS, "F")
If Cells(sorK, "A") >= tol$ And Cells(sorK, "A") <= ig$ Then
If szamol = 6 Then Exit For
If Cells(sor, "B") = "" Then
Cells(sor, "B") = Cells(sorK, "A")
Else
Cells(sor, "B") = Cells(sor, "B") & "|" & Cells(sorK, "A")
End If
szamol = szamol + 1
End If
Next
End If
Next
End SubÜdv.
-
Fferi50
őstag
válasz Delila_1 #23187 üzenetére
Szia!
Bocsánat, hogy belekotyogok, de ha rész szövegre keresünk, akkor a Range.Find utasításban nem elég a lookat paraméter elhagyása.
A Find ugyanis megőrzi a korábbi beállításokat (gyakorlatilag a Ctrl+F nek a VBA megfelelője, olyannyira, hogy az ottani beállítások is "átjönnek" a makróba és viszont), tehát ajánlott beírni a lookat:=xlpart paramétert is hozzá - mivel ki tudja, hogy mit kerestek korábban.
Vagy ugyanazt eredményezi, ha marad a lookat:=xlwhole, de a keresendő betúk elé és mögé egy-egy csillagot teszünk. (Pl.: *lil* xlwhole beállításnál megtalálja a delila szót is - sőt, ebben az esetben nem is jó az xlPart beállítás!!!)De ha már makróról beszélünk, akkor inkább a Range.Replace utasítás jöhet szóba a fenti megkötésekkel, vagy a replace függvény.
Üdv.
-
Fferi50
őstag
Szia!
A makróban egy ciklussal végigmész a neveken, kitöltöd a nyilvántartó lapot, kiadod rá a printout parancsot (ha szükséges, előtte beállítod a pagesetup paramétereket).
A makróhoz segít a makórögzítő. Egy nyilvántartó lapot kinyomtatsz a makrórögzítővel és az eredmény lesz a ciklus belseje nagyjából. Egy kicsit bizonyára "szépíteni" kell majd rajta, de a mag az lehet.
A ciklus meg a neveket tartalmazó tartományon vagy változón megy végig.Üdv.
-
Fferi50
őstag
válasz billyjoe #23211 üzenetére
Szia!
Mi lenne, ha pivotok helyett szűrést és összegzést (vagy feltételes összegzést) használnál?
Másik megoldás, hogy az alapadatok egy külön excel fájlban vannak, a lekérdezések egy másikban. Akkor nem kell a nagy adatállományokat megnyitni a lekérdezések futtatásához.Ha valamilyen adatszerkezetet és egy-két pivot szerkezetet mutatnál mintának, ennél biztosan többet tudnánk segíteni.
(Nem az érzékeny adatokat kell feltenni és nem kell nagy adattömegnek sem lennie.)Milyen excel verziót használsz? (Év, nyelv)
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz m.zmrzlina #23212 üzenetére
Szia!
Annyi adat, ami itt lesz, már nem biztos, hogy befér az excel által kezelt memóriába.
Egyébként is, ha már excel, annak a lehetőségeit kellene kihasználni szerintem.Üdv.
-
Fferi50
őstag
válasz Des1gnR #23231 üzenetére
Szia!
A bajt az ide
" Range("K11").Select
End
endif"
beszúrt end parancs okozza, mert ez véget vet a program futásának azonnali hatállyal.
Ezt kellene kivenned és akkor nem áll le az első találatnál.Egyébként pedig:
Nem kell a selection, és nem kell activálni sem a megtalált értéket.
Próbáld így:For i = 2 To sheets("pm_nk_arlista_uj").usedrange.rows.count
set ujszam= Sheets("pm_nk_arlista_uj").UsedRange.columns(1).Find(What:=Sheets("pm_nk_arlista_uj").Cells(i, 1).Value, LookIn:=xlvalues, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False)
if not ujszam is nothing then
Sheets("pm_nk_arlista").Cells(lastRow + 1, 1).Value = Sheets("pm_nk_arlista_uj").Cells(i, 1).Value
Sheets("pm_nk_arlista").Cells(lastRow + 1, 2).Value = Sheets("pm_nk_arlista_uj").Cells(i, 2).Value
Sheets("pm_nk_arlista").Cells(lastRow + 1, 3).Value = Sheets("pm_nk_arlista_uj").Cells(i, 3).Value
Sheets("pm_nk_arlista").Cells(lastRow + 1, 4).Value = Sheets("pm_nk_arlista_uj").Cells(i, 4).Value
Sheets("pm_nk_arlista").Cells(lastRow + 1, 5).Value = Sheets("pm_nk_arlista_uj").Cells(i, 5).Value
Sheets("pm_nk_arlista").Cells(lastRow + 1, 9).Value = Sheets("pm_nk_arlista").Cells(2, 9).Value
lastrow=lastrow+1
End If
Next i
Üdv.[ Szerkesztve ]
-
Fferi50
őstag
válasz Des1gnR #23242 üzenetére
Szia!
Most látom, hogy egy kicsit "fordítva ültem a lóra".
Ezt a sort:
if not ujszam is nothing thencseréld ki erre lsz:
if ujszam is nothing thenMivel ez jelenti azt, hogy nem találta meg az új cikkszámot a régi listában.
Elnézést, hogy elnéztem, nem volt szándékos.
De az end parancs az egyértelmű futás megszakítást jelent, ezért lépett ki az első találat után.Üdv.
-
Fferi50
őstag
válasz Des1gnR #23244 üzenetére
Szia!
Tényleg nagyon figyelmetlen vagyok, hiszen rossz helyen kerestetem:
set ujszam= Sheets("pm_nk_arlista_uj").UsedRange.columns(1).Find(What:=Sheets("pm_nk_arlista_uj").Cells(i, 1).Value, LookIn:=xlvalues, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False)
helyett:
set ujszam= Sheets("pm_nk_arlista").UsedRange.columns(1).Find(What:=Sheets("pm_nk_arlista_uj").Cells(i, 1).Value, LookIn:=xlvalues, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False)Remélem, több elnézésem már nem lesz benne.....
Üdv.
-
Fferi50
őstag
Szia!
Mit értesz azalatt, hogy csak munkalapra linkelés? Akkor honnan tudtad, hogy melyik cellára vonatkozik? Viszont sajnos azt gondolom, csak kézzel - vagy makróval lehet átírni a hivatkozásokat, de ha az Adatok menüpontban a hivatkozásokra ránézel, akkor ott egyenként végig lehet menni rajta úgy emlékszem.
A makró nyelve most is "international", azaz angol. Tehát, ha makróból írsz képletet egy cellába, akkor a függvények angol nevét kell írnod. Van ugyan egy könnyítés a formulalocal property, amelyikkel a magyar neveket használhatod, DE akkor a makród nem lesz hordozható, mivel más nyelven nem érti majd meg a képletet.
Üdv.
-
Fferi50
őstag
válasz Delila_1 #23319 üzenetére
Szia!
Akkor azt javaslom, hogy a Thisworbook SheetSelectionChange eseménybe írja be a makrót:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
End SubA fenti két sor közé. Az Sh.name megmondja, hogy melyik munkalapon van éppen. Ezt megvizsgálva eldöntheti, hogy menjen-e a feltételes formázás vagy nem.
Nem kell sok-sok munkalapra másolni, csak egy változóban meg kell adni a munkalapok neveit, amit aztán többféle módon lehet ellenőrizni. (Pl. Instr függvény)
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz Delila_1 #23321 üzenetére
Szia!
Az igaz, hogy a makró a feltételes formázás törlésével indít, de ki tart vissza bennünket attól, hogy előtte elmentsük a feltételes formázásnak azt az értékét, amit meg akarunk változtatni (mert nyilván, nem az egész formázás fontos, hanem annak mondjuk a színe), amikor pedig "kilépünk" belőle, akkor visszaadjuk az eredeti értéket. (De most másban vagyok benne, nem érek rá megírni - bár nyilván csak pár sor.)
Üdv.
-
Fferi50
őstag
válasz Delila_1 #23339 üzenetére
Szia!
"Nem tudod eltárolni az adatokat."
Már miért ne tudnám. A formatcondition objektum egymaga tárolja a benne levő összes beállítást, nem kell mindenhez külön változó - még azt is tudja, hogy mely tartományra vonatkozik.
Tehát elég "csak" az adott területen található formatcondition objektumokat eltárolni. Igaz, az állapotok visszanyerése jóval bonyolultabb az eltárolásnál.Viszont amit én írtam, az egyetlen cellára vonatkozott, hiszen a feladat az volt, hogy a feltételeknek megfelelően történő ugrálásnál váltson színt a cella. Egy színt azért csak meg lehet jegyezni a cella címével együtt...
Üdv.
-
Fferi50
őstag
válasz Delila_1 #23344 üzenetére
Szia!
Szerintem nem beszéltünk el egymás mellett, de ez nem is lényeges.
A 2010-es exceltől biztosan (de valószínűleg a 2007-ben is már) igen egyszerűen megoldható a feladat:Public fmtcondis As New Collection
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim ujfmtr As FormatCondition, ujfmtc As FormatCondition, ujfmtt As FormatCondition
On Error Resume Next
If IsError(Target.Cells.Count) Then Exit Sub
On Error GoTo 0
If Target.Cells.Count <> 1 Then Exit Sub
If fmtcondis.Count > 0 Then
On Error Resume Next
For Each fmt In fmtcondis
fmt.Delete
fmtcondis.Remove 1
Next
On Error GoTo 0
End If
With Target
With .EntireRow
Set ujfmtr = .FormatConditions.Add(Type:=xlExpression, Formula1:="1")
With ujfmtr '.FormatConditions(1)
With .Borders(xlTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With
With .Borders(xlBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With
.Interior.ColorIndex = 20
.SetFirstPriority
End With
End With
fmtcondis.Add ujfmtr, "fmt1"
With .EntireColumn
Set ujfmtc = .FormatConditions.Add(Type:=xlExpression, Formula1:="1")
With ujfmtc '.FormatConditions(1)
With .Borders(xlLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With
With .Borders(xlRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 5
End With
.Interior.ColorIndex = 20
.SetFirstPriority
End With
End With
fmtcondis.Add ujfmtc, "fmt2"
Set ujfmtt = .FormatConditions.Add(Type:=xlExpression, Formula1:="1")
ujfmtt.Interior.ColorIndex = 36
ujfmtt.SetFirstPriority
fmtcondis.Add ujfmtt, "fmt3"
End With
End SubHiszen itt már be lehet szúrni "akárhány" feltételes formázást és elsőnek tenni, ha pedig megváltozik a kijelölés, akkor az előző formázást törölni.
Ha egy kijelölés közben megváltoztatod az oldalon a feltételes formázási szabályokat, akkor nem tudja a kijelölés elhagyása után letörölni a régi formázást - viszont, ha már úgyis benne vagy a szabályokban, egyszerűen ki kell törölni a kijelölésre vonatkozó feltételes formázásokat, utána az új kijelöléstől már ismét működik az automatizmus.2007. előttre olyan ötletem van, hogy az adott munkalapról csinálni kell egy másolatot és arról minden kijelölés váltásnál vissza kell másolni a formátumot az eredetire.
Üdv.
-
Fferi50
őstag
válasz Delila_1 #23348 üzenetére
Szia!
Ezt kell a Thisworkbook kódlapjára beírni:
Public kilepo As Boolean
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
If kilepo Then Exit Sub
Application.ScreenUpdating = False
ActiveCell.Offset(0, 1).Select
ActiveCell.Offset(0, -1).Select
Application.ScreenUpdating = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Munka1.fmtcondis.Count > 0 Then
For Each fmt In Munka1.fmtcondis
fmt.Delete
Munka1.fmtcondis.Remove 1
Next
End If
If MsgBox("Valóban kilép?", vbQuestion + vbYesNo, "Bezárás") = vbNo Then
Application.ScreenUpdating = False
ActiveCell.Offset(0, 1).Select
ActiveCell.Offset(0, -1).Select
Application.ScreenUpdating = True
Cancel = True
Else
valasz = MsgBox("Menti a változásokat?", vbQuestion + vbYesNoCancel, "Bezárás")
If valasz = vbNo Then
ThisWorkbook.Saved = True
kilepo = True
ElseIf valasz = vbYes Then
kilepo = True
ThisWorkbook.Save
Else
Application.ScreenUpdating = False
ActiveCell.Offset(0, 1).Select
ActiveCell.Offset(0, -1).Select
Application.ScreenUpdating = True
Cancel = True
End If
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Munka1.fmtcondis.Count > 0 Then
For Each fmt In Munka1.fmtcondis
fmt.Delete
Munka1.fmtcondis.Remove 1
Next
End If
End Sub
Private Sub Workbook_Open()
Application.ScreenUpdating = False
ActiveCell.Offset(0, 1).Select
ActiveCell.Offset(0, -1).Select
Application.ScreenUpdating = True
End SubEzzel elérhető, hogy a "célkeresztet" nem menti le, de a fájl megnyitásakor első dolga, hogy létrehozza: ezért lép oda-vissza egyet az aktív munkalapon.
Mentés előtt eltünteti a célkeresztet, de ha csak mentés volt, utána vissza is hozza.
Kilépéskor végigjátssza a verziókat, ha mégsem lép ki, akkor marad a célkereszt.Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
-
Fferi50
őstag
Szia!
A szövegből először oszlopokat csinálsz a "megtalált opcióval" mondjuk az A1-től kezdődően.
Azután kijelölöd a kivánt adatokat a sorban.
Másolás
Kijelölöd az A2 cellát.
Irányított beillesztés - transzponálás
Máris oszlopban sorakoznak a számaid.
Utána még nyomj egy ESC-t, hogy kilépj a másolás módból.Üdv.
-
Fferi50
őstag
válasz Delila_1 #23348 üzenetére
Szia!
Sikerült még rövidítenem a Thisworkbook BeforeClose -on:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If MsgBox("Valóban kilép?", vbQuestion + vbYesNo, "Bezárás") = vbNo Then
Cancel = True
Else
valasz = MsgBox("Menti a változásokat?", vbQuestion + vbYesNoCancel, "Bezárás")
If valasz = vbCancel Then Cancel = True: Exit Sub
If Munka1.fmtcondis.Count > 0 Then
For Each fmt In Munka1.fmtcondis
fmt.Delete
Munka1.fmtcondis.Remove 1
Next
End If
If valasz = vbNo Then
ThisWorkbook.Saved = True
kilepo = True
Else
kilepo = True
ThisWorkbook.Save
End If
End If
End Sub -
-
Fferi50
őstag
válasz Delila_1 #23370 üzenetére
Szia!
Itt egy példa:
Ez a munka1 munkalapon működik. (Munka2-t felejtsd el, csak nem töröltem ki.)
Ha közben makrót írsz, akkor elképzelhető a hibára futás. Viszont ezt el tudod kerülni azzal, hogy a munka1-en levő, a célkereszthez tartozó feltételes formázásokat a feltételes formázás kezelővel kitörlöd, a többit viszont hagyd változatlanul.Utána ha lépsz egyet, megjön a célkereszt ismét.
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz bteebi #23407 üzenetére
Szia!
"For i = 1 To Worksheets.Count
If Left(ws.Name, 5) = "Lista" Then"Hol adod meg a ws értékét?
Helyette: For each ws in activeworkbook.worksheets
if left(ws.name,5)="Lista" then" ws.Activate
For Each cella In ActiveSheet.UsedRange"Nem kell aktívvá tenni a munkalapot, hogy tudj vele dolgozni.
Helyette: For Each cella in ws.usedrangeViszont akkor e helyett " Sheets("Összefoglaló").Cells(j, 3).Value = Cells(5, cella.Column) & " - " & Cells(cella.Row, 1) & " - " & Cells(6, cella.Column)"
ezt kell írnod: Sheets("Összefoglaló").Cells(j, 3).Value = ws.Cells(5, cella.Column) & " - " & ws.Cells(cella.Row, 1) & " - " & ws.Cells(6, cella.Column)
A végén levő next i helyett pedig sima next (az első for each bezárására).
Üdv.
-
Fferi50
őstag
Szia!
Szerintem ez elég bonyolult makróval oldható meg csak, mivel a feltételes formázás feltételeit kell megvizsgálnod, hogy az adott cellára melyik teljesült.
Makróban pl. a cells(1,1).formatconditions(x).interior.color adja meg a szín számát, ahol
cells(1,1) az A1 cella, formatconditions(x) az x-edik feltételes formázás. Hogy hány feltételes formázás van az adott cellánál, azt pedig a cells(1,1).formatconditions.count eredménye adja meg.
De a feltételes formázásnak sok egyéb tulajdonsága is van még, amiket mind meg kellene nézni, hogy teljesül-e a cellára (típusa, a tipustól függően a hozzá tartozó kifejezés, operátor....).
Én most nem vállalkoznék egy ilyen makró megírására....Üdv.
-
Fferi50
őstag
válasz m.zmrzlina #23418 üzenetére
Szia!
Ez a kód 2010-es verziótól jó. Korábbi verziókban nem működik.
Üdv.
-
Fferi50
őstag
Szia!
Csinálsz egy un. "belépő" lapot. Amikor belép a felhasználó, csak ezt látja.
Egy cellát "kinevezel" felhasználónak ezen a munkalapon. Ehhez rendeled adatérvényesítéssel (adatok - érvényesítés - lista) a lehetséges belépők listáját - amit tehetsz egy elrejtett munkalapra, vagy az adott munkalap nem látható/elrejtett oszlopába.
Amikor belép,csak ez a "belépő" munkalap látszik, a legördülő listából kiválasztja magát. Ha ez megtörtént, megmutatod neki az ügyeleti beosztást. Ha nem választ a listából, akkor csak a "belépő" lapot látja továbbra is. (A nem választást úgy figyelheted, hogy adsz egy "semleges" értéket a lista elejére (pl. Válassz), ami megjelenik belépéskor. Ha a cella értéke ez, akkor még "nem lépett be".Üdv.
-
Fferi50
őstag
válasz Mittu88 #23446 üzenetére
Szia!
Akkor produkálja ezt a hibát szerintem, ha a selection_change úgy következett be, hogy nem volt előtte egyik cellában sem változás (pl. egy celláról simán tab-bal ment tovább valaki, vagy csak belekattintott valahonnan).
Próbáld ezt a selection_change -nél, mielőtt a cells(sor,1) utasításra mennél:
if sor=0 then msgbox "Nem volt változás" :exit subTermészetesen a then után azt írsz be, amit szeretnél, hogy végrehajtódjon. Pl. adhatsz értéket a sor változónak.
Üdv.
-
Fferi50
őstag
Szia!
Szerintem a makrót a teljes nevével kell meghivatkozni. Ezt meglesheted, ha megnyitod mindkét munkafüzetet, majd a fejlesztőeszközök - makrók menüpontra kattintva láthatod, hogy az aktív munkafüzet makrói "simán", a másik munkafüzetéi pedig "hosszú névvel" vannak az ablakban.
Ez alapján próbáld.
(Bár én inkább beletenném az y makrót is az első munkafüzetbe (ha lehet), pláne, ha utána már nem csinál semmit egyik munkafüzet sem.)
Üdv.
-
Fferi50
őstag
Szia!
A ciklus(ok) kb. így néznének ki:
sub masolom()
set m1=sheets("Munka1") ' ahonnan másolok
set m2=sheets("Munka2") ' ahova másolok
m2sor=2 'ide jön a másolás első sora
for xx= 2 to m1.usedrange.rows.count
if not isempty(cells(xx,1)) then
for yy=2 to 13
m2.cells(m2sor,1).value=m1.cells(xx,1).value
m2.cells(m2sor,2).value=m1.cells(xx,yy).value
m2.cells(m2sor,3).value=yy-1
m2sor=m2sor+1
next
endif
next
end subElvileg a Munka1 munkalap minden sorát átmásolja a Munka2-be függőlegesen, az első oszlopba beírja mindig a terméknevet, a második oszlopba a hónap adatát, a harmadik oszlopba a hónap számát.
Üdv.
-
Fferi50
őstag
válasz Mittu88 #23467 üzenetére
Szia!
A Public deklaráció nem azt jelenti, hogy globálisan van generálva a változó. Az osztálymodulokban (Thisworkbook, Munkalapok kódmoduljai, stb) deklarált Public változók is elérhetőek mindenhonnan, csak az általam korábban már mutatott módon. (Ha elkezded írni bárhol máshol pl. Thisworkbook. a pont után láthatod a többi tulajdonság között a Public módon deklarált változókat is.)
A Global deklaráció csak standard (nem osztály) modulban használható.
A Public deklaráció standard modul esetén szintén nem kér teljes nevet, mert ott megtalálja.Üdv.
-
-
Fferi50
őstag
válasz m.zmrzlina #23542 üzenetére
Szia!
Paraméteresen is definiálhatod az egyes makrókat és akkor minden meghíváskor meg tudod mondani neki, hogy melyik változó melyik értékét használja.
pl. sub valami (byval valt1 as string,byref valt2 as integer)
eljárás
end subA byval és byref jelentőségét olvasd el a súgóban, illetve az előző hsz.-ban foglaltak miatt is a változók élettartama (variables scope) részt is.
Egy másik lehetőség:
Az egyes változó értékét "eltárolod" egy munkalap cellájába. Ide írják ki az egyes makrók az értékét és innen olvashatják ki mások az értéket. Ebben az esetben nem kell public változót használnod, sem paraméters meghívást, helyette minden eljárásból kilépéskor utolsó műveletek a változók értékeinek beírása az adott cellákba, az eljárások indulásakor pedig a változókba beolvasod a cellák értékét.Ebben az esetben a cellákban mindig a legutoljára eltárolt érték lesz benne és az olvasható ki, így megoldódik a legutóbbi kérdésedben levő probléma is.
Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
válasz m.zmrzlina #23546 üzenetére
Szia!
Így van, elég így csinálni, de ennyi viszont kell.
Üdv.
Új hozzászólás Aktív témák
- Big Box PC játékok
- Windows Server 2016, 2019, 2022 Standard, Datacenter, Essentials termékkulcsok - MEGA akció!
- Office Professional Plus 2013, 2016, 2019, 2021 RETAIL licenckulcsok - MEGA Akció!
- Windows 10, 11 Professional, Home, Enterprise licenckulcsok 64, 32 bit - MEGA Akció!
- 3db eredeti PC játékok
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Ozeki Kft.
Város: Debrecen