caliburn5 Skrevet 13. februar 2012 Del Skrevet 13. februar 2012 (endret) Hei, Ganske ny på VBA, og prøer å få til noe enkelt her. Fått hjelp til noe, men står fast på denne: Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim comment As String With Target If .Column = 1 Then comment = ("Cell Last Edited: ") & Format(Date, "mm/dd/yy") & (" by ") & Application.UserName .Cells.NoteText comment End If End With End Sub Med denne koden gjelder kun aksjonen kolonne 1. Jeg å prøver å få den til å gjelde f.eks kolonne 1, 13 og 14. Noen tips? Takk edit: Målet med koden er å stemple dato som merknad i en kolonne når noe blir skrevet der. Jeg fikk den kun til å gjelde en kolonne, eller alle. Jeg skulle ha den til å gjelde flere spesifikke kolonner. Men da skal jeg prøve det du skrev Endret 14. februar 2012 av caliburn5 Lenke til kommentar
helsten2 Skrevet 13. februar 2012 Del Skrevet 13. februar 2012 Ikke sikker på om jeg forstår problemet, men her er et forslag: If .Column = 1 Or .Column = 13 Or .Column = 14 Then comment = ("Cell Last Edited: ") & Format(Date, "mm/dd/yy") & (" by ") & Application.UserName .Cells.NoteText comment End If Lenke til kommentar
Leftie Skrevet 13. februar 2012 Del Skrevet 13. februar 2012 helsten2 har nok dekka det mest relevante her, men jeg har et annet tips til deg: Indenter koden din. Å indentere (skyve inn blokker av koden, basert på det logiske nivået du er på), gjør kode mye lettere å lese. For at indentering skal fungere her på forumet, må du bruke taggen. Lenke til kommentar
caliburn5 Skrevet 13. februar 2012 Forfatter Del Skrevet 13. februar 2012 (endret) Takk for svar. Kjenner det er lenge siden jeg drev med VBS sist :S helsten2: Målet med koden er å stemple dato som merknad i en kolonne når noe blir skrevet der. Jeg fikk den kun til å gjelde en kolonne, eller alle. Jeg skulle ha den til å gjelde flere spesifikke kolonner. Men da skal jeg prøve det du skrev Edit: Det fungerte fjell. Akkurat som tiltenkt. Stor takk Endret 13. februar 2012 av caliburn5 Lenke til kommentar
Harald Staff Skrevet 13. februar 2012 Del Skrevet 13. februar 2012 En annen teknikk du skal se på er Select Case, det får du mye bruk for etterhvert: Select Case .Column Case 1, 13, 14 'noe her Case 3, 17 'noe annet her Case else End Select Det du må tenke på ganske snart er at Target godt kan være flere celler, da feiler koden din. Det er vanskelig å foreslå en løsning når jeg ikke vet hva dette skal brukes til. HTH. Beste hilsen Harald Lenke til kommentar
caliburn5 Skrevet 13. februar 2012 Forfatter Del Skrevet 13. februar 2012 (endret) En annen teknikk du skal se på er Select Case, det får du mye bruk for etterhvert: Select Case .Column Case 1, 13, 14 'noe her Case 3, 17 'noe annet her Case else End Select Det du må tenke på ganske snart er at Target godt kan være flere celler, da feiler koden din. Det er vanskelig å foreslå en løsning når jeg ikke vet hva dette skal brukes til. HTH. Beste hilsen Harald Takker for svar. Skal prøve å utforske Case litt og se hvordan jeg kan bruke den. Har nå skrevet i første innlegg hva målet med koden er. Men ett lite spm til. Usikker på om det lar seg gjøre. Men med koden jeg har nå, loggføres bruker #1 som legger data inn i en celle. Men hvis bruker #2 går inn og endrer noe samme celle, fjernes infoen om bruker #1. Vil det la seg gjøre å loggføre begge? At alle som endrer noe i cellen til enhver tid blir loggført i merkaden? Endret 13. februar 2012 av caliburn5 Lenke til kommentar
caliburn5 Skrevet 14. februar 2012 Forfatter Del Skrevet 14. februar 2012 (endret) Fant ut av forrige problem. Fant en kode på det store nettet som gjør akkurat som jeg vil med litt modifisering. Kjenner jeg ikke skjønner logikken i VBA enda, så trenger litt mer hjelp. Koden jeg nå kjører er denne: Option Compare Text Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Const sRng As String = "B1:B740" Dim sOld As String Dim sNew As String Dim sCmt As String Dim iLen As Long Dim bHasComment As Boolean With Target(1) If Intersect(.Cells, Range(sRng)) Is Nothing Then Exit Sub sNew = .Text Application.EnableEvents = False Application.Undo sOld = .Text .Value = sNew Application.EnableEvents = True sCmt = "Endret: " & Format$(Now, "d.m.yy kl. hh:nn") & " av " & Application.UserName & Chr(10) & "Tidl.verdi " & sOld If Target(1).comment Is Nothing Then .AddComment Else iLen = Len(.comment.Shape.TextFrame.Characters.Text) End If With .comment.Shape.TextFrame .AutoSize = True .Characters(Start:=iLen + 1).Insert IIf(iLen, vbLf, "") & sCmt End With End With End Sub Men denne gjelder da kun B1:740 som tiltenkt. Men vil ha den til å gjelde hele kolonne J, K, L, og M også. Strengt tatt samme problem som tråden startet med. Skjønner ikke hvordan jeg skal få det til her. Const sRng As String = "B1:B740" Edit; blir så enkelt for meg at det er vanskelig. Problem løst, med: Const sRng As String = "B1:B740, J:J" Endret 14. februar 2012 av caliburn5 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå