Hiperlinkelő saját VBA függvény
2022-07-03T19:51:44+02:00
2022-07-15T17:32:36+02:00
2022-08-08T07:55:29+02:00
Molnár János
Sziasztok,

Saját hivatkozó Excel VBA függvényt szeretnék készíteni ami egy cellából veszi az útvonalat egy másikba pedig az kiszedi belőle a fájlnevet és el is készíti a hivatkozó linket

Function Hyper_1(utv) Dim RN As String Set fso = CreateObject("Scripting.FileSystemObject") RN = fso.GetFileName(utv) Hyper_1 = RN ActiveCell.Hyperlinks.Add Anchor:=ActiveCell, Address:=utv, ScreenTip:="A", TextToDisplay:="X" End Function
A fájlnevet ki is szedi, de a linkelést nem készíti el, hanem hibával leáll.
Az excel létező "hivatkozás" és egy saját fájlnév kiszedő függvényemből megoldható a probléma, de én rövidíteni akarom. 
Nem tudom, hogy nem-e ott a hiba, hogy azt cellát akarom felhasználni linkelésre amibe a függvény is kiértékelődik.

A segítséget előre is köszönöm!
Mutasd a teljes hozzászólást!
Szia!

Erről írtam. UDF = Felhasználó által megírt függvény, amit munkalapról használnak, úgy mint a beépített függvényeket.
Ezek a függvények nem tartalmazhatnak olyan műveleteket, amelyek az adott cella tartalmát módosítanák, azaz pl. hivatkozást nem fűzhetnek hozzá.  Tehát nem hívhatod meg az A1 cellából.
(Egyébként a függvény általában a saját nevének megfelelő "változó" néven ad visszatérési értéket.) A függvények hosszabb magyarázatot igényelnének, javaslom a VBA helpet Itt.
Az általad mutatott függvényt VBA eljárásból kell meghívni. Az utv paraméternél cészerű meghatároznod, hogy string a paraméter.
A hívás VBA függvényből pl.

Hyper_1 Range("B1").Value
Ismétlem, ezt a feladatot csak VBA-ból tudod így végrehajtani - és az sem megy, hogy az A1 cellából egy másik függvényt hívsz meg és az hívja a Hyper_1 függvényt!

Üdv.
Mutasd a teljes hozzászólást!

  • Szia!

    Áruld el hogy az utv változód milyen típusú?
    Illetve futás közben az RN string mit tartalmaz?

    Honnan hívod meg ezt a függvényt?
    Mutasd a teljes hozzászólást!
  • Szia!

    Milyen hibával áll le?
    Ha UDF-et -- olyan függvényt ami cellából hívható -- szeretnél, akkor nem módosíthatja saját celláját, amiben meghívod. Ez minden UDF függvényre igaz.
    VBA-ból viszont működik így is.
    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia István,

    Az "utv" változónak nem adtam típust, a teljes elérési útvonalat tartalmazza ami a csatolandó fájl eléréséhez szükséges.
    Az "RN" azt a rövid név "string"-et  tartalmazná ami a "ScreenTip", vagy a "TextToDisplay" helyén jelenne meg tájékoztatásként a "Hyperlinks.Add" VBA parancsncsban.
    A függvényt a xlsm fájlból hívom, nem a saját xlam gyüjtményemből.

    Csatoljam a makrót?

    Üdv:
    János
    Mutasd a teljes hozzászólást!
  • Szia Fferi,

    Nem a makró áll le, hanem az Excel cellába írja ki, hogy "#ÉRTÉK!"

    Az UDF problémát nem igazán értem, de ez nem a te hibád.

    Ha az útvonalat a "B1"-es cella tartalmazza és a függvény amit az "A1"-ből hívom
    és csak annyit csinál, hogy a fájlnevet kiszedi a "B1"-es elérési útvonalból akkor azt megcsinálja, de ha már a linkelési parancsot is hozzáteszem ami az "A1" értékén nem változtat azt már nem hajtja végére. 

    Üdv:

    János
    Mutasd a teljes hozzászólást!
  • RN és Hyper_1 teljesen értelmetlen és implicit fso is.
    ActiveCell helyett használj abszolút címet, pl. Sheet1.Range("A2") vagy ilyesmi
    Mutasd a teljes hozzászólást!
  • Szia!

    Erről írtam. UDF = Felhasználó által megírt függvény, amit munkalapról használnak, úgy mint a beépített függvényeket.
    Ezek a függvények nem tartalmazhatnak olyan műveleteket, amelyek az adott cella tartalmát módosítanák, azaz pl. hivatkozást nem fűzhetnek hozzá.  Tehát nem hívhatod meg az A1 cellából.
    (Egyébként a függvény általában a saját nevének megfelelő "változó" néven ad visszatérési értéket.) A függvények hosszabb magyarázatot igényelnének, javaslom a VBA helpet Itt.
    Az általad mutatott függvényt VBA eljárásból kell meghívni. Az utv paraméternél cészerű meghatároznod, hogy string a paraméter.
    A hívás VBA függvényből pl.

    Hyper_1 Range("B1").Value
    Ismétlem, ezt a feladatot csak VBA-ból tudod így végrehajtani - és az sem megy, hogy az A1 cellából egy másik függvényt hívsz meg és az hívja a Hyper_1 függvényt!

    Üdv.
    Mutasd a teljes hozzászólást!
  • Köszönöm a segítségedet.
    Sokáig nem válaszoltam, vártam hátha más jobbat javasol, de valószínűleg olyat akarok amit nem lehet megoldani a korlátok miatt.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd