Gå til innhold

[]LØST]EXCEL 2003 VBA. Hvordan får til If.Column = til flere kolonner?


Anbefalte innlegg

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 av caliburn5
Lenke til kommentar
Videoannonse
Annonse

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

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 av caliburn5
Lenke til kommentar

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

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 av caliburn5
Lenke til kommentar

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. :p Problem løst, med:

Const sRng As String = "B1:B740, J:J"  

Endret av caliburn5
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...