Excel vba

Liebe/-r Experte/-in, excel makro vba programmierung.

Ich habe ein kleines Problem.

Ich habe in meiner Tabelle zellen die mit datum und zeit beschriben sind. mein makro soll diese 2 sachen suchen, finden und in die tabelle2 reinschreiben. dies bekomme ich auch hin. Dies bekomme ich hin das er nach einer bestimmten länge sucht und wo der text steht (beispiel kommt gleich) mit einer bestimmten länge von zeichen.

Datum (D) = 10 zeichen = 11.11.2009
Zeit (Z) = 8 Zeichen = 08:36:00
Der „:“ wird mit gezählt deswegen ( und 10 Zeichen

Beispiel:

aa11 bb22 cc33
Da1Z bb22 Dc1Z
aa11 Db2Z cc33

Hier mein code für das datum:

VA_Datum = CDate(Left(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Datum), 10))

für zeit:

VA_Zeit = CDate(Right(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Zeit), 8))

Jetzt passiert es aber das mein datum nur 9 zeichen besitzt. (D = 1.12.2009)

Weil aber mein code nur nach 10 zeichen sucht gibt er natürlich einen fehler aus das die Typen unverträglich sind.

Wie schreibe ich das er, wenn nichts mehr finden mit 10 zeichen nach 9 sucht.

ich denke das geht über eine if funktion. weis aber nicht wie ich es schreiben soll.

mfg und thx

hallo alpha63,

poste mir mal den code, dann schreibe ich es dir fertig. Die Lösung hast du ja schon selbst gesagt: wenn ein Fehler gebracht wird (on error) dann mach den code mit 9

müsste funktionieren

Fehler kann man nicht nur abfangen, sondern auch gleich für die Lösung verwenden.

on error go to MitNeun

MitNeun:
VA_Datum = CDate(Left(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Datum), 9))

Versuch es mal!

Jürgen

leider funzt das nicht (fehler 1004)

'—Neue VA-Nr = neue VA --------------------------------------------------------------------------------------------------------

If IsNumeric(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Nummer)) Then
If Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Nummer) VA_Nummer Then
VA_Nummer = Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Nummer)

VA_Datum = CDate(Left(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Datum), 10))

On Error GoTo MitNeun
MitNeun:
VA_Datum = CDate(Left(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Datum), 9))
VA_Datum = CDate(Left(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Datum), 9))

VA_Zeit = CDate(Right(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Zeit), 8))
VA_Name = Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Name)
End If

der code ohne das was sie geschrieben haben

Vorschlag:

erst mal auf eines eingrenzen: Datum

Zeit kommt später!

On Error GoTo ErrorHandler
. . .
Exit Sub
ErrorHandler:
if err.number=1040 then
VA_Datum = CDate(Left(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Datum), 9))
end if
Resume Next

yeah ich liebe sie^^

es funktioniert.
danke danke.

die zeit klappt auch da sie immer nur 8 zeichen hat. es klappt alles vielen dank für ihre hilfe.

falls ich noch fragen habe würde ich sie gerne deswegen anschreiben

habe doch noch eine frage.

In meiner „.xls“ datei sind 3 Tabellen.

tabelle1 = Daten
Tabelle2 = Index
Tabelle3 = Start

In der Tabelle3 ist ein button der ein script enthält der sich auf Tabelle2 bezieht.

Wie sage ich ihm das bei klicken des Buttons der Script auf tabelle2 ausgeführt wird?

mfg thx

Hallo alpha,

einfach vor dasscript in tabelle zwei das wort public schreiben. dann müßte es klappen.
wenn nicht - nochmal fragen

grüße - bin allerdings erst wieder morgen hier; schönen tag wünsche ich - und hoffetlich klappt es

Jürgen

Hallo Alpha63,
wenn du auch noch erklären könntest, was dein Beispieil heißt.
Statt Left() und Right() kannst du auch Mid() verwenden.
Statt CDate direkt aufzurufen, prüfe erst deine Daten mit IsDate().
Wenn du trotz der Konvertierungsfehler in deinem Makro, die Ausführung fortseten willst verwende „On Error Resume Next“
Falls du die Fehler verarbeiten möchtest verwende „On Error Goto xxx“ xxx- Label(Sprungmarke), Mache dann die Fehlerbehandlung und springe mit „Resume Next“ zur Nächsten Anweisung.

Das Alles sind allgemeine Vorgehensweisen, denn die Frage, die du gestellt hast, hast du auch selbs beantwortet.

PS:
eine if funktion kenne ich auch nicht :smile:

Using If…Then…Else Statements
You can use the If…Then…Else statement to run a specific statement or a block of statements, depending on the value of a condition. If…Then…Else statements can be nested to as many levels as you need. However, for readability, you may want to use a Select Case statement rather than multiple levels of nested If…Then…Else statements.

Hallo, ich kenne Deine VB/VBA-Programmierkenntnisse nicht, eine relativ einfache Änderung wäre:
VA_Datum = VbNullstring ’ vorlöschen
VA_Datum = CDate(…,10)
If VA_Datum = VbNullstring then
VA_Datum = CDate(…,9)
If VA_Datum = VbNullstring then
VA_Datum = CDate(…,8)
End If
End If
Mir gefällt die Lösung überhaupt nicht, ich würde nach einer Zelle mit dem Format Datum suchen.
Viel Erfolg
Rainer

ich weis nicht wohin ich public schreiben soll.

ich denke mal sie meinen Public Sub Verarbeitung()

das funktioniert leider nicht. ich will das er nur in der tabelle 1 sucht und nicht in tabelle 2 geschweigeden in tabelle 3

ich habe es hinbekommen zwegs modul.

trotzdem vielen dank

ich habe es hinbekommen zwegs modul.

trotzdem vielen dank

Auch noch mal Danke, es hat Spaß gemacht. Ich hoffe es funktioniert jetzt alles!

Bin morgen wieder am Rechner um zu programmieren. Wenn noch Fragen sind einfach melden.

Grüße

Jürgen

ich habe ein makro geschrieben was meine arbeits mappe bearbeitet.
dazu gehört auch das er andere dateien aus dem gleichem ordner öffnen muss um dort die gewünschen infos herraus zu bekommen.

jetzt ist es aber so das ich einen direkten pfad genommen habe. was schlecht ist, da jeder zeit der ordner ja verschoben werden kann.

hier mal mein code der geändert werden soll.

ChDir „U:\VA_Test“
Workbooks.open Filename:=„U:\VA_Test\index.htm“

die index.htm liegt aber im gleichem ordner. es muss doch einen befehl geben der sagt das die geforderte datei im gleichem ordner liegt

Grüezi Alpha

Ich habe in meiner Tabelle zellen die mit datum und zeit
beschriben sind. mein makro soll diese 2 sachen suchen, finden
und in die tabelle2 reinschreiben. dies bekomme ich auch hin.
Dies bekomme ich hin das er nach einer bestimmten länge sucht
und wo der text steht (beispiel kommt gleich) mit einer
bestimmten länge von zeichen.

Datum (D) = 10 zeichen = 11.11.2009
Zeit (Z) = 8 Zeichen = 08:36:00
Der „:“ wird mit gezählt deswegen ( und 10 Zeichen

Beispiel:

aa11 bb22 cc33
Da1Z bb22 Dc1Z
aa11 Db2Z cc33

Diese Beispiele passe leider überhaupt nicht zu deinen Angaben von oben; das sind keine Datums- und Zeitangaben. Wie sehen denn die Inhalt deiner Zellen *exakt* aus?

Hier mein code für das datum:

VA_Datum =
CDate(Left(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile,
S_VA_Datum), 10))

Das sind die ersten 10…

für zeit:

VA_Zeit =
CDate(Right(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile,
S_VA_Zeit), 8))

…und dies die letzen 8 Zeichen einer Zelle.

Stehen denn Datum und Zeit in derselben Zelle oder wie schaut das genau aus?

Wenn alles in der gleichen Zelle steht, und als Zeit oder Datum (nicht als Text) drin steht, dann könntest Du deine Informationen wie folgt errechnen:

VA_Datum = CDate(Int(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Datum)))

VA_Zeit = CDate((Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile, S_VA_Zeit))) - VA_Datum

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo alpha, das müßte gehen:
Public Sub DateiPfad()
Dim strPfad As String
strPfad = ThisWorkbook.Path
MsgBox strPfad
End Sub
Grüße aus Nürnberg

Jürgen

ich bin nur wirklich nicht sicher, was du willst, aber:

dim test as string
test = Left(Workbooks(AKT_Mappe).Worksheets(AKT_Blatt).Cells(Zeile,

S_VA_Datum), 10)

if mid(test,3,1) = „.“ then
’ Tag hat 2 Ziffer
else
’ Tag hat 1 Ziffer
end if

mfg
pete

Hallo Alpha63!
Bitte um Entschuldigung für die späte Antwort - die Herbstferien kamen dazwischen!
Ist es nicht möglich, dass du über die Len-Funktion die Länge des jeweiligen Zelleninhalts ermitteltst und dann in deiner Ursprungstabelle alle Zellen zunächst auf das gleiche Datumsformat bringst?
Hab leider im augenblick keine andere Idee, da ich deine Tabelle nicht kenne.
Viel Erfolg!
Andrea