PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBAVid klick fyll i cell och andra celler automatisktVid klick fyll i cell och andra celler automatiskt
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2017-10-17 20:02
 

Jag har ett testprotokoll i Excel som jag vill göra mer pekskärmvänlig och automatiserad.

Jag har sex kolumner A(Provad1), B(Datum1), C(Sign.1), D(Provad2), E(Datum2), F(Sign.2) och en massa rader nedanför med saker som skall testas A2-A999, B2-B999 osv. När jag markerar/klickar i cell A2 vill jag att det skrivs ett X i den markerade cellen, dagens datum skall fyllas i cell B2 samt initialerna på Windows användarkontot fylls i cell C3. Samma princip gäller för cellerna D2, E3, F3 samt alla rader nedanför.

Då filen kan öppnas vid olika datum och av flera olika personer måste det vara ren text och inte formler i cellerna.

Jag har hittat lösningar på funktionerna ovan enskilt men jag får inte ihop allt i samma fil och med flera olika celler.

Finns det någon som kan hjälpa mig med detta vore jag tacksam!

/Robert

Nytt inlägg
 2017-10-18 13:18
 

Något slags Händelsehantering?

Högerklicka på fliknamnet och välj visa kod

Välj Worksheet  samt selection change. och sen fylle du på en kod i stil med 

 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'kollar om du står i A1:A999 eller D1:D999, annars avslutas allt

If (Intersect(Target, ActiveSheet.Range("A2:A999")) Is Nothing And _
Intersect(Target, ActiveSheet.Range("D2:D999")) Is Nothing) Then Exit Sub

'Target= den cell du valde, Ges värdet X
Target.Value = "X"

'Ett steg till höger om vald fil skrivs dagens datum
Target.Offset(0, 1).Value = Date

'Två steg till höger om vald fil skrivs EXCELS användarnamn 
Target.Offset(0, 2).Value = Application.UserName

End Sub

 
Du skullle  lika gärna kunnna fiska ut initialerna ur användarnamnet genom att ta första tecknet + det som kommer efter det första mellanslaget i namnet.Typ: 
Target.Offset(0, 2).Value = Left(Application.UserName, 1) & Mid(Application.UserName, InStr(Application.UserName, " ") + 1, 1)
 
När det gäller initialerna från Windows är jag lite ställd. Men du hade redan löst den delen?
 
Du bör även klämma in något slags felhantering.
/Nynomen

 

Nytt inlägg
 2017-10-18 13:39
 

hmmm, SelectionChange reagerar ju faktiskt på vanliga tangenbordsförflyttningar också.  Det kommer att bli ett helvete att redigera data...

Tyvärr går det inte att skilja klick eller val med tangentbord. Det kanske vore bättre att använda dubbelklick? 

 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

'kollar om du står i A1:A999 eller D1:D999 , annars avslutas allt
If (Intersect(Target, ActiveSheet.Range("A2:A999")) Is Nothing And _
Intersect(Target, ActiveSheet.Range("D2:D999")) Is Nothing) Then Exit Sub
 
'kollar om målcellen är tom, annars avslutas allt (för att du skall ha en chans att redigera)
If Target.Value <> "" Then Exit Sub
 
'Target= den cell du valde, Ges värdet X
Target.Value = "X"
 
'Ett steg till höger om vald fil skrivs dagens datum
Target.Offset(0, 1).Value = Date
 
'Två steg till höger om vald fil skrivs EXCELS användarnamn
Target.Offset(0, 2).Value = Application.UserName
Cancel = True
End Sub
 

 

Nytt inlägg
 2017-10-19 11:10
 
 Ändrad av ExcelRob  på 2017-10-19 11:12:48
Fungerade klockrent med dubbelklick! Tack så mycket för hjälpen!

En liten justering skulle behövas. Går det att endast få fram initialerna i för och efternamnet på Office inloggningen? Jag har inte plats för hela namnet utan endast initialerna.

Ändrade lite i koden angående rangen så allt ligger på samma rad.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'kollar om du står i G5:G999 eller J5:D999 , annars avslutas allt
If (Intersect(Target, ActiveSheet.Range("G5:G999,J5:J999,M5:M999,P5:P999,S5:S999")) Is Nothing) Then Exit Sub
'Target= den cell du valde, Ges värdet X
Target.Value = "X"
'Ett steg till höger om vald fil skrivs dagens datum
Target.Offset(0, 1).Value = Date
'Två steg till höger om vald fil skrivs EXCELS användarnamn
Target.Offset(0, 2).Value = Application.UserName
Cancel = True
End Sub

/Robert
Nytt inlägg
 2017-10-19 11:26
 
 Ändrad av anonymous  på 2017-10-19 11:28:34

Nej. Tyvärr verkar det inte finnas i excel (trots att det skall gå att returnera UserInitials  i Word). 

 

Det enklaste är nog att skapa initialerna utifrån Namnet enligt förslag i min första post, typ:

Target.Offset(0, 2).Value = Left(Application.UserName, 1) & Mid(Application.UserName, InStr(Application.UserName, " ") + 1, 1)

 

Första delen hittar bara den första bokstaven  Left(Application.UserName, 1)

Den andra delen hittar det första mellanslaget (instr) och använder Mid för att returnera tecknet ett steg till höger om mellanslaget.

Mid(Application.UserName, InStr(Application.UserName, " ") + 1, 1)

Det är möjligt att du skulle kunna anropa word och be att få initialerna därifrån,men det känns krångligt. 

 

Eller så här om du vill ha 2 bosktäver från för och efternamn:

Target.Offset(0, 2).Value = Left(Application.UserName, 2) & " "&Mid(Application.UserName, InStr(Application.UserName, " ") + 1, 2)

 

 

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBAVid klick fyll i cell och andra celler automatisktVid klick fyll i cell och andra celler automatiskt

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter