Ime uporabnika PC in ...

Pomoč pri delu z MS Excelom
Odgovori
PaPaDiZ
Prispevkov: 26
Pridružen: Pe Maj 11, 2007 7:01 am

Ime uporabnika PC in ...

Odgovor Napisal/-a PaPaDiZ »

Koda: Izberi vse

''' Na vrhu modula moramo deklarirati API funkcijo,
'''    da jo bo VBA poznal
'''
Declare Function UIme Lib "advapi32.dll" _
        Alias "GetUserNameA" _
        (ByVal lpBuffer As String, _
        nSize As Long) As Long
        
'''
''' Procedura   : DobiImeUporabnika
''' Namen       : Vrne ime uporabnika na mreži
''' Vrača       : Ime uporabnika
''' Argumenti   : nic
''' Napisal     : Matjaž Prtenjak, 08/05/2000
'''
Function DobiImeUporabnika() As String
    Dim niz As String * 255

    UIme niz, 255
    DobiImeUporabnika = Left(niz, Len(niz) - 1)
End Function

Pozdravljeni

Uporabil sem zgornjo funkcijo za pridobitev imena uporabnika PC-ja na excelovem dokumentu, ki ga odpira več uporabnikov. Problem mi nastane, ko enkrat shranim excelov dokument, se v primeru da dokument odpre drugi uporabnik moje ime na dokumentu ne osveži z njegovim imenom.

Prosim za pomoč. Za odgovore se zahvaljujem

lp
Boštjan
cedra
Prispevkov: 264
Pridružen: Po Jul 25, 2005 11:11 pm
Kraj: Kamnik

Odgovor Napisal/-a cedra »

Malo sem prebrskal splet in nekako skombiniral tole:

Koda: Izberi vse

If ([a1]) <> Environ("Username") Then [a1] = Environ("Username")
Sedaj pa to kodo pripnite ali na odpiranje zvezka (zapisalo se bo na celico A1 zadnjega aktivnega lista, če seveda ne boste v kodi določili, kateri list se naj ob odprtju prikaže) ali pa na določen list in to takrat, ko postane aktiven. Sam delam na PC, kjer sem samo jaz uporabnik, zato ne morem z gotovostjo trditi ali deluje pravilno. Mislim pa 90%, da je v redu.

Tu pa je še funkcija, ki pa se žal ne osveži sama pri ponovnem odpiranju ampak le tako, da klikneš v vnosno vrstico in potrdiš z enter:

Koda: Izberi vse

Function Uporabnik() As String
    Uporabnik = Environ("Username")
End Function
Ampak tako vam že dela Matjaževa funkcija, če sem prav razumel
lp,

cedra
admin
Site Admin
Prispevkov: 3712
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

:) Jap, Excel je tako pameten, da ne preračuna formule, če se v tabeli ni nič spremenilo, kar bi nanjo vplivalo. Torej je potrebno narediti nekaj, kar bi na formulo vplivalo tako, da bi jo Excel preračunaval.

Popravite formulo takole:

Koda: Izberi vse

Function DobiImeUporabnika(vhod) As String
    Application.Volatile (True)

    Dim niz As String * 255

    UIme niz, 255
    DobiImeUporabnika1 = Left(niz, Len(niz) - 1)
End Function
In potem v tabli uporabite tol obliko:

Koda: Izberi vse

=DobiImeUporabnika(now())
lp,
Matjaž Prtenjak
Administrator
PaPaDiZ
Prispevkov: 26
Pridružen: Pe Maj 11, 2007 7:01 am

Odgovor Napisal/-a PaPaDiZ »

Nekaj mi ne deluje pravilno ker mi kot rezultat javlja vrednost #N/A

lp Boštjan
admin
Site Admin
Prispevkov: 3712
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Jap v makru je mala shemantična napaka. V zadnji vrstici bi moralo pisati

Koda: Izberi vse

DobiImeUporabnika = Left(niz, Len(niz) - 1)
(ni 1 na koncu DobiImeUporabnika)
lp,
Matjaž Prtenjak
Administrator
Odgovori