Index 'Ungültiger Bezeichner'

Hallo,
Ich habe folgenden Code:

Dim TBSpaltea(10) As String
Dim i As Integer

Private Sub CBAnnehmen\_Click()
 Answer = MsgBox("Die aktuelle Tabelle wird unwiederruflich gelöscht!", vbOKCancel, "Achtung!")
 If Answer = 1 Then
 i = 1
 Do Until UFNeueTabelle.Width - i \* 80 - 8 = 0 Or i = 25
 Cells(1, i) = TBSpaltea(i).Text
 i = i + 1
 Loop

 UFNeueTabelle.Hide
 End If
End Sub

Dieser Code soll den Inhalt von TextBoxen (Die Anzahl ist variabel) in Zellen kopieren. Allerdings meckert er immer rum, das es ein ungültigen Bezeichner (TBSpaltea) gibt.
Jetzt habe ich so gar keine Ahnung was er von mir will, kann mir da jemand helfen? Hat das was mit dem Dimen zu tun?

Gruß
GURKE

Hi,
schätze mal, dass „TBSpaltea(i).Text“ null basierend ist.
versuche es mal mit „TBSpaltea(i-1).Text“

Gruss
Joey

Moin Joey,
Ändert leider nichts. Er geht ja nichtmal die Prozedur durch, sondern meckert schon davor rum, also wenn ich den Sub ausführen will.
Trotzdem danke für deinen Versuch :wink:
Gruß
GURKE

Hi,
habe schon lange nichts mehr mit VB gemacht. Aber muss es da nicht „Public TBSpaltea(10) As String“ heissen?

Gruss
Joey

Hi Joey,

habe schon lange nichts mehr mit VB gemacht. Aber muss es da
nicht „Public TBSpaltea(10) As String“ heissen?

Leider auch nicht:

Fehler beim Kompelieren:

Konstanten, Zeichenfolgen fester Länge, benutzerdefinierte Datenfelder und Declare-Anweisungen sind als Public-Elemente von Objektmodulen nicht zugelassen.

(

Gruß

Julian

Hi,
Dann musst du das in einem allgemeinen Modul deklarieren.

Gruss
Joey

Moin,
Also ich habe den private Sub zum Sub gemacht, nichts gebracht, wieder ungültiger Bezeichner und wenn ich dann den Dim wieder auf public mache kommt der Fehler meiner letzten Nachricht.

Gruß

GURKE

Moin, Gurke,

Dim TBSpaltea(10) As String

Cells(1, i) = TBSpaltea(i).Text

ein String hat keine Eigenschaft / Methode Text.

Gruß Ralf

Hi,
du hast offensichtlich das Ganze in einem Objektmodul definiert.
In einem Objektmodel kannst du keine solchen public deklarationen machen. Daher mache sie in einem allgemeinen Modul.
(Wobei das vom OO Standpunkt eigentlich falsch ist)

Gruss
Joey

PS: Was Ralf geschrieben hat ist nebenbei auch noch richtig.

Hallo Gurke,

Dim TBSpaltea(10) As String

Wo wird den TBSpaltea() gefüllt? So wie’s dasteht, ist der Array leer.
Und: Wo ist answer definiert?

Dein Do steigt bei i=25 aus. Dann ist das doch eher eine Sache für For. Deshalb würde ich die Struktur so ändern:

Private Sub CBAnnehmen\_Click()
 If MsgBox("Die aktuelle Tabelle wird unwiederruflich gelöscht!", \_
 vbOKCancel+vbDefaultButton2, "Achtung!")=vbOK Then 'Abbrechen aktivieren
 For i = 1 to 25
 If UFNeueTabelle.Width - i \* 80 - 8 = 0 then \_
 Cells(1, i) = TBSpaltea(i)
 Next i
 UFNeueTabelle.Hide
 End If 'MsgBox
End Sub

Der Fehler bei TBSpaltea() ist natürlich noch nicht beseitigt.

M.

Hi Gurke,

und noch ein Nachtrag: Ungültiger Bezeichner könnte darauf hindeuten, daß Du nach Erstellen der Prozedur den aufrufenden Knopf umbenannt hast, also daß CBAnnehmen gar nicht mehr so heißt.

M.

Hallo Markus,

Dim TBSpaltea(10) As String

Wo wird den TBSpaltea() gefüllt? So wie’s dasteht, ist der
Array leer.

Das Füllen übernimmt man selber in der Userform. Wenn man den Annehmen-Button klickt, wird erst der Code ausgeführt.

Und: Wo ist answer definiert?

Ich habe die unrelevanten Teile des Codes rausgenommen :wink: Werd ihn unten aber nochmal anhängen.

Dein Do steigt bei i=25 aus. Dann ist das doch eher eine Sache
für For. Deshalb würde ich die Struktur so ändern:

Jain, es war so eine Art Notlösung. Wenn ich mich verrechne sollte er spätestens nach 25 Text-Boxen aufhören sie durchzugehen. Normalerweise stoppt aber folgender Teil die Schleife:

Do Until UFNeueTabelle.Width - (i + 1) \* 80 - 8 = 0

Private Sub CBAnnehmen_Click()
If MsgBox(„Die aktuelle Tabelle wird unwiederruflich
gelöscht!“, _
vbOKCancel+vbDefaultButton2, „Achtung!“)=vbOK Then
'Abbrechen aktivieren
For i = 1 to 25
If UFNeueTabelle.Width - i * 80 - 8 = 0 then _
Cells(1, i) = TBSpaltea(i)
Next i
UFNeueTabelle.Hide
End If 'MsgBox
End Sub

Der Fehler bei TBSpaltea() ist natürlich noch nicht beseitigt.

Gruß

GURKE

Dim TBSpalte(10) As Object
Dim i As Integer
Dim answer as Integer

Private Sub CBAnnehmen\_Click()
 Answer = MsgBox("Die alte Tabelle wird unwiederruflich gelöscht!", vbOKCancel, "Achtung!")
 If Answer = 1 Then
 i = 1
 Löschen
 Do Until UFNeueTabelle.Width - (i + 1) \* 80 - 8 = 0 Or i = 25
 Cells(1, i) = TBSpalte(i).Text
 i = i + 1
 Loop
 If CBAnzPreGes.Value = True Then
 i = i + 1
 Cells(1, i) = "Anzahl"
 i = i + 1
 Cells(1, i) = "Preis"
 i = i + 1
 Cells(1, i) = "Gesamtpreis"
 End If

 Range(Cells(1, 1), Cells(1, i)).Select
 With Selection.Borders(xlEdgeBottom)
 .LineStyle = xlContinuous
 .Weight = xlMedium
 .ColorIndex = xlAutomatic
 End With

 Range(Cells(1, 1), Cells(3, i)).Select
 With Selection.Borders(xlInsideVertical)
 .LineStyle = xlContinuous
 .Weight = xlThin
 .ColorIndex = xlAutomatic
 End With


 UFNeueTabelle.Hide
 End If
End Sub

Moin Ralf,

Dim TBSpaltea(10) As String

Cells(1, i) = TBSpaltea(i).Text

ein String hat keine Eigenschaft / Methode Text.

Habe es jetzt als Object gedimmt. Nun durchläuft er schonmal den Code, allerdings meckert er diesmal, das die Objektvariable oder With-Blockvariable nicht festgelegt sei? Was hat das nun wieder zu bedeuten? Der gesamte Code ist sonst auch nochmal bei meiner Antwort auf Markus zu sehen, falls dir das was hilft…

Gruß

GURKE

Hi Gurke,

Habe es jetzt als Object gedimmt.

das bringt Dich nicht weiter.

Nun durchläuft er schonmal
den Code, allerdings meckert er diesmal, das die
Objektvariable oder With-Blockvariable nicht festgelegt sei?
Was hat das nun wieder zu bedeuten?

Genau das, was es sagt - Du müsstest dem Objekt erstmal ein anderes Objekt zuweisen. Hast aber keins :smile:))

Lass es beim String, weise dem Array erstmal was zu, womit sich hantieren ließe, und schmeiß das .text raus. String ist String, mehr geht nicht.

Gruß Ralf

Hi,

Hi Gurke,

Nun durchläuft er schonmal
den Code, allerdings meckert er diesmal, das die
Objektvariable oder With-Blockvariable nicht festgelegt sei?
Was hat das nun wieder zu bedeuten?

Genau das, was es sagt - Du müsstest dem Objekt erstmal ein
anderes Objekt zuweisen. Hast aber keins :smile:))

Lass es beim String, weise dem Array erstmal was zu, womit
sich hantieren ließe, und schmeiß das .text raus. String ist
String, mehr geht nicht.

Und das heißt ich soll was machen? Komme gerade überhaupt nicht mit, wo das Problem liegt, geschweige denn wie man es lösen könnte.

Gruß

GURKE

Hi Gurke,

Und das heißt ich soll was machen?

schreib

 Cells(1, i) = TBSpaltea(i).Text

und natürlich

 dim TBSpaltea(10) as string

Gruß Ralf

ps: Den Rest des Codings habe ich nicht angeschaut, mein Ehrentitel ist Häuptling Faule Sau.

Moin Ralf,

Hi Gurke,

Und das heißt ich soll was machen?

schreib

Cells(1, i) = TBSpaltea(i).Text

und natürlich

dim TBSpaltea(10) as string

THX
Jetzt funzts :wink:

Gruß

GURKE

Hi,
Ich bins nochmal :wink:
Der genannte Code funktioniert schon, allerdings kann ich auf die TextBox nicht zugreifen. Gemäß dem Code:

TBSpalten = "TBSpalte" & i
Set TBSpalten = Controls.Add("Forms.TextBox.1", TBSpalten, Visible)

müsste ich ja mit:

ABC = TBSpalte0.Text

Die Variable ABC (hab ich mir jetzt ausgedacht) beschreiben können. Allerdings passiert einfach gar nichts. Keine Fehlermeldung oder so, auch wenn ich anstatt 0 1, 2, 3, etc. einsetze passiert nichts. Woran kann das jetzt liegen? Wie heißt die TextBox die ich dort hinzufüge?

Gruß
GURKE

Hi Gurke,

ABC = TBSpalte0.Text

trotz aller Trickserei mit dem Index (keine Ahnung, was da passiert) bleibt TBSpalte ein String, und Strings haben keine Methode .text.

Wie heißt die TextBox die ich dort hinzufüge?

Das sollte sich aus der Beschreibung von Controls.Add ergeben.

Gruß Ralf

Hi,

ABC = TBSpalte0.Text

trotz aller Trickserei mit dem Index (keine Ahnung, was da
passiert) bleibt TBSpalte ein String, und Strings haben keine
Methode .text.

Hatte ich eigentlich auch nicht :wink: Aber sogar folgender einfacher Code geht nicht:

CommandButton2.Caption = TBSpalte1

Wie heißt die TextBox die ich dort hinzufüge?

Das sollte sich aus der Beschreibung von Controls.Add ergeben.

Also in diesem Falle, was in der Variable TBSpalten steht?

Gruß

GURKE