Avatar billede confisk Nybegynder
20. marts 2005 - 17:24 Der er 7 kommentarer og
1 løsning

VBA: ActiveSheet.Shapes.AddLine

Jeg ønsker at tegne en streg fra fx øverste venstre hjørne i B2 ned til højre hjørne i B6. Dette kan gøres vha. formlen:
ActiveSheet.Shapes.AddLine(48#, 12.75, 96#, 76.5).Select

Men hvis jeg ex. skjuler række 5 og dernæst kører programmeringen går stregen selvfølgelig ned til højre hjørne i B7. Hvordan får jeg oplyst hvor celle B6 slutter således programmeringen kan gøres fleksibelt og altid stopper i nederste højre hjørne i B6, uanset om rækker ell. kolonner skjules eller gøres bredere/smallere?
Avatar billede sjap Praktikant
20. marts 2005 - 19:05 #1
Her er en funktion, der beregner både bredde og højde og bruger dem direkte ved tegning af linien. Det er blot de to funktioner, du skal bruge. Sub'en er bare et eksempel på, hvordan funktionerne kan bruges.

Function Bredde() As Single
Bredde = 0
For Each c In ActiveSheet.Columns("A:C")
    Bredde = Bredde + c.Width
Next
End Function

Function Højde() As Single
For Each c In ActiveSheet.Rows("1:6")
    Højde = Højde + c.RowHeight
Next
End Function

Sub tegnline()

With ActiveSheet.Shapes.AddLine(0, 0, Bredde(), Højde()).Line
    .ForeColor.RGB = RGB(255, 0, 128)
End With

End Sub
Avatar billede confisk Nybegynder
21. marts 2005 - 19:46 #2
Hvad skal jeg skrive for at tegne en streg fra B2 til B6?
Avatar billede sjap Praktikant
21. marts 2005 - 20:31 #3
Se det var jo lige en snyder, fordi du nu holder dig indenfor kolonne B! Jeg er faktisk ikke helt sikker på hvad du mener. Skal stregen fra nederste venstre hjørne af B2 til øverste højre hjørne af B6?
Avatar billede sjap Praktikant
21. marts 2005 - 20:33 #4
Du kan ændre lidt i funktionerne, så de kan bruges lidt mere generelt:

Function Bredde(Kolonner As String) As Single
Bredde = 0
For Each c In ActiveSheet.Columns(Kolonner)
    Bredde = Bredde + c.Width
Next
End Function

Function Højde(Rækker As String) As Single
For Each c In ActiveSheet.Rows(Rækker)
    Højde = Højde + c.RowHeight
Next
End Function

Sub tegnline()

With ActiveSheet.Shapes.AddLine(Bredde("A"), Højde("1"), Bredde("A:C"), Højde("1:6")).Line
    .ForeColor.RGB = RGB(255, 0, 128)
End With

End Sub


Med denne funktion tegnes en linie fra nederste højre hjørne af A1 til nederste højre hjørne af C6.
Avatar billede confisk Nybegynder
21. marts 2005 - 21:18 #5
Jeg ønsker at tegne en streg fra øverste venstre hjørne i B2 til nederste højre hjørne B6. Desuden vil jeg også tegne fra C2 til C6 m.fl. - derfor ønsker jeg så meget fleksibilitet som muligt. Jeg synes ikke helt det virker...
Avatar billede sjap Praktikant
21. marts 2005 - 21:43 #6
Har lige standardiseret det lidt mere. Prøv at se koden i den sidste sub - den skulle være nogenlunde til at forstå.

Function Bredde(Kolonner As String) As Single
Bredde = 0
For Each c In ActiveSheet.Columns(Kolonner)
    Bredde = Bredde + c.Width
Next
End Function

Function Højde(Rækker As String) As Single
For Each c In ActiveSheet.Rows(Rækker)
    Højde = Højde + c.RowHeight
Next
End Function

Sub TegnStreg(kFra As String, kTil As String, rFra As String, rTil As String)
'kFra    Start fra venstre kant af denne kolonne
'kTil    Slut ved højre kant af denne kolonne
'rFra    Start fra øvre kant af denne række
'rTil    Slut ved øvre kant af denne række

HorisontalStart = Bredde("A:" & kFra) - Bredde(kFra)
HorisontalSlut = Bredde("A:" & kTil)
VertikalStart = Højde("1:" & rFra) - Højde(rFra)
VertikalSlut = Højde("1:" & rTil)

With ActiveSheet.Shapes.AddLine(HorisontalStart, VertikalStart, HorisontalSlut, VertikalSlut).Line
    .ForeColor.RGB = RGB(255, 0, 128)
End With

End Sub

Sub TegnEnStreg()

Call TegnStreg("B", "B", "2", "6")
Call TegnStreg("C", "C", "2", "6")

End Sub
Avatar billede confisk Nybegynder
21. marts 2005 - 22:11 #7
Så er den helt i vinkel (sidste udgave). Du har så sandelig fortjent de sølle 60 point. MANGE tak for hjælpen ;-)
Avatar billede sjap Praktikant
22. marts 2005 - 00:01 #8
Tjah der skulle vist også være lidt muligheder for at trimme den yderligere, men det primære er - trods alt - at den virker. :0)
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