Spalte AA als Asci in einer Schleife

  • Excel

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von manuelritter.

    Spalte AA als Asci in einer Schleife

    Hallo leute...

    ich bin heute auf ein weiteres Problem gestoßen nachdem ich eine Schleife gebaut habe. Wieder erstmal der Code:

    Dim dataArray(32) As String
    aktivezeile = ActiveCell.Row

    For zähler = 0 To 25
    inhalt = Sheets("Bewerbungen").Range(Chr(zähler + 64 + 1) & aktivezeile).Value
    dataArray(zähler) = inhalt
    Next zähler


    Was tut es?

    Die Schleife liest von Spalte A an bis zu Spalte Z jedes Element der ausgewählten Zeile und schreibt deren Inhalt in einen Array.

    Wo ist das problem?

    Wie ihr sicher schon bemerkt habt ist der Array 33 objekte groß und soll dementsprechend natürlich auch soviel enthalten, nur das sich der Rest
    der zu lesenden Daten in den Spalten AA, AB , AC ... usw befindet.

    Das Problem liegt genau bei dieser Zeile:

    inhalt = Sheets("Bewerbungen").Range(Chr(zähler + 64 + 1) & aktivezeile).Value

    Wenn der zähler nun die 27 erreicht (sprich hier die 25+64+1 überschreitet) findet er leider seine Zelle nichtmehr.

    Dies liegt daran das der Zeichensatz 64+26 das Zeichen "Z" benennt und das Zeichen 64+27 ein "[" ist und kein "AA".

    Nun habe ich auch schon versucht einfach ein A vorne dran zu ketten, aber nicht erfolgreich, ausserdem ist dies keine schöne Lösung.

    Hat da jemand eine idee für mich?

    Ich wäre sehr dankbar :D
    Ich spiel jetzt mal Excel: :D

    User:
    Ey, Excel, mach mal die Spalten ausgeblendet!


    Excel:
    Ja großer Meister, ich muss aber erst meine Kristallkugel befragen, welche Spalte(n) du gemeint hast!


    User:
    Ja, aber mach schnell, ich bin heute etwas ungeduldig!


    Excel:
    Sorry großer Meister, Kristallkugel ist beim Service, du musst schon angeben welche Spalte(n), ich mach zwischenzeitlich mal Pause!


    SCNR, du hast vergessen, welche Spalte ausgeblendet werden soll:

    Visual Basic-Quellcode

    1. Sheets("Bewerbungen").Columns(1).Hidden = False 'Spalte A



    Der Doc!
    und ein 2. Mal, du hast Recht ;)

    Das funktioniert nun auch supa im ersten sheet ...

    im 2. sheet bringt er mir ein fehler bei:

    If Sheets("Bewerbungen").Columns.Hidden = False Then
    Sheets("Bewerbungen").Columns("m:p").EntireColumn.Hidden = True
    Sheets("Bewerbungen").Columns("as:bd").EntireColumn.Hidden = True
    End If

    Fehler passiert auch bei:

    Sheets("Bewerbungen").Columns("13:16").EntireColumn.Hidden = True
    Sheets("Bewerbungen").Columns("45:56").EntireColumn.Hidden = True

    Hm ist echt komisch, exakt der gleiche code funktioniert im anderen Sheet tadellos ... =/

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

    Columns funktioniert mit nur einem Argument, eine Serie von Spalten müsstest du mittels einer Schleife ausblenden:

    Visual Basic-Quellcode

    1. For cnt = 13 to 16
    2. Sheets("Bewerbungen").Columns(cnt).EntireColumn.Hidden = True
    3. Next cnt
    4. For cnt = 45 to 56
    5. Sheets("Bewerbungen").Columns(cnt).EntireColumn.Hidden = True
    6. Next cnt


    Abgesehen davon ist deine Zeile

    Visual Basic-Quellcode

    1. If Sheets("Bewerbungen").Columns.Hidden = False Then

    sinnlos, wie schon gesagt benötigt Columns ein Argument um richtig zu arbeiten. Du müsstest also hier mit

    Visual Basic-Quellcode

    1. If Sheets("Bewerbungen").Columns(13).Hidden = False Then

    prüfen, erst dann kriegst du auch ein korrektes Ergebnis.


    Der Doc!
    Hmmm funktioniert irgendwie nicht =/

    Anwendungs oder Objektorientierter Fehler

    Und vorallem, wie erklärt sich das in einem anderen sheet folgender code korrekt ausgeführt wird:

    If Sheets("Bewerbungen").Columns.Hidden = False Then
    Sheets("Bewerbungen").Columns("m:p").EntireColumn.Hidden = True
    End If
    Hab gerade gesehen, als Range nimmt er mehrere Spalten.

    Warum es einmal funktioniert und einmal einen Fehler ergibt, ist mir aber auch nicht klar, geh mal deinen Code im Einzelschritt (Taste F8) durch und schau dir die Werte an, vielleicht hilft das weiter.


    Der Doc!
    Da gibts nicht viel zum durchlaufen:

    Sub Output_click()
    If Sheets("Bewerbungen").Columns.Hidden = True Then
    Sheets("Bewerbungen").Columns("m:p").EntireColumn.Hidden = False
    Sheets("Bewerbungen").Columns("45:56").EntireColumn.Hidden = False
    End If

    Dim password As String
    password = "developer"
    Sheets("Bewerbungen").Unprotect (password)
    Sheets("Output Neu").Unprotect (password)

    dA = lesedaten
    schreibedaten (dA)

    Sheets("Output Neu").Protect (password)
    Sheets("Bewerbungen").Protect (password)

    If Sheets("Bewerbungen").Columns.Hidden = False Then
    Sheets("Bewerbungen").Columns("m:p").EntireColumn.Hidden = True
    Sheets("Bewerbungen").Columns("45:56").EntireColumn.Hidden = True
    End If

    End Sub

    an dem markierten punkt sagt er mir objektorientierter Fehler....
    Wieso er jetzt an der Stelle Laut gibt kann ich nicht sagen (sollte erst die nächste Zeile sein), dass er den ersten Block aber durchläuft ist klar da du bei der Prüfung keine Zelle(n) angegeben hast.

    Ich denke, eine kleine Änderung des ganzen würde das Problem lösen:

    Visual Basic-Quellcode

    1. Sub Output_click()
    2. If Sheets("Bewerbungen").Columns(13).Hidden = True Then
    3. Sheets("Bewerbungen").Columns.Range(Columns(13), Columns(16)).EntireColumn.Hidden = False
    4. Sheets("Bewerbungen").Columns.Range(Columns(45), Columns(56)).EntireColumn.Hidden = False
    5. End If
    6. Dim password As String
    7. password = "developer"
    8. Sheets("Bewerbungen").Unprotect (password)
    9. Sheets("Output Neu").Unprotect (password)
    10. dA = lesedaten
    11. schreibedaten (dA)
    12. Sheets("Output Neu").Protect (password)
    13. 'Gibt das kein Problem, wenn du eine geschützte Tabelle bearbeiten willst?
    14. Sheets("Bewerbungen").Protect (password)
    15. If Sheets("Bewerbungen").Columns(13).Hidden = False Then
    16. Sheets("Bewerbungen").Columns.Range(Columns(13), Columns(16)).EntireColumn.Hidden = True
    17. Sheets("Bewerbungen").Columns.Range(Columns(45), Columns(56)).EntireColumn.Hidden = True
    18. End If
    19. End Sub


    Scheinbar akzeptiert er Zahlen ausschließlich als Zeilenangaben und Buchstaben als Spalten, mit diesem Kunstgriff kannst du Spalten aber auch als Zahlen angeben (ansonsten in der alten Form mittels Buchstaben).


    Der Doc!