Borders.Linestyle Null ?

Moderator: ModerationP

Re: Borders.Linestyle Null ?

Beitragvon slowboarder » 17. Apr 2019, 13:07

Noch ein paar Unterschiede:

1. die Borders 1-4 stellen die der Zelle zugeordneten "inneren" Rahmenlinien dar.
diese werden aber nur genutzt, wenn die Zelle keinen Nachbarn hat (z.B beim Ausdruck bei einem Zeilenumbruch)

die Borders 7-10 stellen die Zwischenlinien dar, welche sich aus der Kombination mit der der Rahmenlinie der Nachbarzelle ergeben.
das entspricht auch dem, was auf dem Bildschirm angezeigt wird.

dh wenn man den Zelle A1 einen rechten Rahmen hat (linestyle =1) und überprüft den linken Rahmen von B1, dann ergibt:
Range("B1").Borders(1).LineStyle: -4142 (kein Rahmen)
Range("B1").Borders(7).LineStyle: 1

weiterhin ist es so dass wenn A1 einen rechten Rahmen hat und man die Zelle B1 mit einem linken Rahmen formatiert, der innere Rahmen von A1 (2) auf -4142 (kein Rahmen) gesetzt wird.

2. prüft man einen größeren Zellbereich auf seine Rahmenlinien, so werden bei den Borders 1-4 alle Zellen einzeln geprüft.
Gibt es einen Unterschied im Ergebnis der einzelnen Zellen, so ist das Ergebnis NULL
bei den Borders 7-10 werden nur die linke obere und die rechte untere Zelle für die Prüfung verwendet, so dass es immer ein eindeutiges Ergebnis gibt!

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 25737
Registriert: 18. Apr 2009, 13:33

Ja, ...

Beitragvon Luc$:-? » 17. Apr 2019, 13:37

...Daniel,
aber das war jetzt nur für eine gerahmte Zelle mit evtl Nachbarn, nicht für Bereiche mit ZwischenRahmen 11+12!? Ersetzen die dann Außenrahmen 9+10 oder sind dann immer noch jeweils beide vorhanden? Bei Umbruch könnten ja ohne 9 bzw 10 und nur 11 bzw 12 die abschließenden Rahmen vor dem Umbruch fehlen (früher war das wohl so). Die Rolle von 1-4 war immer schon etwas undurchsichtig, hatte aber wohl den von dir genannten Effekt.
Luc :-?
Luc$:-?
 

Re: Borders.Linestyle Null ?

Beitragvon slowboarder » 17. Apr 2019, 13:56

Hi
11 und 12 würde nur zum Zeichnen der Rahmenlinien verwenden, aber nicht zum Auswerten.
die Inneren zu überprüfen, ist ja nur bei Blocks aus mehreren Zellen sinnvoll und hier gilt wieder das Prinzip, dass nur die beiden Eckzellen für die Prüfung verwendet werden und die dazwischenliegenden Zellen nicht beachtet werden.

verwendet man 11 und 12 zum Befüllen, so werden die inneren Rahmenlinien beider Zellen (1-4) gesetzt.

merkt man dann tatsächlich beim Umbruch.
setzte ich für alle Zellen bspw einzeln nur den oberen Rand, so hat die letzte Zeile auf dem Blatt dann keine untere Rahmenlinie.
setzte ich den Rahmen für den ganzen Zellbereich mit den inneren Linien, so hat die letzte Zelle auf dem Blatt auch einen unteren Rahmen.

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 25737
Registriert: 18. Apr 2009, 13:33

Re: Borders.Linestyle Null ?

Beitragvon mathmanne » 17. Apr 2019, 19:38

Salve Daniel,

entschuldigung, daß ich mich länger nicht meldete. Hin und wieder muß man seinen Brötchengeber zufriedenstellen. :P

Meine penetranten Fragen bezogen sich in letzter Konsequenz immer wieder auf die vertikalen und horizontalen inneren Rahmenlinien. Nun mußte ich leider feststellen, daß alle Zellen ohne Rahmen innere Rahmenlinien haben. Dies habe ich an einer jungfräulichen Datei mit meinem Makro getestet. Warum dies so ist, müssen Klügere herausfinden. Also ist die Abfrage darauf sinnlos.

& Mullit,

ich habe das 6. Objekt mit VBA gesucht und gelöscht, da es in dem Blatt2 nicht sichtbar aber .Visible=True war.
Excelfehler ?

& Luc,

nebenbei: Ich habe an der Fachhochschule die ersten Magnetkartenrechner eingeführt und programmiert. Dann arbeitet ich längere Zeit mit Lochstreifenrechnern und hielt Lehrgänge in Software und Hardwarereparaturen. Ich konnte z.B. einzelne Bits in RAMs reparieren ! Und dies ist seeeehr lange her. Und wer kennt noch den PDP8 ? Soviel zum Alter.

Ich wollte mit meiner Antwort Keinem auf die Füße treten. Ich bin immer sehr dankbar für jeden konkreten Rat.
Das Makro ist kurz und übersichtlich und man konnte darin sehen, daß jede Zelle auf jede Rahmenlinie (5 bis 12) testete.
Da immer wieder innere Rahmenlinien ausgegeben wurde, wollte ich nur wissen, ob meine Kommandos richtig waren. Ich konnte nicht verstehen, daß innere Rahmenlinien ausgegeben werden, wo keine sind.

Und lange Makros sind etwas anderes. Ich habe ein VBA-Progamm gebastelt, welches eng ausgeduckt 341 A4-Seiten bei 80 Zeichen/Zeile und 57 Zeilen/Seite lang wäre.

Und danke an Alle !

Gruß, Manne
Wenn die Klügeren immer nachgeben, regieren bald die Dümmeren die Welt !
Sie haben zu oft nachgegeben !
Gott liebt die Dummen, deshalb gibt auch so viele.
Benutzeravatar
mathmanne
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1079
Registriert: 25. Okt 2007, 20:54
Wohnort: Weimar / Thüringen

Re: Borders.Linestyle Null ?

Beitragvon slowboarder » 17. Apr 2019, 19:57

Hi
also ich bekomme, wenn ich "jungfräuliche" Zellen auf .Borders(xlInsideHorizontal).LineStyle abfrage immer das Ergebnis -4142, und das ist der gleiche Wert wie xlNone und steht für "keine Linie"
(zum vergleich, zeichne mal das Löschen von Rahmenlinien mit dem Recorder auf, dann siehst du ja, welcher Zahlenwert bzw Systemkonstante für "keine Linie" steht)

Insofern ist das Ergebnis korrekt und ich kann deine Beobachtung nicht nachvollziehen.

Die Gründe, warum ich .Borders(xlInside...) immer nur zum Formatieren aber niemals zum Analysieren verwednen würde, habe ich ja schon beschrieben.

was halt noch auffällt dass du im Code für die Prüfung immer mit xlLineStyleNone arbeitest und bei der Prüfung für InsideHorizontal dann mit xlNone.
bei mir (Excel 2010/2013) stehen beide Systemkonstanten für den gleichen Zahlenwert -4142.
vielleicht ist das ja in deiner Excelversion anders und das wäre dann die Erklärung für den Fehler.
Check also mal die Zahlenwerte und vergleiche das mit dem, was dein Excel als Wert verwendet, wenn Rahmenlinien gelöscht werden.



Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 25737
Registriert: 18. Apr 2009, 13:33

Re: Borders.Linestyle Null ?

Beitragvon Mullit » 17. Apr 2019, 20:17

Hallo Manne,
ich habe das 6. Objekt mit VBA gesucht und gelöscht, da es in dem Blatt2 nicht sichtbar aber .Visible=True war.
Excelfehler ?

...nein, nein, das Eichhörnchen ist Dir immer noch um eine Nasenlänge voraus :lol: , laß die Proc laufen, dann siehst Du im Direktfenster:

Code: Alles auswählen
Public Sub test()
Dim objShape As Shape
For Each objShape In ActiveSheet.Shapes
    With objShape
        Debug.Print .Name, .Left, .Top, .Width, .Height
    End With
Next
End Sub

Picture 5 96,75 80,25 165,75 38,25
Picture 6 99 134,25 158,25 35,25
Picture 7 98,25 184,5 167,25 33
Picture 9 95,25 240,75 165 39
Picture 68 96 306,75 141 45
Picture 70 285 294 0 0

Dann ihn hier laufen lassen, dann hast Du den kleinen Racker am Wickel.... :D 8-)

Code: Alles auswählen
Public Sub test2()
With ActiveSheet.Shapes("Picture 70")
     .Left = 10
     .Top = 10
     .LockAspectRatio = msoFalse
     .Width = ActiveSheet.Shapes("Picture 5").Width
     .Height = ActiveSheet.Shapes("Picture 5").Height
End With
End Sub

...eines von Deinen Gleichungsabbildern...

Bild

Gruß, Mullit
Mullit
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 875
Registriert: 16. Jan 2015, 19:31

Re: Borders.Linestyle Null ?

Beitragvon mathmanne » 18. Apr 2019, 16:36

Salve Mullit,

Danke für deine Antwort mit dem Code. Ich habe es mir einfacher gemacht:
Code: Alles auswählen
  For w = 1 To Worksheets.Count
    For Each sh In Worksheets(w).Shapes
      Debug.Print "ZPosition : " & sh.ZOrderPosition & _
                  "  Spalte : " & sh.TopLeftCell.Column & _
                  "  Zeile : " & sh.TopLeftCell.Row & _
                  "  Name : " & sh.DrawingObject.Name
      If sh.ZOrderPosition = 6 Then sh.Delete
    Next
Die Gleichungen dienten nur der Übung zur Objekteerkennung.

& Daniel,

Der Makrorecorder sagt: .Borders(xlInsideVertical).LineStyle = xlNone
Ich habe Zellen einer weiteren "jungfäulichen" Datei ohne mein Makro nur im Direktfenster geprüft:
?sheets(1).Range("A1").Borders(xlInsideVertical).LineStyle<>xlNone=Wahr
Also werde ich auf xlInside... nicht mehr prüfen.
Kann ich EXCEL noch trauen? Sollte ich es löschen und neu aufspielen? Ich merkte schon, daß ich eine merkwürdige Version habe. Über 4000 verschiedene Formate sind mit Excel2003 nicht möglich. Bei mir sind es über 9000. Um dies zu reduzieren und die Übersicht zu behalten, habe ich das ausführliche Makro geschaffen. Ich möchte nicht wieder überrascht werden mit der Meldung "Zu viele verschiedene Formate !".

Danke und Gruß, Manne
Wenn die Klügeren immer nachgeben, regieren bald die Dümmeren die Welt !
Sie haben zu oft nachgegeben !
Gott liebt die Dummen, deshalb gibt auch so viele.
Benutzeravatar
mathmanne
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1079
Registriert: 25. Okt 2007, 20:54
Wohnort: Weimar / Thüringen

Re: Borders.Linestyle Null ?

Beitragvon slowboarder » 18. Apr 2019, 16:52

Hi Manne
das erste was du in diesem Fall prüfen solltest ist:
welchen Zahlenwert hat der LineStyle?
welchen Zahlenwert hat xlNone?
außerdem: xlInside einer Zelle kanns eigentlich gar nicht geben. da musst du dich nicht wundern, wenn kein vernünftiges Resultat rauskommt.
das ist ungefähr so sinnvoll wie die Frage: Welches Meer liegt zwischen Afrika?
Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 25737
Registriert: 18. Apr 2009, 13:33

Re: Borders.Linestyle Null ?

Beitragvon mathmanne » 18. Apr 2019, 19:00

Salve Daniel,

es ist Alles normal.
xlNone = xlLineStylenNone = -4142
xlInsideVertical = 11
xlInsideHerizontal = 12

Aber das Nächste :
In der Originaldatei gibt es keine Rahmen. Somit keine Rahmenlinien, keine -farbe, keine Stärke und keine -stile. Aber die keine Rahmenlinie ist dünn !
If .Weight = XlBorderWeight.xlThin Then Call Ausgabe("Dünn")
xlThin = 2

Gruß, Manne
Wenn die Klügeren immer nachgeben, regieren bald die Dümmeren die Welt !
Sie haben zu oft nachgegeben !
Gott liebt die Dummen, deshalb gibt auch so viele.
Benutzeravatar
mathmanne
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1079
Registriert: 25. Okt 2007, 20:54
Wohnort: Weimar / Thüringen

Re: Borders.Linestyle Null ?

Beitragvon slowboarder » 18. Apr 2019, 20:25

Hi
ja, 2 ist die Breite auch für "keine Linie".
wenn die Linie sowieso nicht angezeigt wird, dann ist die breite ja auch egal, also brauchts auch keinen speziellen Wert dafür.
außerdem muss Excel ja auch irgendwie die Hilfsgitterlinien anzeigen, und so wird wahrscheinlich der Platz dafür freigehalten.
Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 25737
Registriert: 18. Apr 2009, 13:33

Ja, das ist richtig, ...

Beitragvon Luc$:-? » 18. Apr 2019, 21:07

...Manne & Daniel,
.Weight hat immer einen Default-Wert >0, der nur geändert wird, wenn .Weight explizit festgelegt wird. Weight und .LineStyle stehen außerdem in einer WechselBeziehung, die idR von letzterem dominiert wird. Früher kamen mE auch noch .Color und .ColorIndex hinzu, aber das ist in den neueren Versionen wohl nicht (mehr) so.
Luc :-?
Luc$:-?
 

Re: Borders.Linestyle Null ?

Beitragvon slowboarder » 18. Apr 2019, 21:31

also bei mir in 2016 ist es aktuell so, dass im Prinzip immer die akuell veränderte Eigenschaft dominiert, dh diese wird auf den gewünschten Wert gesetzt und die anderen Eigenschaften werden dann u.U. angepasst, so dass die Kombinantion aller Eigengschaften immer eine gültige Rahmenlinie ergibt.

auch wenn man in einer Zelle ohne Rahmen .Weight = 2 setzt (obwohl diese Zelle ja schon diesen Wert hat), wird automatisch der LineStyle von xlnone auf xlcontinonous (1) geändert.

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 25737
Registriert: 18. Apr 2009, 13:33

Na gut, dann Wechselbeziehung und Dominanz ...

Beitragvon Luc$:-? » 19. Apr 2019, 02:56

...der explizit festgelegten Eigenschaft, zB Haarlinie, dort fällt diese Beziehung mE besonders auf.
Wenn beide zueinander unpassend belegt wurden, dominiert dann auch die letztbelegte oder in bestimmten Fällen mal die eine, mal die andere, unabhängig von der Belegungsreihenfolge...?
Morhn, Luc :-?
Luc$:-?
 

Re: Borders.Linestyle Null ?

Beitragvon mathmanne » 19. Apr 2019, 07:09

Salve Daniel & Luc,

schön daß ihr euch so für mein Problem engagiert.
So, die nächste Botschaft: Ich habe mal nachgeschaut, welche Zelle die dünne nichtverhandene Rahmenlinie hat.
Ergebnis : ALLE ! Ich habe vorher alle Gitternetzlinien ausgeblendet.
Jetzt wird es merkwürdig.
Ich werde Excel neu installieren und dann berichten.

Schöne Feiertage !
Manne
Wenn die Klügeren immer nachgeben, regieren bald die Dümmeren die Welt !
Sie haben zu oft nachgegeben !
Gott liebt die Dummen, deshalb gibt auch so viele.
Benutzeravatar
mathmanne
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1079
Registriert: 25. Okt 2007, 20:54
Wohnort: Weimar / Thüringen

Luc, wie definierst du in diesem Fall Dominanz?

Beitragvon slowboarder » 19. Apr 2019, 12:12

für mich bedeutet Dominanz, dass wenn LineStyle dominieren sollte, es nicht möglich ist, eine andere Eigenschaft auf einen Wert zu setzten, der für den aktiven LineStyle nicht zulässig ist.

ansonsten, probiers doch einfach selber aus.
setze nacheinander zueinander unpassende Eigengschaftswerte und prüfe dann, ob die zuerst gesetzte Eigenschaft angepasst wurde oder ob sie ihren Wert behalten hat und die zuletzt gemachte Änderung nicht übernommen wurde.
im zweiten Fall könnte man von einer Dominanz sprechen, im ersten nicht.
ich habe aber noch kein Beispiel gefunden, bei dem der zweite Fall zutreffen würde.

sogar das setzen des Colorindex kann den LineStyle verändern (von xlnone auf xlcontionous)

ich gehe mal davon aus, dass es hier nicht um irgendwelche Dominanzen geht, sondern einfach darum, dass sich MS darüber Gedanken gemacht hat, was der Anwender eigentlich will, wenn er eine bestimmte Eigenschaft verändert und dann die anderen Eigenschaften im Hintergrund auf sinnvolle Werte anpasst, ohne dass diese explizit programmiert werden müssen.
Ist einfach ne Komfortfunktion, so dass es reicht ...Borders(..).Colorindex = 3 zu programmieren, um eine rote linie zu bekommen ohne dass man noch Weight und LineStyle explizit programmieren muss (außer man möchte eine Einstellung, die vom Default-Wert abweicht)

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 25737
Registriert: 18. Apr 2009, 13:33

VorherigeNächste

Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 16 Gäste