VBA Excel Makro

Hallo zusammen

konsternierterweise eine etwas sonderbare Frage.
Ich habe ein ganz kleines Makro geschrieben und erhalte nun beim kompilieren eine Fehlermeldung die ich mir nicht erklären kann. Muss etwas ganz simples sein, ich hoffe jemand hat ne Idee.

Fehler den ich erhalte: strCell meldet der Compiler als „Ungültiger Bezeichner“…
Was ich nicht verstehe: Egal was für eine Variable ich auch deklariere, der Compiler kennt sie nicht. Die AutoComplete Funktion aber schon.

Folgendes ist der Code
**************************
Option Explicit

Sub T1()
Dim myWS As Worksheet, strCell As String, intRowCounter As Long, myExtractedDate As Date, intEndPos As Integer, strTemp As String

Set myWS = ActiveWorkbook.ActiveSheet

For intRowCounter = 1 To myWS.Rows.Count
strCell = myWS.Cells(intRowCounter, 21).Value

If strCell.Length >= 0 Then
’ Search end pos in String
intEndPos = InStr(strCell, „/“, vbTextCompare)
intEndPos = InStr(intEndPos + 1, strCell, „/“, vbTextCompare)
intEndPos = intEndPos + 4

strTemp = Left(strCell, intEndPos)
myExtractedDate = Format(strTemp, „dd.mm.yyyy“)
Else
myExtractedDate = Format("", „dd.mm.yyyy“)
End If

myWS.Cells(intRowCounter, 21) = myExtractedDate
Next intRowCounter

End Sub
************************

Danke!

Fehler den ich erhalte: strCell meldet der Compiler als
„Ungültiger Bezeichner“…

Hi Mege,

der Compiler beschwert sich über .Lenght
Ich glaube du meinst das so:

If Len(strCell) > 0 Then

Diese Zeile gibt immer einen Fehler:

myExtractedDate = Format("", „dd.mm.yyyy“)

zumindest solange wie die Variable als Date deklariert ist.

Gruß
Reinhard

Hm danke…

Der Fehler war, dass ich nach DIM mehrere Deklarationen " AS String" hatte.
Nachdem ich alle gleichen Typen „zusammengefasst“ habe
Dim mInt1, mInt2 as Integer
Dim mStr1, mStr2 as String

hats gefunzt.

However. Das script läuft jetzt :smile:

Danke nochmals…

Hallo,

Der Fehler war, dass ich nach DIM mehrere Deklarationen " AS String"
hatte. Nachdem ich alle gleichen Typen „zusammengefasst“ habe

Dim mInt1, mInt2 as Integer
Dim mStr1, mStr2 as String

hats gefunzt.

However. Das script läuft jetzt :smile:

schön, daß es läuft, dann hat der Fehler, den Du eingebaut hast keine Auswirkungen. Trotzdem noch die Erklärung, was Du da geschreiben hast:

Du hattest:

Dim mInt1 As Integer, mInt2 As Integer
Dim mStr1 As String, mStr2 As String

Und jetzt steht da:

Dim mInt1 As Variant, mInt2 As Integer
Dim mStr1 As Variant, mStr2 As String

Daß dein Programm jetzt läuft liegt daran, daß an eine der variablen ein Wert übergeben wird, der erst nicht zur Deklaration gepasst hat, aber jetzt, weil die Variable Variant deklariert ist, verarbeitet werden kann. mStr1 As String wird nicht das Problem gewesen sein, wenn dem eine Zahl übergeben wird, passt VB die automatisch an und schreibt sie als String.

Deshalb ist zu vermuten, daß Deiner Variablen mInt1, von der Du annimmst, daß ihr integer Werte übergeben werden, tatsächlich etwas übergeben wird, das VB nicht in eine Zahl umwandeln kann.

Durch die Deklaration als Variant scheint Dein problem zwar behoben, Du musst aber mit überraschenden Ergebnissen rechnen, Dein Programm scheint nicht ganz das zu tun, was Du glaubst.

Gruß Rainer

Ja das altbekannte Problem mit Variants.

Ich habe das ganze noch ein wenig verbessert und arbeite nicht mehr mit Date, da in das Feld wo der Wert zurückgeschrieben wird, beide Typen stehen können (Datum und String) deshalb ist der Datentyp meiner Variable jetzt String.

Das Problem in VBA ist aber offensichtlich effektiv dass
Dim mintRow AS Integer, mstrTemp as String, mintCol as Integer, mstrFormattedDate as String

NICHT funktioniert.

Die Deklaration muss folgendermassen lauten:
Dim mintRow, mintCol as Integer
Dim mstrTemp, mstrFormattedDate as String

Also jeweils nur gleiche Typen innerhalb einer Zeile. Wenn mehrmals der gleiche Datentyp, mit Komma getrennt, deklariert wird, ist die Variable anschliessend auch innerhalb eines gültigen Sichtbarkeitsbereichs unbekannt!

Ich habe mittlerweilen auch die Formatierung meines Wertes in eine Funktion ausgelagert und sinnvollere Abbruchkriterien gewählt.

Folgender Code funktioniert soweit einwandfrei (und auch einigermassen failsafe… :wink: )

************************
Sub Format_AcceptedDate()
Dim myWS As Worksheet
Dim strCell As String
Dim intRowCounter, intEndPos As Long

Set myWS = ActiveWorkbook.ActiveSheet
Application.Cursor = xlWait

For intRowCounter = 1 To myWS.Rows.Count
If Len(myWS.Cells(intRowCounter, 4).Value) > 0 Then
myWS.Cells(intRowCounter, 23).Value = f_ExtractDate(myWS.Cells(intRowCounter, 23).Value)
Else
Exit For
End If
Next intRowCounter

Application.Cursor = xlDefault

End Sub

Private Function f_ExtractDate(strCellText As String) As String
Dim intEndPos As Long
Dim strTemp, strExtractedDate As String

If (Len(strCellText) >= 0) And (InStr(1, strCellText, „/“, 1) > 0) Then
’ Search end pos in String
intEndPos = InStr(1, strCellText, „/“, 1)
intEndPos = InStr(intEndPos + 1, strCellText, „/“)
intEndPos = intEndPos + 4

strTemp = Left(strCellText, intEndPos)
strExtractedDate = Format(strTemp, „dd.mm.yyyy“)
Else
strExtractedDate = strCellText
End If

f_ExtractDate = strExtractedDate

End Function
************************

Hallo,

Das Problem in VBA ist aber offensichtlich effektiv dass
Dim mintRow AS Integer, mstrTemp as String, mintCol as Integer,
mstrFormattedDate as String

NICHT funktioniert.

Die Deklaration muss folgendermassen lauten:
Dim mintRow, mintCol as Integer
Dim mstrTemp, mstrFormattedDate as String

das ist ein Trugschluss. Deshalb habe ich den Kommentar ja geschrieben.

Wenn Du schreibst:

Dim mstrTemp, mstrFormattedDate as String

ist mstrTemp als Variant deklariert und nicht, wie Du annimmst, als String.

Wenn

Dim mstrTemp As String, mstrFormattedDate As String

nicht funktioniert, liegt das Problem irgendwo im Code, nicht in der Deklaration.

Gruß Rainer

Nachtrag, Code
Hallo,

noch ein Code zum verdeutlichen:

Private Sub Test()
 Dim a, b, c As String
 Dim x As String, y As String, z As String
 a = 1
 b = 2
 MsgBox a + b
 x = 1
 y = 2
 MsgBox x + y
End Sub

in der ersten Messagebox bekommst Du 3 zurück, also 1+2
In der zweiten Messagebox bekommst Du 12 zurück, also „1“ & „2“

a und b sind Variant, x und y sind Strings.

Gruß Rainer

Hi Mege,

Das Problem in VBA ist aber offensichtlich effektiv dass
Dim mintRow AS Integer, mstrTemp as String, mintCol as
Integer, mstrFormattedDate as String
NICHT funktioniert.

Wo ist der aktuelle Code zu dieser Dim-Zeile?
Glaub endlich mal Rainer, es liegt nicht am Dim sondern am Restcode.

Was soll das sein:
Dim intEndPos As Long
Sich selbst Steine in den Weg legen?
Dim lngEndPos As Long ist besser

Gruß
Reinhard

Hallo Reinhard,

Glaub endlich mal Rainer …

*gg* nein, den Beispielcode ausprobieren.
Für ‚Glauben‘ haben wir andere Bretter. :smile:

Das ist ja das schöne an VB, daß man so leicht prüfen kann, was richtig ist. Deshalb gibt es hier auch nie Streit.

Gruß Rainer

Danke ich verstehe von wegen Typen.

Was mich irritiert ist das
Dim strTemp as String, strFormatedDate as String

nicht funktioniert, während
Dim strTemp as String
Dim strFormatedDate as String

funktioniert. an sich geht es ja nur darum.
Das
Dim strTemp, strFormatedDate as String

funktioniert weil strTemp dann Variant ist bedeutet ja dann schlussendlich, dass irgendwo in der Zuweisung der Variabel strTemp etwas mit dem String nicht stimmt. Stellt sich dann die Frage, weshalb die Deklaration auf zwei Zeilen klappt, während die deklaration auf einer Zeile mit Komma getrennt nicht klappt.

Wenn ich beide Variablen auf einer Zeile deklariere (jeweils mit as String) kennt der Kompiler die erste nicht.

However… Um Glauben ging es nie, das halte ich bei programmierähnlichen Sprachen für unangebracht. Eine Argumentation auf dieser Ebene ebenso.

Auf jeden Fall danke Rainer, Deine Tips haben mir geholfen.

@Rainhard
Sorry dass ich zu dumm bin. Ich werde versuchen meine Inkompetenz in Zukunft durch ein sorgfältiges Lesen Deiner Beiträge versuchen zu kompensieren.

@Rainhard
Sorry dass ich zu dumm bin. Ich werde versuchen meine
Inkompetenz in Zukunft durch ein sorgfältiges Lesen Deiner
Beiträge versuchen zu kompensieren.

Hi Mege,

was hat das mit deiner Anfrage hier zu tun?
Dein Problem mit Dim besteht offensichtlich immer noch. Wozu also noch zusätzlich einen Nebenkriegsschauplatz aufmachen?

http://de.wikipedia.org/wiki/Nebenkriegsschauplatz

Gruß
Reinhard

Hallo,

Was mich irritiert ist das
Dim strTemp as String, strFormatedDate as String

nicht funktioniert, während
Dim strTemp as String
Dim strFormatedDate as String

funktioniert

das ist der selbe Code, nur geringfügig anders geschrieben.

Dein Problem kann ich nicht nachvollziehen, mein VB verhält sich anders, als Du beschreibst.

Poste doch mal etwas Code, der das Problem zeigt, ohne die Inhalte Deiner Excel-Tabelle zu verwenden. Ich habe kein Excel, Code der in Excel auf Tabellen zugreift kann ich nicht testen.

Gruß Rainer

Hi Mete,

etwas zur Lektüre:

Option Explicit
'
Sub Format\_AcceptedDate()
Dim lngRowCounter As Long
Application.Cursor = xlWait
With ActiveWorkbook.ActiveSheet
 For lngRowCounter = 1 To .Cells(Rows.Count, 4).End(xlUp).Row
 .Cells(lngRowCounter, 23).Value = f\_ExtractDate(.Cells(lngRowCounter, 23).Value)
 Next lngRowCounter
End With
Application.Cursor = xlDefault
End Sub
'
Private Function f\_ExtractDate(strCellText As String) As Variant
Dim Kurz As Variant
Kurz = Split(strCellText, "/")
If UBound(Kurz) 

Gruß
Reinhard