Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Homer
    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 :D

    Ö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. :)

  • Homer
    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 Sub

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

    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 = 3

    Private 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

  • martonx
    veterán

    sajna value-vel sem megy ugyan azt dobja ki, kérdezz meg bármit válaszolok mindenre csak már nem ez az első makró aminél ezt a hibát kapom :F

    For i = fk + 1 To ssz
    If (Sheets(2).Cells(i, eo).Value <> "") Then
    For j = fk + 1 To ssz
    If (Sheets(1).Cells(j, mo1).Value = Sheets(2).Cells(i, mo1).Value) And (Sheets(1).Cells(j, mo2) = Sheets(2).Cells(i, mo2)) And (Sheets(1).Cells(j, mo3) = Sheets(2).Cells(i, mo3)) Then
    For k = 1 To osz
    Sheets(1).Cells(j, k) = Sheets(2).Cells(i, k)
    Next k
    End If
    Next j
    End If
    Next i

    Szia!

    A hülye Excel a létező legtriviálisabb hibákra szokott ilyen semmitmondó hibaüzenetet adni.
    Azaz ilyenekre tippelek, hogy:

    1. nem létezik az fk
    2. nem létezik az eo
    3. fk és eo létezik, de nem számok

    vagy mittudom én, de ilyen szintű kis bizbasz hibát kellene keresned.

  • ArchElf
    addikt

    sajna value-vel sem megy ugyan azt dobja ki, kérdezz meg bármit válaszolok mindenre csak már nem ez az első makró aminél ezt a hibát kapom :F

    For i = fk + 1 To ssz
    If (Sheets(2).Cells(i, eo).Value <> "") Then
    For j = fk + 1 To ssz
    If (Sheets(1).Cells(j, mo1).Value = Sheets(2).Cells(i, mo1).Value) And (Sheets(1).Cells(j, mo2) = Sheets(2).Cells(i, mo2)) And (Sheets(1).Cells(j, mo3) = Sheets(2).Cells(i, mo3)) Then
    For k = 1 To osz
    Sheets(1).Cells(j, k) = Sheets(2).Cells(i, k)
    Next k
    End If
    Next j
    End If
    Next i

    Próbáld meg elötte kiválasztani a sheet-et és a cellát és utána lekérdezni. Esetleg nézz át az Excel topicba, ott sokkal több tapasztalat van az excel makrók tekintetében.

    AE

  • ArchElf
    addikt

    sziasztok!

    Elkezdtem egy táblaösszemásoló makrót megírni, még kezdő vagyok nagyon, ezt kérem figyelembe venni, de az a problémám hogy mindig a jó kis runtime error 1004 jön ki a program ciklusainál

    For i = fk + 1 To ssz
    If (Sheets(2).Cells(i, eo) <> "") Then <----------------itt áll le
    For j = fk + 1 To ssz
    If (Sheets(1).Cells(j, mo1) = Sheets(2).Cells(i, mo1)) And (Sheets(1).Cells(j, mo2) = Sheets(2).Cells(i, mo2)) And (Sheets(1).Cells(j, mo3) = Sheets(2).Cells(i, mo3)) Then
    For k = 1 To osz
    Sheets(1).Cells(j, k) = Sheets(2).Cells(i, k)
    Next k
    End If
    Next j
    End If
    Next i

    fk: táblafejléc kezdete
    eo: ellenőrző oszlop, ha üres akkor meg sem kell vizsgálni
    mo1,2,3: adatoszlopok száma, amiket meg kell vizsgálnia

    ha tudtok segíteni akkor előre is köszönöm! :)

    így próbáltad?
    (Sheets(2).Cells(i, eo).Value
    Ja és használj kódbeillesztést, mert tagolatlan kódot kínszenvedés olvasni...
    A változónevek sem mondanak amúgy sokat...

    AE

Új hozzászólás Aktív témák

Hirdetés