Avatar billede svla Mester
15. januar 2012 - 17:02 Der er 19 kommentarer og
2 løsninger

Makro til markering

Hej !

Er der lige nogen som kan hjælpe med og lave en makro som fungerer via en Toglebutton (Til/fra knap) på et excelark.

Når knappen er sat til true, Skal der ske følgende:
- Når der klikkes på en celle markeres rækken f.eks. fra kolonne A til kolonne P.
- Når markøren flyttes til en ny celle slettes den tidligere markering og der oprettes en ny markering ud fra den celle markøren nu står i.

Når kanppen er sat til false, skal der ikke ske noget.

-Håber lige nogen kan hjælpe, eller komme med et andet forslag.
Avatar billede KurtOA Praktikant
16. januar 2012 - 16:08 #1
Jeg véd ikke om dette løser dit behov - men vi prøver :-)

Opret følgende makro i et modul:

Sub markrow()
Dim currow As Integer
currow = ActiveCell.Row
Range(Cells(currow, 1), Cells(currow, 16)).Select
End Sub


I arkets kodedel placeres følgende:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)   
    If Range("A1") = 1 Then Call markrow
End Sub

Hvis du nu i cellen A1 har værdien 1 vil kolonne A-P i den pågældende række blive "selected"......

Kan evt styres vha en af kna fra formularbaren...

Er det noget i denne retning du er på jagt efter?

mvh Kurt
Avatar billede svla Mester
16. januar 2012 - 17:11 #2
Hej
Det var lige det jeg skulle bruge, har et stort og bredt ark, hvor jeg somme tider har behov for at markere en celle og derefter kører ned -eller opad på arket med piletasterne samtidig med at rækkene er markeret.

Har sat en TogleButton (Til/fra knap) på mit ark, rettet lidt på din makro og gjort følgende:

På arket:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If ToggleButton1.Value = True Then
    Call markrow
  End If
End Sub


I mondul:
Function markrow()
  Dim currow As Integer
  currow = ActiveCell.Row
  Range(Cells(currow, 1), Cells(currow, 16)).Select
End Function

Jeg havde selv prøvet med en anden type af makro, men kunne ikke få det til og fungerer så perfekt og hurtigt med så lidt kode som dit forslag.

Tusind tak for hjælpen, læg et svar
Avatar billede KurtOA Praktikant
16. januar 2012 - 17:17 #3
Jamen - velbekomme :-)
Avatar billede store-morten Ekspert
16. januar 2012 - 17:21 #4
Denne farver den aktive række ;-)
Dim adr As String
Dim farve

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If adr <> "" Then Rows(adr).Interior.ColorIndex = xlNone
farve = Target.Interior.ColorIndex
Rows(Target.Row).Interior.ColorIndex = 35
adr = Target.Row

End Sub
Avatar billede svla Mester
16. januar 2012 - 17:35 #5
Til store-morten

Dit forslag er også fint og virker sammen med min Til/fra knap, men når knappen slås fra forbliver den række hvori markøren sidst har stået stadigvæk farvet grøn.
Det var rigtig smart med en farvet række, men farven skulle forsvinde til sidst, når funktionen ophører.
Avatar billede store-morten Ekspert
16. januar 2012 - 17:45 #6
Måske:
Dim adr As String
Dim farve

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Range("a1").Value = "x" Then

If adr <> "" Then Rows(adr).Interior.ColorIndex = xlNone
farve = Target.Interior.ColorIndex
Rows(Target.Row).Interior.ColorIndex = 35
adr = Target.Row
Else
Rows(adr).Interior.ColorIndex = xlNone
End If

End Sub
Avatar billede store-morten Ekspert
16. januar 2012 - 18:06 #7
Dim adr As String
Dim farve

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If ToggleButton1.Value = True Then

If adr <> "" Then Rows(adr).Interior.ColorIndex = xlNone
farve = Target.Interior.ColorIndex
Rows(Target.Row).Interior.ColorIndex = 35
adr = Target.Row
Else
Rows(adr).Interior.ColorIndex = xlNone
End If

End Sub
Avatar billede svla Mester
16. januar 2012 - 20:13 #8
Hej igen KurtOA og storemorten

Jeg har nu tjekket morten's sidste forslag, og det virker bare ligesom det skal og så farver det rækken, og farven forsvinder igen hvis Til/fra - knappen sættes til false. Jeres forslag er begge meget brugbare, og jeg kan konkludere følgende:

store-morten's forslag er til ark hvor der ikke på forhånd er farvelagte celler, idet forslaget retter de farvelagte celler.

KurtOA's forslag er til ark hvor der er farvelagte celler, idet forslaget kun markerer rækken.

Begge forslag er meget anvendelig for mig og jeg vil gerne gøre brug af begge ud fra førnævnte begrundelser.

Så nu er problemet point, og jeg vil gerne dele point mellen jer, så læg et svar store-morten

Tak for jeres hjælp
Avatar billede KurtOA Praktikant
16. januar 2012 - 20:43 #9
Hvis du bruger farvelægning til fx. kolonneoverskrifter kan du jo evt sætte en if-sætning ind der sikrer at din aktive "row" værdi er over et bestemt tal før den træder i kraft.

mvh
Avatar billede store-morten Ekspert
16. januar 2012 - 21:03 #10
Velbekomme
Avatar billede svla Mester
16. januar 2012 - 21:39 #11
KurtOA
Ligenu har jeg nogle meget store ark som er farvelagt med forskellige farver forskellige steder på arket , og her er din makro jo rigtit fin, idet den blot markerer rækken, som jo gør at det er lettere og overskue/følge rækken på tværs af arket, og det er faktisk lige det som jeg har manglet.
Dit forslag vedr. If-sætningen forstår jeg godt.
Avatar billede store-morten Ekspert
16. januar 2012 - 23:37 #12
Markering med dobbelt understregning, berøre ikke celle farve ;-)
Dim adr As String
Dim farve

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If ToggleButton1.Value = True Then

If adr <> "" Then Rows(adr).Borders(xlEdgeBottom).LineStyle = xlNone
farve = Target.Borders(xlEdgeBottom).LineStyle = xlNone
Rows(Target.Row).Borders(xlEdgeBottom).LineStyle = xlDouble
adr = Target.Row
Else
Rows(adr).Borders(xlEdgeBottom).LineStyle = xlNone
End If

End Sub
Avatar billede svla Mester
17. januar 2012 - 20:14 #13
Hej igen, store-morten

Jeg har lige kigget på dit 3. forslag, - du gav ikke helt op, det er faktisk en rigtig god ide, til et ark der er farvelagt i flere kolonner, din måde med dobbelt understregning giver godt overblik når linien skal følges på tværs, af et stort ark, bedre end en markeret linie.
Jeg noterer mig lige dit forslag til brug.

Point er jo delt, men tak for dit sidste forslag, det er rart at man altid lige her, på denne side, kan få hjælp til og komme videre.

tak -tak
Avatar billede svla Mester
17. januar 2012 - 20:26 #14
Til store-morten igen

- Og så var der lige et kompliment til 3. makro, og det er jo, at man med en understregning af rækken, kan se hvilken celle der er markeret hvis man ruller op/ned/tværs over arket med piletasterne.

mvh svla
Avatar billede svla Mester
18. januar 2012 - 22:24 #15
Hej store-morten !

Er du med endnu ?

Jeg har valgt og bruge den sidste makro du forslog , den med dobbelt understregning, men den melder fejl på følgende måde:

Når excelarket åbnes og togle button knappen er false, og der klikkes på en celle, melder din makro fejl i IF'en under else, fejlen opstår kun hvis togle button knappen står til false ved åbning af arket.

Jeg kan ikke gennemskue hvad problemet er, eller hvad der skal gøres, måske du lige kunne hjælpe, ellers fungerer det perfekt.
Avatar billede store-morten Ekspert
19. januar 2012 - 23:16 #16
Ja, jeg er her.

Jeg kan ikke finde på andet end at forlade ""suben" ved fejl.

Dim adr As String
Dim farve
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo exit_Sub  'Ved fejl exit Sub

If ToggleButton1.Value = True Then

If adr <> "" Then Rows(adr).Borders(xlEdgeBottom).LineStyle = xlNone
farve = Target.Borders(xlEdgeBottom).LineStyle = xlNone
Rows(Target.Row).Borders(xlEdgeBottom).LineStyle = xlDouble
adr = Target.Row
Else
Rows(adr).Borders(xlEdgeBottom).LineStyle = xlNone
End If

exit_Sub:
        Exit Sub
End Sub


Har den lille hage, hvis en række er markeret når der gemmes, forsvinder den først når den har været valgt efter åbning.
Avatar billede svla Mester
21. januar 2012 - 00:05 #17
Hej Igen !

Jeg har nu arbejdet med dit seneste forslag siden idag kl ca. 17:00, og har tilføjet lidt kode, for mig virker det hele nu helt perfekt, den fejl som var ved åbning af arket har du rettet fint.
Jeg har lavet en kode i knappens Cange, som bevirker at rækken straks understreges eller understregningen slettes såsnart der trykkes på knappen.

Det problem du nævner til sidst i dit sidste forslag er løst med den en kode i workbook open, det bevirker at såsnart arket åbnes virker koden.

Hører gerne hvad du så synes om slutresultatet ?
- Og tak for din sidste hjælp

Her er den endelige kode som jeg nu bruger:

Private Sub Workbook_Open()
  sHuskCelle = ActiveCell.Address
  ActiveCell.Next.Select
  Range(sHuskCelle).Select
End Sub




Dim adr As String
Dim farve
Public sHuskCelle As String
Private Sub ToggleButton1_Change()
  sHuskCelle = ActiveCell.Address
  Application.ScreenUpdating = False
 
  If ToggleButton1.Value = False Then
    ActiveCell.Next.Select
    Range(sHuskCelle).Select
  Else
    ActiveCell.Next.Select
    Range(sHuskCelle).Select
  End If
 
  Application.ScreenUpdating = True
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo exit_Sub  'Ved fejl exit Sub

If ToggleButton1.Value = True Then

If adr <> "" Then Rows(adr).Borders(xlEdgeBottom).LineStyle = xlNone
farve = Target.Borders(xlEdgeBottom).LineStyle = xlNone
Rows(Target.Row).Borders(xlEdgeBottom).LineStyle = xlDouble
adr = Target.Row
Else
Rows(adr).Borders(xlEdgeBottom).LineStyle = xlNone
End If

exit_Sub:
        Exit Sub
End Sub
Avatar billede store-morten Ekspert
21. januar 2012 - 12:23 #18
Hej svia

Har kopieret din kode og sat den ind på Ark1
Det virker slet ikke?

Men opdagede så at man skal gøre sådan:

Kopier:
Private Sub Workbook_Open()
  sHuskCelle1 = ActiveCell.Address
  ActiveCell.Next.Select
  Range(sHuskCelle1).Select
End Sub
Og indæt denne på "Denne_projektmappe"

Kopier:
Dim adr As String
Public sHuskCelle As String

Private Sub ToggleButton1_Change()
  sHuskCelle2 = ActiveCell.Address
  Application.ScreenUpdating = False

  If ToggleButton1.Value = False Then
    ActiveCell.Next.Select
    Range(sHuskCelle2).Select
  Else
    ActiveCell.Next.Select
    Range(sHuskCelle2).Select
  End If

  Application.ScreenUpdating = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo exit_Sub  'Ved fejl exit Sub

If ToggleButton1.Value = True Then

If adr <> "" Then Rows(adr).Borders(xlEdgeBottom).LineStyle = xlNone
Rows(Target.Row).Borders(xlEdgeBottom).LineStyle = xlDouble
adr = Target.Row
Else
Rows(adr).Borders(xlEdgeBottom).LineStyle = xlNone
End If

exit_Sub:
        Exit Sub
End Sub
Og indsæt på eks. Ark1

Så virker det perfekt.

PS. har slettet:
Dim farve
farve = Target.Borders(xlEdgeBottom).LineStyle = xlNone
Avatar billede svla Mester
21. januar 2012 - 17:22 #19
Hej
Det er korrekt at koden skulle ligge 2 steder, det regnede jeg med at du lige kunne "lure" når du fik set koden.
Variablen sHuskcelle er lavet som Public (global variable) så virker den jo både på "arket" og på "Denne projektmappe" hvor koderne er lagt.

Jeg vil så gerne spørge hvorfor du på den ene kode har kaldt variablen sHuskCelle1 og på den anden kaldt variablen sHuskCelle2, når variablen er dimisoneret med navnet sHuskCelle ?

- Men ok jeg synes at vi ved fælles hjælp fik det lavet tilfredsstillende.
Avatar billede store-morten Ekspert
21. januar 2012 - 18:03 #20
Hej
Min fejl ;-) Omtalte 1 og 2 tal skal slettes.

Jeg kopierede hele din kode ind på Ark1, og det virkede ikke.
Inden jeg fandt ud af første kode skulle lægges på "Denne_projektmappe"
prøvede jeg at "skille" dem ad, ved  omdøbe til 1 og 2.
Avatar billede svla Mester
21. januar 2012 - 18:36 #21
- Ok jeg har også slettet 1-2, man kan jo nemt komme til og lave en fejl.
Jeg klarer mig fint nu og tak for din hjælp.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester