Excel Zellgrösse ändern *** gelöst ***

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von compufreak.

    Excel Zellgrösse ändern *** gelöst ***

    Hallo alle zusammen,
    gibt es die Möglichkeit, die größe einer Zelle in Excel zu ändern (Excel 97-2003) ??

    Ich schriebe mit VB jede Menge Daten in eine Excel Liste, aber die Texte sind oft länger als die Standartbreite von 10,71 pixeln... ich habe es raus für EINE Zelle mit

    xxx ist mein workboook

    Visual Basic-Quellcode

    1. xxx.cells.offset(1).Columnwidth = 20


    ich hoffe, ich habe mich nicht verschrieben... auf jeden Fall ist egal, was ich dort bei offset reinschreibe, es wird immer nur EINE Zelle in der Breite geändert..

    hier z.B. die erste Zelle, wenn ich (1,10) schreibe wird Zelle J verbreitert... ich möchte aber mehrere Zellen verbreitern nicht nur eine
    ich kapiere es nicht.... ichhabe ja auch nicht die möglichkeit wie im Makro range(A:A) und range(B:B) zu markieren, es geht ja nur mit cells und zahlen...
    Bitte um Hilfe und bedanke mich schonmal in Vorfeld ^^

    EDIT: SUPER wäre auch, wenn die Zellen automatisch an die längste Zelle angepasst werden würde

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „compufreak“ ()

    Hi.

    Da du nur eine Zelle auswählen kannst, musst du eine Schleife verwenden, die die Einzelzellen für dich bearbeitet:

    Visual Basic-Quellcode

    1. For i = 1 To [anzahl Zellen]
    2. xxx.cells.offset(i).Columnwidth = 20
    3. Next


    Das Auslesen der Textbreite wird schwierig, da die meisten Schriftarten keine Blockschriftarten sind (genannt "Monospaced fonts" --> Schriftart, bei der alle Buchstaben gleich breit sind). Daher kannst du schonmal nicht mit der Textlänge in Zeichen (was aber von .Length zurückgeliefert wird) arbeiten. Eine kurze Suche hat jedoch die TextWidth-Eigenschaft zu Tage gefördert, welche die Breite einer Zeichenfolge in der aktuellen Schriftart und -größe angibt. Hier der Link: experts-exchange.com/Programmi…ual_Basic/Q_20285954.html (die Seite war gerade down - habe sie im Google-Cache betrachtet. Suchbegriffe: vba measurestring). Wenn du nun aus allen gefüllten (oder zu füllenden) Zellen diese Eigenschaft ausliest und den größten Wert in der For-Schleife benutzt, bist du schon am Ziel.

    Die Zellen werden wieder per For-Schleife ausgelesen:

    Visual Basic-Quellcode

    1. Dim breite As [WasAuchImmer, wahrscheinlich Single]
    2. For i = [ErsteZelle] To [LetzteZelle]
    3. tmp = '... TextWidth irgendwie in Verbindung mit i (mal im MSDN nachschauen)
    4. If tmp > breite Then
    5. breite = tmp
    6. End If
    7. Next
    8. 'Breite für alle festlegen (siehe oben).
    Gruß
    hal2000
    Also ich kenne mich jetzt mit VB.NET nicht so aus. Aber wenn man einen Verweis auf Excel setzt, kann man doch auf das komplette Objektmodell von Excel zugreifen, oder?

    Wenn nun Sh ein Excel.Worksheet-Objekt deines Tabellenblatts sei, müsste man die optimale Spaltenbreite festlegen können. Hier 4 Beispiele:

    Visual Basic-Quellcode

    1. Sh.Columns("J:J").AutoFit
    2. Sh.Columns(10).AutoFit
    3. Sh.Cells(1, 10).EntireColumn.AutoFit
    4. Sh.Range("J1").EntireColumn.AutoFit
    hmm schonmal thx für die antworten, werde ich worgen mal testen, obwohl ich denke, daß

    Visual Basic-Quellcode

    1. For i = 1 To [anzahl Zellen]
    2. xxx.cells.offset(i).Columnwidth = 20
    3. Next


    das gleiche ist wie

    Visual Basic-Quellcode

    1. xxx.cells.offset(1).Columnwidth = 20
    2. xxx.cells.offset(2).Columnwidth = 10
    3. xxx.cells.offset(3).Columnwidth = 10
    4. xxx.cells.offset(4).Columnwidth = 13
    5. xxx.cells.offset(5).Columnwidth = 25


    oder leige ich falsch ?... ich werde es morgen wissen und wenn es mit der schleife funktioniert, werde ich michwundern wie das geht ^^
    Ja das ist mir klar, es ging mir um den logischen ablauf.... ob ich eine Schleife benutze oder es manuell 5 mal untereinander sreiben würe ... wenn er nur eines davon annimmt (ich gehe vom Letzten aus) ist es egal ob ich eine schleife benutze oder es manuell schreibe..

    Habe es auch gerade getestet, schleife funzt nicht, aber hab trotzdem eine lösung gefunden, dank des .autofit hinweises ^^

    Visual Basic-Quellcode

    1. xlApp3 = New
    2. Excel.Application
    3. xlApp3.Visible = False
    4. xlMappe = xlApp3.Workbooks.Add()
    5. xlBlatt = CType(xlMappe.Worksheets(1),Excel.Worksheet)
    6. xlBlatt.Name = "Name"
    7. xlZelle = xlBlatt.Range("A1")
    8. xlZelle.Offset(3, 2).Columns.ColumnWidth = 25
    9. xlZelle.Offset(3, 3).Columns.AutoFit()
    10. xlZelle.Offset(3, 4).Columns.AutoFit()
    11. xlZelle.Offset(2,5).Columns.AutoFit()

    diese zeilen habe ich am Ende eingebaut (also wenn die excel liste komplett erstellt ist) da ich in den meissten Fällen die den längsten Text kenne, nur in 3,2 eine unbekannte länge steht habe ich es so gemacht:als erstes wird zelle 3,2 = (C3)auf 25 Pixel gebracht und dan die anderen Zellen mit autofit an die Textlänge angepasst, klappt super !!Danke für alle Tipps !!