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 
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
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