2417
megoldást keresek erre a problémára
  • Delila1
    #1054
    Az Eszközök/Bővítménykezelőben kapcsold be a két Analysis kezdetűt, attól valószínűleg helyrejön.
    Ez a két bővítmény egy halom hasznos új függvényt ad, érdemes tanulmányozni.
  • Silius
    #1053
    Dede a program tökéletes, egészen addig amíg elmentem, és kilépek.
    Ha megnyitom utána, akkor a kijelölés az eredeti helyén marad, és hibába kattintok máshova, már csak a normál keret működik, mintha nem is lett volna benne makró, viszont ahol volt, ott úgy marad, mintha formázva lennének a cellák.
  • Delila1
    #1052
    Nem ez volt az eredeti kérés?
    "ha én rákattintok egy cellára, akkor az adott sort kiemelje? A jobb átláthatóság érdekében..."

    Akkor mit is akarsz? Írd le pontosabban.
  • Silius
    #1051
    Szia
    Működik, egészen addig, míg mentek, majd kilépek, és belépéskor ott marad a kijelölés, és minden marad a régiben.
  • Delila1
    #1050
    Ezt a makrót (sajnos) nem én írtam. Ahhoz a laphoz kell rendelned, amelyiken ki akarod emelni a sort: lapfülön jobb klikk, Kód megjelenítése. Bejutottál a makrószerkesztőbe, a jobb oldalon kapott üres területre másold be.


    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Cells.FormatConditions.Delete
    With Target
    With .EntireRow
    .FormatConditions.Add Type:=xlExpression, Formula1:="1"
    With .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
    End With
    End With
    With .EntireColumn
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:="1"
    With .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
    End With
    End With

    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlExpression, Formula1:="1"
    .FormatConditions(1).Interior.ColorIndex = 36
    End With
    End Sub
  • Silius
    #1049
    Sziasztok
    Excelben be lehet azt állítani, hogy ha én rákattintok egy cellára, akkor az adott sort kiemelje? A jobb átláthatóság érdekében...
  • Delila1
    #1048
    Kis hozzáértéssel meg lehet adni a cellák méretét mm-ben.

    Az Excellel hihetetlen sok feladatot meg lehet oldani, de ahhoz ismerni kell a működését. Nulla ismerettel nem megy!
  • Yan
    #1047
    mert számolásra van :)
    amire neked kell arra tényleg a word
  • takitibi
    #1046
    Hali!
    Köszönöm!Igen, ez a legegyszerűbb fatengelyes elv, csak az a gond, hogy ha mindent ami sallang hó fehérre tolok, akkor van a bibi, ugyanis nem látom hova meg mit is írok be fekete színnel. :) Érted?!
    Azért köszönöm!Mivel rájöttem h az excel fos úgy ahogy van, mivel nem lehet megadni egy cella méretét mm-ben, vagy cm-ben, így word-ben szerkesztem tovább a mai nap ezt a munkalap szerű táblázatot. Nem egyszerű eset. Na majd kitalálom.
  • tigerbácsi
    #1045
    hello!
    azon cellák amelyek nem kellenek (sallang) azoknak a betűszíneit változtasd a háttér színére. gondolom fehérre. s akkor csak azokat fogod látni mik kellenek s azt is fogja kinyomtatni. szerintem más megoldás nincs, de ha türelmesebb vagy s van akkor majd kapsz választ.
  • takitibi
    #1044
    Kedves Fórumtársak!
    Olyan kérdésem lenne, hogy ha excelben akarok nyomtatni egy nyomtatványt mátrix nyomtatóval úgy, hogy csak az értékek nyomtatódjanak a megfelelő részen a papírra, és a többi sallang ne (megszerkesztett keret, címek, stb..) , akkor azt hogyan tudom megcsinálni?
    Valahogy egybe kellene fagyasztani az alap táblázatot, és csak az utólagosan beírt értékeket szeretném kinyomtatni.
    Köszönöm!
  • Higany
    #1043
    Sziasztok! Egy olyan kérdésem lenne, hogy valahogy sikerült eltüntetni azt, hoyg ha belekattintok egy cellába, akkor megjelenjen a fekete keret. Nem tudjátok, hol lehetne visszaállítani? Köszi!
  • Delila1
    #1042
    Az első makró (#1007) még a laphoz volt rendelve, és a B12 cella változását figyelte. Utána írtad, hogy választéklistából kerül be az adat, amit már nem lehet eseményvezérléssel figyeltetni. Ahhoz írtam a "szortiroz" makrót, ezt már nem a laphoz kell rendelni. Bemész a VB szerkesztőbe (Alt+F11), kiválasztod bal oldalon a füzetedet, Insert menü, Module. A jobb oldalon kapott üres lapra kell bemásolnod.
    Visszatérsz az Excelbe. Alt+F8-ra bejönnek a makrók, a kiválasztott "szortiroz"-hoz az Egyebek gomb segítségével gyorsbillentyűt rendelhetsz. Amikor kiválasztasz az A1-ben egy számot, a Ctrl+a megadott billentyű a helyére teszi.
    Bemásoltam a mostani változatot, elég sajátságos az elrendezés, nem látok benne rendszert, de te tudod, mit akarsz.
    Az első adatot mindegyik oszlopban a 6. sorba írja, a következőt alá, az jó. Nem értem, mi a gondod.
  • mcngoht
    #1041
    Ezzel a makróval milehet a baj? Csak egy-két dolgot írtam át rajta, de azok csak az oszlopok elhelyezését módosította, szerintem. Csak a 6. sorokba ír, és nem megy tovább..

    Sub szortiroz()
    Dim a As Variant, oszlop As Integer, usor As Integer
    Dim k As Integer, sz As String

    a = Left(Cells(1), 5)
    Select Case a
    Case 10000
    oszlop = 11: k = 5: GoTo Szort
    Case 20000
    oszlop = 12: k = 5: GoTo Szort
    Case 30000
    oszlop = 15: k = 5: GoTo Szort
    Case 40000
    oszlop = 20: k = 5: GoTo Szort
    Case 50000
    oszlop = 25: k = 5: GoTo Szort
    End Select

    a = Left(Cells(1), 4)
    Select Case a
    Case 1000
    oszlop = 8: k = 4: GoTo Szort
    Case 2000
    oszlop = 9: k = 4: GoTo Szort
    Case 3000
    oszlop = 14: k = 4: GoTo Szort
    Case 4000
    oszlop = 19: k = 4: GoTo Szort
    Case 5000
    oszlop = 10: k = 4: GoTo Szort
    End Select

    a = Left(Cells(1), 3)
    Select Case a
    Case 100
    oszlop = 5: k = 3: GoTo Szort
    Case 200
    oszlop = 6: k = 3: GoTo Szort
    Case 300
    oszlop = 13: k = 3: GoTo Szort
    Case 400
    oszlop = 18: k = 3: GoTo Szort
    Case 500
    oszlop = 7: k = 3: GoTo Szort
    End Select

    a = Left(Cells(1), 2)
    Select Case a
    Case 10
    oszlop = 2: k = 2: GoTo Szort
    Case 20
    oszlop = 3: k = 2: GoTo Szort
    Case 30
    oszlop = 24: k = 2: GoTo Szort
    Case 40
    oszlop = 17: k = 2: GoTo Szort
    Case 50
    oszlop = 4: k = 2: GoTo Szort
    End Select

    a = Left(Cells(1), 1)
    Select Case a
    Case 1
    oszlop = 21: k = 1: GoTo Szort
    Case 2
    oszlop = 22: k = 1: GoTo Szort
    Case 3
    oszlop = 23: k = 1: GoTo Szort
    Case 4
    oszlop = 16: k = 1: GoTo Szort
    Case 5
    oszlop = 1: k = 1: GoTo Szort
    End Select

    Szort:
    sz = Trim(Cells(1) & "")

    If Cells(6, oszlop) > "" Then
    usor = Cells(65536, oszlop).End(xlUp).Row
    Cells(usor + 1, oszlop) = Right(sz, Len(sz) - k)
    Else
    Cells(6, oszlop) = Right(sz, Len(sz) - k)
    End If
    End Sub
  • Delila1
    #1040
    Ha az ezres és tízezres nagyságrendet azonos oszlopba írta, akkor te írtál el valamit a makróban. Most innen (#1036) másoltam be a VB-be, és hibátlan. Mielőtt kitettem ide, leellenőriztem mindenféle számmal.

    Megírtam az újabb óhajodnak megfelelően. Innen másold be, hogy ne legyen elírás.


    Sub szortiroz()
    Dim a As Variant, oszlop As Integer, usor As Integer
    Dim k As Integer, sz As String

    a = Left(Cells(1), 5)
    Select Case a
    Case 10000
    oszlop = 5: k = 5: GoTo Szort
    Case 20000
    oszlop = 10: k = 5: GoTo Szort
    Case 30000
    oszlop = 15: k = 5: GoTo Szort
    Case 40000
    oszlop = 20: k = 5: GoTo Szort
    Case 50000
    oszlop = 25: k = 5: GoTo Szort
    End Select

    a = Left(Cells(1), 4)
    Select Case a
    Case 1000
    oszlop = 4: k = 4: GoTo Szort
    Case 2000
    oszlop = 9: k = 4: GoTo Szort
    Case 3000
    oszlop = 14: k = 4: GoTo Szort
    Case 4000
    oszlop = 19: k = 4: GoTo Szort
    Case 5000
    oszlop = 24: k = 4: GoTo Szort
    End Select

    a = Left(Cells(1), 3)
    Select Case a
    Case 100
    oszlop = 3: k = 3: GoTo Szort
    Case 200
    oszlop = 8: k = 3: GoTo Szort
    Case 300
    oszlop = 13: k = 3: GoTo Szort
    Case 400
    oszlop = 18: k = 3: GoTo Szort
    Case 500
    oszlop = 23: k = 3: GoTo Szort
    End Select

    a = Left(Cells(1), 2)
    Select Case a
    Case 10
    oszlop = 2: k = 2: GoTo Szort
    Case 20
    oszlop = 7: k = 2: GoTo Szort
    Case 30
    oszlop = 12: k = 2: GoTo Szort
    Case 40
    oszlop = 17: k = 2: GoTo Szort
    Case 50
    oszlop = 22: k = 2: GoTo Szort
    End Select

    a = Left(Cells(1), 1)
    Select Case a
    Case 1
    oszlop = 1: k = 1: GoTo Szort
    Case 2
    oszlop = 6: k = 1: GoTo Szort
    Case 3
    oszlop = 11: k = 1: GoTo Szort
    Case 4
    oszlop = 16: k = 1: GoTo Szort
    Case 5
    oszlop = 21: k = 1: GoTo Szort
    End Select

    Szort:
    sz = Trim(Cells(1) & "")

    If Cells(10, oszlop) > "" Then
    usor = Cells(65536, oszlop).End(xlUp).Row
    Cells(usor + 1, oszlop) = Right(sz, Len(sz) - k)
    Else
    Cells(10, oszlop) = Right(sz, Len(sz) - k)
    End If
    End Sub
  • Delila1
    #1039
    A SZUMHA függvény lesz a barátod.
  • Sweetraver
    #1038
    Hellósztok!

    Lenne 1 kérdésem excelben, remélem tudtok segíteni!
    Szóval az lenne h van egy táblázatom, ahol nevek és fizetendő összegek vannak. S ezt kellene átírnom egy másik táblázatba, úgy hogy ha változik a név, akkor az összeg is. Ez meg is van egy szűrő illetve FKERES függvénnyel, ami rákeres az adott névre. Viszont a gond akkor van ha a név kétszer szerepel, akkor csak az elsőt írja ki, a második összeget nem. Erre tudtok valami h azt is kírja? (úgy mint az első összeget, hogyha változik a név akkor ez is)

    Pl:

    Kovács János 3245
    Nagy Béla 1457
    Kovács János 1241

    Így kellene: (egymás mellé, külön)
    Kovács János
    Fizetendő:
    3245 1241
  • mcngoht
    #1037
    Ez nagyon jó! :) Köszönöm, annyi gond van még, hogy valamiért az 1000201006282010 és a 10000201006282010-et egy oszlopba írja... ugyanez a 2000 és a 20000-el kezdődőeknél is. Egyébként azt még meg lehet oldani, hogy az oszlopba már csak az első számjegyek utáni számokat írja be? Tehát ne azt írja h 1000201006282010, hanem azt h 201006282010.
  • Delila1
    #1036
    Ha úgy értetted,ahogy az előbbi hozzászólásban leírtam, itt a makró.
    Ha az előbbi hozzászólásomban leírtak szerint szeretnéd szétválogatni az adataidat, itt van hozzá a makró:

    Sub szortiroz()
    Dim a As Variant, oszlop As Integer, usor As Integer

    a = Left(Cells(1), 5)
    Select Case a
    Case 10000
    oszlop = 5: GoTo Szort
    Case 20000
    oszlop = 10: GoTo Szort
    Case 30000
    oszlop = 15: GoTo Szort
    Case 40000
    oszlop = 20: GoTo Szort
    Case 50000
    oszlop = 25: GoTo Szort
    End Select

    a = Left(Cells(1), 4)
    Select Case a
    Case 1000
    oszlop = 4: GoTo Szort
    Case 2000
    oszlop = 9: GoTo Szort
    Case 3000
    oszlop = 14: GoTo Szort
    Case 4000
    oszlop = 19: GoTo Szort
    Case 5000
    oszlop = 24: GoTo Szort
    End Select

    a = Left(Cells(1), 3)
    Select Case a
    Case 100
    oszlop = 3: GoTo Szort
    Case 200
    oszlop = 8: GoTo Szort
    Case 300
    oszlop = 13: GoTo Szort
    Case 400
    oszlop = 18: GoTo Szort
    Case 500
    oszlop = 23: GoTo Szort
    End Select

    a = Left(Cells(1), 2)
    Select Case a
    Case 10
    oszlop = 2: GoTo Szort
    Case 20
    oszlop = 7: GoTo Szort
    Case 30
    oszlop = 12: GoTo Szort
    Case 40
    oszlop = 17: GoTo Szort
    Case 50
    oszlop = 22: GoTo Szort
    End Select

    a = Left(Cells(1), 1)
    Select Case a
    Case 1
    oszlop = 1: GoTo Szort
    Case 2
    oszlop = 6: GoTo Szort
    Case 3
    oszlop = 11: GoTo Szort
    Case 4
    oszlop = 16: GoTo Szort
    Case 5
    oszlop = 21: GoTo Szort
    End Select

    Szort:
    usor = Cells(65536, oszlop).End(xlUp).Row
    If Cells(10, oszlop) > "" Then
    Cells(usor + 1, oszlop) = Cells(1)
    Else
    Cells(10, oszlop) = Cells(1)
    End If
    End Sub


    Rendelhetsz hozzá gyorsbillentyűt: Alt+F8 -ra bejönnek a makrók. Kijelölöd a szortiroz nevűt, az Egyebek gombra kapsz egy párbeszéd ablakot, ahol a Ctrl+ mellé beírod a betűt, amelyikkel a billentyűzetről indíthatod.
    Gombhoz is rendelheted.
  • Delila1
    #1035
    A 3 termékkódod három féle hosszúságú.
    Hány külön oszlop kell?

    A10-től 1; B10-től 10; C10-től 100; D10-től 1000; E10-től 10000
    F10-től 2; G10-től 20; H10-től 200; I10-től 2000; J10-től 20000
    .
    .
    U10-től 5; V10-től 50; W10-től 500; X10-től 5000; Y10-től 50000 kezdetűek?
  • na rob
    #1034
    Erre miért kell makró? Egy szabad oszlopban megjelenited A1 első karakterét left fg-el. Majd pivottábla, amit úgy alakitasz ki ahogy akarsz.
  • mcngoht
    #1033
    Ja és a lényeget megint kifelejtettem, hogy nem kézzel van beírva az A1-be, hanem egy legördülő választék listábol lehet kiválasztani ezeket a kódokat, és a kiválasztott szám megy az A1-be.
  • mcngoht
    #1032
    Tehát az lenne a lényeg, hogy beírok egy értéket egy cellába, legyen ez az "A1". Az ide beírt érték első számjegyeit kell figyelnie a makrónak. Ezek termék kódok, pl ílyenek lehetnek: 5201006272010, 10201006272010, 100201006272010. Az első számjegyek lehetnek 1, 2, 3, 4, és 5 számjegyűek. És ezeket szortírozni kellene, 5201006272010-ezt pl az 5-el kezdődőek oszlopába kellene írnia, az A10-be, és ha még egy 5-el kezdődő előfordul, akkor azt az A11-be. 10201006272010-ezt a 10-el kezdődőekhez kellene írnia a B10-be. 100201006272010-ezt a 100-al kezdődőekhez, és így tovább...
  • Delila1
    #1031
    Ha jól értem, akkor az A1-be írsz közvetlenül, tehát ennek a változását kell figyeltetni.
    Az eredeti makró nem figyeli, hogy a B2-be bevitt érték hány számjegyből áll. Akkor ezt kérted: "...beírok egy értéket mondjuk B2-be és ha az 10-el kezdődik akkor azt tegye a B10-be ha még egy 10-el kezdődőt írok akkor azt a B11-be írja. És ha 20al kezdődőt írok akkor azt a C10-be tegye és így tovább..?". A 10-zel kezdődő szám minimum 2, maximun akárhány számjegyű lehet.
    Arra tippelek, hogy beviszel egy értéket az A1 cellába. Attól függően, hogy ez hány számjegyből áll, a B2, C2, és D2 cellákba kell szortírozni, illetve ha már van ezekben érték, a B, C és D oszlop következő sorába kell másolni az A1-be beírt értéket.
    Kérlek, ugorj neki újra, és próbáld meg pontosan leírni, mire van szükséged. Ha lehet, kicsit bőkezűbben bánj a mondatrészeket elválasztó vesszőkkel, mert ezek nélkül kicsit nehezen lehet követni a mondanivalódat.
  • mcngoht
    #1030
    Még annyit változtattam az előző makrón hogy nem mindíg 2 számjegyű az érték, és átírtam "a = Left(Target, 2)" -ezt 3-ra, 4-re. És ahol más a számjegy ott változott "If Target.Address = "$B$2" Then" -ez is. C2-re D2-re. És ezért kellett egy képlet. Az A1-be beírt érteket egy HA fügvény dönti el hogy hány számjegyű és, hogy a B2, C2 vagy D2-be kell-e írnia. Csak ha ezekbe a cellákba beírja, nem működik a makró :S és nem írja be az oszlopokba.
  • Delila1
    #1029
    Írd meg a B2 képletét.
    Az érdekel, hogy melyik cella (cellák) értékének változása módosítja a B2-t.
  • mcngoht
    #1028
    Szia Delina! Emlékszel még arra a makróra amit nekem írtál?

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim a As String
    If Target.Address = "$B$2" Then
    a = Left(Target, 2)
    If a = "10" And Cells(11, 2) = "" Then
    Cells(11, 2) = Target
    Exit Sub
    End If
    If a = "10" And Cells(11, 2) > "" Then _
    Cells(Range("B65536").End(xlUp).Row + 1, 2) = Target
    If a = "20" And Cells(11, 3) = "" Then
    Cells(11, 3) = Target
    Exit Sub
    End If
    If a = "20" And Cells(11, 3) > "" Then _
    Cells(Range("C65536").End(xlUp).Row + 1, 3) = Target
    End If
    End Sub

    Valahogy így nézett ki.. Olyan probléma merült fel, hogy a "B2"-be beírt érték, nem kézzel van beírva, hanem egy képlettel kerül oda. És így nem akar működni :S erre van valamilyen megoldás? Esetleg egy gombbal működne?
  • Delila1
    #1027
    A szimulációs miben van írva? Ha Excelben, akkor nem a laphoz, hanem a ThisWorkbook-hoz kell rendelni. A végére tegyél a Msgbox-ot, ami szól, hogy végzett.
    Egyébként, ha a ThisWorkbook-hoz rendeled, a laphoz rendelt Worksheet_Change érzékeli a beírást.
  • iscasC
    #1026
    Köszönöm a változós beíró dolgot!

    A másik problémát meg még mindig nem tudtam megoldani. Amikor először próbáltam megoldani azt a problémát én is a "change" utasítást használtam. De sajnos a ez a parancs nem érzi ha a szimulációs program frissíti a táblát, tehát beírja a cellákba az értékeket meg kiírja hogy "Results Availablet", olyan mintha nem történne változás. :S

    Az is megoldás lehetne ha időnként (mondjuk 2 másodpercenként) lefutna
    egy makró ami ellenőrzi hogy kiírta-e hogy kész. De sajnos a "Wait" parancsot nem használhatom mert ha fut egy makró akkor nem adja át az adatokat csak ha paranccsal kérem. Viszont ha előbb kérem az adatot mint ahogy a szimuláció végez akkor hibaüzenetet kapok amit le kell okézni, így megáll a ciklus.(ja a szimuláció lefutási ideje sztochasztikus (ha használhatom ezt a durva kifejezést:D) 10 másodperctől 5 percig is tarthat)

    Lehetne még egy megoldás is, ha lehetne egy makrót írni ami a felugró ablakot felugrás után 2 perccel leokézi vagy eltörli. Van erre parancs? Nem találtam rá semmit...

    De gondoltam egy olyan megoldásra is, hogy veszek egy majmot és betanítom, hogy amikor egy cellába megjelenik egy bizonyos szám akkor lenyom egy gombot. :D De ez állatkínzás lenne 24 órán keresztül :D
  • zmrzlina
    #1025
    Szia Delila!

    Ez lett a vége. A makró szépen beilleszti a vágólapra tett adatot, ha nem teljes a kijelölés akkor figyelmeztet. Ráadásul bolondbiztos is egy kicsit mert ha nem a Munka1-en áll a munkafüzet akkor sem rombolja szét az aktív lapot.

    Köszi!

    Sub beilleszt_vr()
    Sheets("Munka1").Select
    Range("A1:O1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.ClearContents
    ActiveSheet.Paste

    sz = "This message has been sent by System Guard, please do not reply."
    Columns("A:A").Select
    On Error GoTo hiba
    Selection.Find(What:=sz, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
    xlNext, MatchCase:=False, SearchFormat:=False).Select
    MsgBox "Sikeres beillesztés. Összesen " & Selection.Row - 24 & " sor."

    Exit Sub

    hiba:
    Range("A1:O1").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.ClearContents
    MsgBox "Hibás beillesztés, ismételd meg új kijelöléssel!"

    End Sub
  • Delila1
    #1024
    Tehát egy másik makró beírja valahova a szöveget. A laphoz rendelj egy makrót, ami ezt az eseményt (változást a lapon) lekezeli.

    Sub ResA()
    Cells(5, 1) = "Results available"
    End Sub

    Ez a makró beírja a lapra (jelen esetben az A5-be) a vizsgált szöveget. Mivel változás történt a lapon, beindul a hozzá rendelt makró:

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value = "Results available" Then
    Cells(2, 1) = Cells(1, 1) + 1
    End If
    End Sub

    Ez az A2-be írja az A1+1 értéket abban az esetben, ha a lapon megjelent a "Results available" szöveg.

    Nem akarod elhinni, de a function NEM TUD MÁS CELLÁBA ÍRNI.

    Az itt közölt makród Else ága felesleges, hiszen a fu változó csak akkor kap értéket, ha a range("a1")=2 feltétel igaz. Amíg nem adsz értéket, a változó nulla, vagy üres string.

    Példa a memória változóra:

    Sub változó()
    Dim v As Variant
    v = 26
    MsgBox v
    beír v
    End Sub

    A Dim utasítással helyet foglalsz a v nevű változónak a memóriában, ebben az esetben variant típusút, vagyis mindegy, hogy a későbbiek folyamán egész számot, tizedest, logikai értéket, vagy éppen dátumot töltesz bele.
    A második sorral értéket adsz neki. A harmadikkal kiíratod egy üzenetbe, végül a negyedik sorrral meghívod a beír makrót, és átadod neki a változó értékét.

    Sub beír(v)
    Cells(2, 3) = v
    End Sub

    A címsorban zárójelek között szereplő változó értékével kezd valamit ez a makró, jelen esetben beírja a C2 cellába.
  • iscasC
    #1023
    Helló!

    Tegnap este kipróbáltam. Az a baj hogy azt a függvényt nem én írom ami kiíratja a "Results available"-t. (Le van jelszavazva, bárcsak bele piszkálhatnék...) :S Viszont megpróbáltam úgy hogy arra írok függvényt, hogy amikor megjelenik a felirat akkor oda-vissza lép két lap között, de nem lépkedett :S. A "Worksheet_Activate" parancsot viszont kipróbáltam azzal nem volt gond az tette a dolgát. Szóval még mindig ott állok ahol a part szakad :S. Hol lehet annak utánanézni, hogy mik a korlátai a "function" parancsnak??
    Ja úgy tervezem a második fele a ciklusnak úgy fog indulni ha két feltétel teljesül:1, lefutott az első fél 2, kész a szimuláció (ez hiányzik már csak :S)
    Azért mellékelek egy egyszerűsített példát hátha én rontottam el valamit:

    Public Function fu(cell As Range, _
    Optional default_value As Variant)

    If cell.Range("a1") = 2 Then
    fu = default_value
    Sheets("Munka2").Activate
    Sheets("Munka1").Activate

    Else
    fu = 0
    End If
    End Function

    Sub Worksheet_Activate()

    Cells(1, 1) = Cells(1, 1) + 1


    End Sub

    Lenne viszont még egy kérdésem de ez csak aprócska. Hogy definiálok változókat úgy hogy azok a memóriába maradjanak és ne keljen mindig egy cellába menteni őket? (Egyébként kezdő vagyok még a makro programozásból, de jól bele csaptam a lecsóba... :))
  • Delila1
    #1022
    Függvényből ezt nem tudod megoldani.
    Mit szólsz ahhoz a megoldáshoz, hogy mikor beíratod a "Results available"-t, átlépsz egy másik lapra, majd vissza? A lapra történő visszalépést lekezelheted egy eseménykezelő eljárással (Worksheet_Activate), ez lenne a "jel", amire indul a ciklus második fele.
    A "második fél"-be tegyél egy változót, ami az általa újraindított "első fél"-nek jelzi, hogy egyszer már eljutott a másodikba, és ettől függjön, hogy indítja-e megint a másodikat. Egyébként végtelen ciklusba szaladsz. :) De ezt biztosan tudod.
  • iscasC
    #1021
    A példám csak egy leegyszerűsített példa. Nekem az lenne a fontos hogy elindítsak egy sub-ot egy adott értéknél. Hiszen az excelt egy szimulációs program interfészeként használom. Egy ciklussal adnám meg a program input értékeit, amit makróban írok. Csak az a baj hogy nem szabad semmilyen makrónak futnia, amíg a külső progi dolgozik, hiszen addig nem adja vissza az adatokat. Így a "Wait" parancs kilőve (vagyis most azt használom de így 10 órás egy vizsgálat, és mellette kell ülnöm, mert néha megakad :S). Így azt gondoltam, hogy for ciklust kettészedem két if ciklusra. Az első elindítja a szimulációt. A szimuláció lefut, visszaadja az adatokat a táblának (change ezt nem érzékeli :S), az egyik cellában megjelenik a "Results available" felirat. És erre a "jelre" indulna a ciklus második fele, ami megadja a megfelelő cellákba következő paramétereket, és újra indítja az első programot. Huhhh no ezzel nem akartalak terhelni titeket, és ezért írtam leegyszerűsített példát. :) Remélem van megoldás az ilyen problémára, vagy nekem az is elég lenne ha egy függvényből bármilyen sub-ot el tudja indítani.

    iscasC

  • Delila1
    #1020
    Függvénnyel nem lehet más cellába íratni, nem arra való. Csakis abba a cellába ír értéket, amelyikben szerepel. Amit szeretnél, olyan, mintha pl. a SZUM függvénytől várnád el, hogy ha a kapott érték megfelel egy kritériumnak, akkor egy másik cellában jelenítsen meg egy értéket.
    Az E5-be tegyél egy HA függvényt, ami ezt elintézi.
  • Delila1
    #1019
    A szöveg keresésénél a Columns("A:A").Select biztosítja, hogy csak az A oszlopban keresse a makró az sz szöveget.
    Hibakezeléssel:



    Törli az eddig bemásolt adatokat, üzenet küld, és kilép.
  • iscasC
    #1018
    Sziasztok!

    Szeretnék írni egy olyan függvényt, ami meghív egy sub-ot ami ír a tábla egyes celláiba.

    Valahogy így:

    Public Function MyFu(cell As Range, _
    Optional default_value As Variant)

    If cell.Range("a1") = 2 Then
    MyFu = default_value
    Application.Run ("viz")
    Else
    MyFu = 0
    End If
    End Function

    Public Sub viz()
    Worksheets("Munka1").Cells(5, 5) = 1
    End Sub

    Szerintem ennek működnie kéne, de ha a beadott érték 2-re vált akkor csak az „#ÉRTÉK!” visszajelzést kapom. Ha olyan sub-ot futtatok, ami mondjuk egy szövegdobozt dob eredményül, de nem avatkozik be akkor viszont fut. Mi lehet az ok? Hogy kell megoldani?
    Ez a függvény egy agyon makrózott táblába megy, amibe egy külső program is nyúlkál. (A problémám akkor is fenn áll, ha csak egy üres táblába próbálkozok.) Már próbáltam más paranccsal (change) is megoldani a problémát, de az összeakadást okoz, a függvény látszik megoldásnak, csak ez se fut.

    Köszönöm előre is a választ:

    iscasC
  • zmrzlina
    #1017
    A törlés>beillesztés>ellenőrzés megoldást választottam. Jó kijelöléssel szépen működik is. A hibakezelésben kellene még ötlet.

    Jól gondolom-e, hogy hibás kijelölés esetén (ha nincs a beillesztésben a zárósor) akkor valamilyen hibával ki fog lépni Debug módba? Mert ezt nagyon el szeretném kerülni.

    Az lenne a legjobb, ha hiba esetén csinálna egy Undo-t és figyelmeztetne, hogy ismételd meg a beillesztést új kijelöléssel.
  • zmrzlina
    #1016
    Köszönöm a gyors választ, ma tudtam kipróbálni a megoldást, szépen működik a makró és kiírja, hogy hol találja meg a záró szöveget.

    Az a gondom vele, hogy mivel mindig az előző napi adattáblát írom felül ezért ha egy hibás kijelöléssel írom felül a munkalapomat a keresett szövegem akkor is ott lesz valahol az 1500. sor környékén csak éppen az első 700 sor az adott napi adatokat tartalmazza, a következő 7-800 pedig az előző napit.

    Azért gondoltam, hogy a kijelölés méretében van benne a megoldás mert a beillesztés után mindig csak beillesztett tartomány van kijelölve a munkalapon, a többi nem.

    Vagy az is megoldás lenne, ha a makró nem az egész munkalapon keresné a zárószöveget csak a kijelölésben, esetleg ha minden beillesztés előtt törölném a munkalap tartalmát és utána kerestetném a szöveget (ha megtaláltam=jó, ha nem=hiba), vagy ha egy makróba tenném a törlés>beillesztés>ellenőrzés-t és csak akkor van MsgBox ha hiba van.

    Nem tudom, még alszom rá egyet.
  • Delila1
    #1015

    Talán most jobban sikerül a kép beszúrása.