Tabellenname, Spalten, etc durch Variablen ersetzen

  • Excel

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    Tabellenname, Spalten, etc durch Variablen ersetzen

    Hi, ich bins mal wieder :D

    Folgendes:

    Ich will jeden Tabellennamen und jede Zeile/Spalte jeweils durch eine Variable ersetzen und irgendwie funktioniert es nicht. Habe das was hinter "With" steht (also den Tabellennamen) ersetzt durch die Variable "Test", die ich in einem anderen Modul so definiert habe:

    VB.NET-Quellcode

    1. Public Test As Variant
    2. Sub Sortieren()
    3. Test = Worksheets(1).CodeName
    4. MsgBox Test
    5. End Sub


    Die MsgBox spuckt mir schon mal den richtigen Wert aus. Aber irgendwie will VBA nicht...: Laufzeitfehler '424': Objekt erforderlich
    Dabei wird die Zeile #33 markiert. Kann ich das gar nicht durch eine Variable ersetzen??

    VB.NET-Quellcode

    1. Option Explicit
    2. 'ermittelt je Haltung die Renovierungskosten
    3. 'Dauer der Ausführung dieses Moduls: 0:12 Minuten
    4. Sub KostenRenovierung()
    5. Dim Zeile As Long
    6. Dim ZeileMax As Long
    7. Dim AnschlussZahl As Integer
    8. Dim AnschlussKosten As Integer
    9. Dim DurchmesserLast As Integer
    10. Dim DurchmesserGes As Integer
    11. Dim DurchmesserNow As Integer
    12. Dim Materialart As Range
    13. Dim ProfilartGes As Integer
    14. Dim ErsteMaterialart As String
    15. Dim PassenderTreffer As Range
    16. Dim Suchbereich As Range
    17. Set Suchbereich = Tabelle7.UsedRange 'Tabelle, die die Reparaturkosten enthält
    18. AnschlussZahl = 0 'Anfangsanzahl
    19. AnschlussKosten = 450 'Kosten in Euro, die je Anschluss der Haltung aufaddiert werden
    20. With Test
    21. 'zu bearbeitenden Bereich leeren
    22. .Range("HR:HR").ClearContents
    23. .Range("HR40").Value = "Renovierung" 'Spaltenüberschrift setzen
    24. ZeileMax = .UsedRange.Rows.Count 'letzte Zeile ermitteln
    25. For Zeile = 41 To ZeileMax 'jede Zeile
    26. If .Cells(Zeile, 101).Value = "BCA" Then
    27. AnschlussZahl = AnschlussZahl + 1
    28. End If
    29. .
    30. .
    31. .
    32. Geht noch weiter, aber das reicht erstmal :D
    Ich nehme an, dein Test soll das Worksheet Objekt sein.
    Weil du setzt es ja einfach mit dem String (dem Codename) des Worksheets.
    String hat auch kein Range Member usw.

    Wenn dann:

    Visual Basic-Quellcode

    1. set Test = Worksheets(1)
    Das ist meine Signatur und sie wird wunderbar sein!
    Ja du kannst es in dem einen Modul global und public deklarieren:

    Visual Basic-Quellcode

    1. Public Test As Worksheet
    2. Public Sub setit()
    3. Set Test = Worksheets(1)
    4. End Sub


    Im 2. Modul dann einfach verwenden:

    Visual Basic-Quellcode

    1. Sub useit()
    2. Module1.setit
    3. Debug.Print (Module1.Test.CodeName)
    4. End Sub


    Du musst nichtmal zwingend den Modulnamen am Anfang verwenden, aber es ist dann denke ich besser zu lesen und sobald du Module1. schreibst erhältst du auch Vorschläge von der IDE.
    Aber Achtung, theoretisch kannst du auch auf Test zugreifen, ohne das es vorher via Module1.setit gesetzt wurde! Dann ist Test nicht initialisiert und ist Nothing!
    Das ist meine Signatur und sie wird wunderbar sein!