Pozdravljeni
V VBA sestavim list z več 100 oblikami ( kvadrati - rišem rodovnik ). Imena so govoreča in precej dolga.
Pri dogodku ".OnAction" s funkcijo Application.Caller ugotavljam ime gradnika.
Težava pa nastopi, ker funkcija pri daljših imenih vrne samo prvih 30 znakov imena.
Je možno to omejitev "poraviti".
Oziroma, je kakšna druga možnost ugotoviti oziroma nasloviti gradnik, ki je klical proceduro.
Lep pozdrav
Drago
Application.Caller
Re: Application.Caller
Podajte vsaj minimalno kodo, da bo razvidno kaj počnete.
Sicer pa ima vsak gradnik lastno metodo, s čimer natančno veste kdo je oz. o katerem gradniku je govora.
Sicer pa ima vsak gradnik lastno metodo, s čimer natančno veste kdo je oz. o katerem gradniku je govora.
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Re: Application.Caller
Na list narišem obliko - puščico in jo imenujem npr: PrOseba_0102010101020101020101010101_Gor
Struktura imena pove pozicijo v strukturi rodovnega drevesa in jo rabim za identifikacijo osebe.
V Proceduri "Puščica_Klik" ugotavljam, katera oblika kliče: Application.Caller vrne: PrOseba_0102010101020101020101 ( samo prvih 30 znakov)
Lep pozdrav
Drago
Struktura imena pove pozicijo v strukturi rodovnega drevesa in jo rabim za identifikacijo osebe.
Koda: Izberi vse
' Puščica GOR - Pregled družine - Član
If InStr(pKlic, "G") > 0 Then ' Če se zahteva puščica GOR
nPtop = nShTop + 4 ' - Odmik zgoraj
nPLeft = nShLeft + nShWidth - nPWidth - 5 ' - Odmik od leve
cPImeObl = cShImeObl & "_Gor" ' - Ime gradnika
With Worksheets(cList).Shapes.AddShape(msoShapeUpArrow, _
nPLeft, _
nPtop, _
nPWidth, _
nPHeight)
.Name = cPImeObl
.Fill.ForeColor.RGB = xBarvaF
.Line.ForeColor.RGB = xBarvaL
.Line.Weight = 1
.Placement = 3
.Fill.Transparency = 0.5
.OnAction = "Puščica_Klik"
.Locked = True
End With
End If
Koda: Izberi vse
Sub Puščica_Klik()
Dim cImeOb As String ' Ime oblike
Dim cSmer As String ' Vrsta ikone (Gor, Dol, Dok)
cImeOb = Application.Caller
cSmer = Right(cImeOb, 3)
....
Drago
Re: Application.Caller
Pozdravljeni,
Rešitev imate veliko. Osnovna, ki bi jo lahko uporabili, ne da bi vedeli karkoli drugega o VBA je, da namesto imen uporabite številke.
V Excelu uporabite poseben list (lahko ga skrijete) in vanj vpisujete poljubno dolga imena, vsaki ime v svojo vrstico. Objekte pa poimenujete s številkami in potem ime dobite tako da preberete celico v ustrezni vrstici. To bi bila preprosta rešitev.
Lahko pa uporabite boljšo rešitev, kjer pa morate znati malce VBA-ja in sicer tako, da vaši funkciji Puščica_Klik (PS: V kodi ne uporabljajte slovenskih znakov, saj boste imeli težave če bote to želeli uporaiti na drugih računalnikih!) preprosto tudi poveste, kdo joje klical in tako dobite ime že kot parameter.
Prilagam minimalni delujoč primer:
PS: bodite pozornoi na števil dvojnih in enojnih narekovajov, saj so pomembni ![Smile :)](./images/smilies/icon_smile.gif)
Rešitev imate veliko. Osnovna, ki bi jo lahko uporabili, ne da bi vedeli karkoli drugega o VBA je, da namesto imen uporabite številke.
V Excelu uporabite poseben list (lahko ga skrijete) in vanj vpisujete poljubno dolga imena, vsaki ime v svojo vrstico. Objekte pa poimenujete s številkami in potem ime dobite tako da preberete celico v ustrezni vrstici. To bi bila preprosta rešitev.
Lahko pa uporabite boljšo rešitev, kjer pa morate znati malce VBA-ja in sicer tako, da vaši funkciji Puščica_Klik (PS: V kodi ne uporabljajte slovenskih znakov, saj boste imeli težave če bote to želeli uporaiti na drugih računalnikih!) preprosto tudi poveste, kdo joje klical in tako dobite ime že kot parameter.
Prilagam minimalni delujoč primer:
Koda: Izberi vse
Sub init()
Sheet2.Shapes(1).OnAction = "'Puscica_Klik """ & Sheet2.Shapes(1).Name & """'"
End Sub
Sub Puscica_Klik(ImeObjekta As String)
MsgBox "Klical me je " & ImeObjekta
End Sub
![Smile :)](./images/smilies/icon_smile.gif)
lp,
Matjaž Prtenjak
Administrator
Matjaž Prtenjak
Administrator
Re: Application.Caller
Najlepša hvala.
Druga rešitev je prava. Dopolniti sem moral samo par vrstic. Že deluje.
ps.
Sam sem že razmišljal o prvi rešitvi, pa je vaš predlog veliko boljši.
Nisem pa vedel, da pri "OnAction" lahko vključim tudi parameter.
Lepo je imeti tako pomoč. Hvala
Lep pozdrav
Drago
Druga rešitev je prava. Dopolniti sem moral samo par vrstic. Že deluje.
ps.
Sam sem že razmišljal o prvi rešitvi, pa je vaš predlog veliko boljši.
Nisem pa vedel, da pri "OnAction" lahko vključim tudi parameter.
Lepo je imeti tako pomoč. Hvala
Lep pozdrav
Drago