Keresés

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

  • Fferi50

    Topikgazda

    válasz m.zmrzlina #25459 üzenetére

    Szia!

    A VBA-ban a nevek nem úgy működnek, mint a munkalapon. A names("név").referstorange mutat a név által meghatározott területre, a names("név").refersto pedig az adott névhez tartozó terület címét adja meg.

    Tehát ezt a sor részt:
    Workbooks("forrásadatok.xlsx").Names("gyümölcsök")

    ki kell egészíteni:

    Workbooks("forrásadatok.xlsx").Names("gyümölcsök").referstorange

    Másrészt, sokkal gyorsabb, ha a range.replace tulajdonságát használod:

    wsKabelo.Range("C2:C129").replace what:="ALMA",replacement:=1,lookat:=xlwhole

    ami az egész tartományban kicseréli az ALMA szót az 1 számra.

    A javított makró pedig a Gyümölcsök tartományon megy végig - és kicseréli az első oszlopban található gyümölcsneveket a második oszlopban található számokra:

    Set rng_gyümölcsök = Workbooks("forrásadatok.xlsx").Names("gyümölcsök").referstorange
    Set wsKabelo = ActiveSheet
    for each cl in rng_gyümölcsök.columns(1).cells
    wsKabelo.range("C2:C129").replace what:=cl.value,replacement:=cl.offset(0,1).value, lookat:=xlwhole
    next

    Egyébként annyit javaslok még, hogy ne használj ékezetes karaktereket a makrókban és a neveknél, mert ebben az esetben nem hordozható a munkafüzeted, más (pl.angol) környezetben hibásan /vagy nem működik.

    Üdv.

  • m.zmrzlina

    senior tag

    válasz m.zmrzlina #25459 üzenetére

    Ha az objektumváltozót a következőképpen deklarálom akkor megy:

    Set rng_gyümölcsök = Workbooks("forrásadatok.xlsx").Names("gyümölcsök").RefersToRange
    Set wsKabelo = ActiveSheet
    For Each rngCella In wsKabelo.Range("C2:C129")
    If rngCella.Value <> "" Then
    rngCella.Value = Application.WorksheetFunction.VLookup(rngCella.Value, rng_gyümölcsök, 2, 0)
    End If
    Next

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