• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA :Geef username weer die cel vult

Status
Niet open voor verdere reacties.

knarf100

Gebruiker
Lid geworden
8 dec 2015
Berichten
21
Hoi,

ik heb een vraagstuk:

ik wil graag een VBA code die in A2 de gebruikersnaam invult als die persoon in C2 iets invoert. Deze wil ik voor alle rijen gebruiken. Als de cel C leeg is dan hoeft hier dus ook niks te staan. Ikzelf ben een leek hierin, maar ik had de volgende code gevonden, maar ik weet niet of de waarde blijft staan als iemand anders ditzelfde bestand opent.

Code:
Function UserNames() As String
    Dim Users As Variant
    Dim sMsg As String
    Dim iIndex As Integer

    Users = ActiveWorkbook.UserStatus

    For iIndex = 1 To UBound(Users, 1)
        sMsg = Users(iIndex, 1) & vbLf
    Next iIndex
    'remove final line feed
    sMsg = Left(sMsg, Len(sMsg) - 1)

    UserNames = sMsg
End Function

maar deze code werkt niet in een ALS formule. Wie kan me hierin helpen?
 
Heb je die functie wel in een module gezet?
 
Heb je die functie wel in een module gezet?

Jazeker,

Om aan te geven of de VBA module gebruikt moet worden heb ik de volgende formule in kolom A gezet

=ALS(C3<>"";"=UserNames()";"")

met als resultaat =UserNames() als waarde en niet mijn naam.
 
Die moet ook niet tussen de " tekens staan en de = moet er voor weg.
Code:
=ALS(C3<>"";UserNames();"")

Voor alleen je gebruikersnaam heb je overigens hier voldoende aan:
Code:
Function UserNames() As String
    UserNames = Application.UserName
End Function
 
Laatst bewerkt:
Maar als iemand anders het bestand opent en een volledige herberekening laatdoen dan staat alles op zijn/haar naam...
 
Meestal wordt voor dit soort dingen het Worksheet_Change event gebruikt. Vul maar wat in in kolom C

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 3 And Target.Count = 1 Then Target.Offset(, -2).Resize(, 2) = ActiveWorkbook.UserStatus
End Sub
 

Bijlagen

  • knarf100.xlsb
    15,8 KB · Weergaven: 55
bedankt!

Ah, super bedankt voor de hulp! Dit was inderdaad wat ik zocht.:D
 
Hoi,

ben ik toch weer. Zou dit bestand aangepast kunnen worden dat de cellen in kolom a en b niet aangepast kunnen worden? Kan het niet doen met de standaardoptie in Excel want de cellen moeten bereikbaar zijn voor schrijven.
 
Bv.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Columns(1).Resize(, 2)) Is Nothing Then
  Application.Undo
  old = Target
If old = "" Then Application.Undo
 End If
   If Target.Column = 3 And Target.Count = 1 Then Target.Offset(, -2).Resize(, 2) = ActiveWorkbook.UserStatus
 Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
Thanks!

Thanks! Dan heb ik nog alleen het laatste verzoek. Als ik de cel in kolom C leegmaak wil ik eigenlijk ook dat de cellen van kolommen A en B ook leeggemaakt worden. Als dat toegevoegd kan worden aan dit bestand dan ben ik helemaal blij.
 

Bijlagen

  • Levervoorstel.xlsb
    17,3 KB · Weergaven: 38
Code:
If Target.Column = 3 And Target.Count = 1 Then Target.Offset(, -2).Resize(, 2) = IIf(Target = "", Array("", ""), ActiveWorkbook.UserStatus)
 
Zou "" niet werken ipv array?

Dat met die undo kan ook wel anders denk ik, maar kan niet eerder je bestand inzien dan vanavond.
 
Die array is niet nodig.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Columns(1).Resize(, 2)) Is Nothing Then
  Application.Undo
If Target = "" Then Application.Undo
 End If
   If Target.Column = 3 And Target.Count = 1 Then Target.Offset(, -2).Resize(, 2) = IIf(Target = "", [COLOR=#ff0000]"",[/COLOR] ActiveWorkbook.UserStatus)
 Application.EnableEvents = True
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan