Vba

Hallo,

ich weiß nicht mehr weiter…ich seh den Fehler nicht, aber vielleicht kann mir ja jemand von euch weiterhelfen.

Dim status
anz = 24
status = Array(anz)
For i = 1 To anz
status = Workbooks(t_name).Worksheets(i).Cells(1, 1)
Next
For j = 1 To anz
Workbooks(f_name).Worksheets(j).Cells(1, 1) = status(j)
Next

in status werden BOOLEAN-Werte geschrieben!
wenn ich in der zweiten schleife die BOOLEAN-Werte wieder ausgeben möchte bringt er mir bei status(j) =>

Kann mir jemand helfen?

Grüße,
Jens

Hallo,

Ahoi.

Dim status
anz = 24
status = Array(anz)
For i = 1 To anz
 status = Workbooks(t\_name).Worksheets(i).Cells(1, 1)
Next
For j = 1 To anz
 Workbooks(f\_name).Worksheets(j).Cells(1, 1) = status(j)
Next

Einmal t_name, einmal f_name. Sicher, dass das stimmt (ich meine bloß, man sieht es kaum)?

in status werden BOOLEAN-Werte geschrieben!
wenn ich in der zweiten schleife die BOOLEAN-Werte wieder
ausgeben möchte bringt er mir bei status(j) =>

In der i-Schleife ist status nicht als Array angezogen, in der j-Schleife schon. Das wäre der erste Ansatz zum Suchen - Vermutung : status wird in der dim-Anweisung als Variant angelegt, Du machst ihn zum Array, und die i-Schleife zum einfachen Boole-Wert, dem er es 24 Mal besorgt. Dann muss er, wenn ihn die j-Schleife wieder als Array haben will, auf dem Schlauch stehen.

Deine Variablen- Benamsung ist m.E. suboptimal … aber das ist z.T. auch Geschmackssache.

GRuß kw

> Dim status  
> anz = 24  
> status = Array(anz)  
> For i = 1 To anz  
> status = Workbooks(t\_name).Worksheets(i).Cells(1, 1)  
> Next  
> For j = 1 To anz  
> Workbooks(f\_name).Worksheets(j).Cells(1, 1) = status(j)  
> Next

Hallo Jens!

Die erste Schleife macht keinen Sinn! Du schreibst bei jeder Wiederholung den Cells-Wert erneut in die Status-Variable. Dabei wird jedesmal der Wert des vorherigen Durchlaufs überschrieben, weil die Statusvariable nicht als Array verwendet wird. Außerdem hast Du VOR der Schleife auch schon einen Wert (status = Array(anz)) an die Variable übergeben, die natürlich von der ersten Schleifenwiederholung überschrieben wird. Es werden übrigens keine Boolean-Werte übergeben, sondern eher String-Werte - jenachdem, was in Cells(1,1) steht!

Die zweite Schleife versucht dann, den Status(j)-Wert in eine Zelle zu schreiben. Status(j) wird aber nirgends belegt; das Array ist also vermutlich leer, die Inhalte stehen auf NULL. Und genau DAS erzeugt wohl auch Deine Fehlermeldung.

Gruß
(Woly)

Hallo Jens,

nachdem das meiste hier schon gesagt wurde, nur noch ein genereller Tip um solche Probleme in Zukunft schon im Keim zu ersticken:

  1. Schreibe an den Anfang jedes Moduls „Option Explicit“, damit zwingt VBA dich, jede Variable zu deklarieren, damit erspart man sich späte eine Menge Sucharbeit falls man sich doch irgendwo mal im Namen vertippt hat. Hier kriegt man den Fehler gleich, ohne Option Explicit irgendwann mal.

  2. Deklariere alle Variablen mit dem Typen den sie dartstellen sollen. Also Dim x oder Dim x as Variant sind hier nicht so gut. Schreibe lieber Dim x as Integer oder sowas, dann achtet VBA schon selber drauf, das du x auch nur entsprechend verwendest.

Gruß
Daniel

Autsch…

danke, aber der fehler war echt zu dämlich!

Nochmals danke.

Grüße,
Jens