19. oktober 2007 - 12:03Der er
18 kommentarer og 1 løsning
køre en makro i en linie alt efter hvad der står i kolonne D
Kol A Kol D tekst, bla bla 1 tekst, bla bla 3 tekst, bla bla 4 tekst, bla bla 4 tekst, bla bla 2
Hvis der står 1 i kolonne D skal der køres makro1 Hvis der står 3 i kolonne D skal der køres makro3 osv. Hver gang tallet i kol d ændres skal den matchende makro køres. Dette skal gøres i hele arket.
Kan det lade sig gøre?
Jeg har fundet ud af jeg skal bruge noget af nedenstående, men jeg ved ikke helt hvordan det skal sættes sammen!
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D:D")) Is Nothing Then On Error Resume Next call makro1?? call makro2?? call makro3?? call makro4??
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("D:D")) Is Nothing Then On Error Resume Next Application.Run "Makro" & Target End If End Sub
Jeg ville gøre sådan (Indsættes i arkets kodemodul):
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("D:D")) Is Nothing Then Exit Sub If Target = 1 Then Target.RowHeight = 20 If Target = 2 Then Target.RowHeight = 40 If Target = 3 Then Target.RowHeight = 60 End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("D:D")) Is Nothing Then ' On Error Resume Next Application.Run "Makro" & Target, Target.Address End If End Sub
jeg har forsøgt begge løsningsforslag. Jeg kan ikke få kabbaks til at virke. Det er som om af makroerne ikke vises når de f.eks. hedder:
makro1(ad)
Jeg kan sagtens få excelents forslag til at virke og det er nok den der passer bedst til mit problem. Jeg tror at jeg fik gjort problemet større i mit sprøgsmål end det egentligt var.
Hvis vi nu siger at jeg vælger excelents forslag. kan man så få den til at "køre" makroen automatisk på alle linier i arket. Hvis der ikke står noget i kolonne D skal den bolt lade linie være som den allerede er.
Sub CheckD() For t = 2 To 100 If Cells(t, "D") = 1 Then Cells(t, "D").RowHeight = 20 If Cells(t, "D") = 2 Then Cells(t, "D").RowHeight = 40 If Cells(t, "D") = 3 Then Cells(t, "D").RowHeight = 60 If Cells(t, "D") = 4 Then Cells(t, "D").RowHeight = 80 If Cells(t, "D") = 5 Then Cells(t, "D").RowHeight = 100 Next End Sub
Hej! Hvis du mangler en makro der kan gøre det på alle linier i interval på 2-200 kan du skifte do loop løkke koden i det forslag jeg tidligere har vist dig, til denne her løkke:
For i = 1 To 200 iCelle = iCelle + 1 Range(D & iCelle).Select bVærdi = ActiveCell.Value
If bVærdi = 1 Then Selection.RowHeight = 10 ElseIf bVærdi = 2 Then Selection.RowHeight = 20 ElseIf bVærdi = 3 Then Selection.RowHeight = 30 ElseIf bVærdi = 4 Then Selection.RowHeight = 40 ElseIf bVærdi = 5 Then Selection.RowHeight = 50 ElseIf bVærdi = 6 Then Selection.RowHeight = 60 ElseIf bVærdi = 7 Then Selection.RowHeight = 70 ElseIf bVærdi = 8 Then Selection.RowHeight = 80 ElseIf bVærdi = 9 Then Selection.RowHeight = 90 ElseIf bVærdi = 10 Then Selection.RowHeight = 100 End If Next i
Hej ! For god ordnens skyld: Den første kode jeg skrev til dig med løkkekoden Do loop, og den næste rettelse med For i - Next koden, vær opmærksom på at hele koden eksekveres hver gang der er foretaget en indtastning eller rettelse et hvilket som helst sted i dit Excelark, men koden løber kun kolonne D igennem.
Hej Jeg går ikke så meget op i og tjene point, men læser og svarer kun af interesse indenfor Excel og VBA, for mig er det ok hvis du giver alle point til excelent.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.