Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1888to1892
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Hilfe bei Split und Ubound bitte

Hilfe bei Split und Ubound bitte
01.07.2022 10:10:49
Johannes
Hallo zusammen,
ich suche nach einer Lösung für einen code den ich bekommen habe und laufen sollte aber ich finde auch im Internet keinen Grund warum der nicht funktioniert.
Ich schreibe einen Dateipfad in fileToOpen

Dim fileToOpen As Variant
Range("A1").Select
fileToOpen = Application.GetOpenFilename("HTML Files (*.htm), *.htm")
If fileToOpen = False Then Exit Sub
der sieht ungefähr so aus
"G:\FTP_Main_Folder\ANT\KW26_Demo_Stars\PSS_FX_Def\statement"
jetzt brauche ich den Text zwischen letzten und vorletzten "\" um den Blattnahmen zu ändern.

' Arbeitsblat benennen !
'Dim SheetName As String
'ActiveSheet.Name = Split(fileToOpen, "\")(UBound(Split(fileToOpen, "\") - 1)
ActiveSheet.Name = "New_Import_1"
VBA sagt Syntaxfehler, und da ich ziemlich neu bin in VBA bräuchte ich da dringend Hilfe bitte. Ich habe provisorisch jetzt mal "New_Import_1" eingesetzt.
Danke soweit
Johannes

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Falsche Klammern
01.07.2022 10:22:16
{Boris}
Hi,
Dein eigentliches Vorhaben verstehe ich nicht, aber den vorletzten Eintrag aus dem Split-Array erhältst Du mit folgender korrekten Klammersetzung:

Split(fileToOpen, "\")(UBound(Split(fileToOpen, "\")) - 1)
VG, Boris
AW: Super, Perfekt, passt so ! Danke
01.07.2022 10:39:52
Johannes
Hallo Boris
Super,
Perfekt, passt so.
Danke
VG, Johannes
AW: Super, Perfekt, passt so ! Danke
01.07.2022 11:06:41
Luschi
Hallo Johannes,
nur weil etwas funktioniert, muß es noch lange nicht optimal sein. In der 'Funktionalen-Programmierung' von VB.Net und C# ist sowas total verpönt, weil 2x das selbe aufgerufen wird, ohne das der 2. Aufruf vom 1. Aufruf profitiert - also doppelt-gemoppelt ohne Mehrwert.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Super, Perfekt, passt so ! Danke
01.07.2022 11:13:14
Oberschlumpf
Moin,
na, dann zeig doch bitte mal eine Lösung, die nich "doppelt-gemoppelt" ist.
nicht "erlaubt" ist etwas wie z Bsp

Dim SheetName As String, lstrSplit() As String
lstrSplit = Split(fileToOpen, "\")
ActiveSheet.Name = lstrSplit(UBound(lstrSplit) - 1)
Freu mich auf deine Antwort, denn ich lern gern dazu.
Ciao
Thorsten
Genau das meint Luschi doch...
01.07.2022 11:15:28
{Boris}
Hi Thorsten,
...denn so wie Du es zeigst, ist es eben nicht mehr "doppelt gemoppelt", da Split nur 1 mal "arbeiten" muss.
Ich war nur zu "faul", das so auszucoden ;-)
VG, Boris
AW: Genau das meint Luschi doch...
01.07.2022 11:18:47
Oberschlumpf
Hi Boris,
und ich war der, der Johannes die 2x Split()-Lösung zeigte (mit falscher Klammersetzung, da ich nicht getestet hab)
Grund: ich "sparte" mir dadurch eine zusätzliche Variable und eine zusätzliche Zeile, weil man ja mit 2xSplit() alles in eine CodeZeile "packen" kann ;-)
Aber stimmt schon, doppelt und so....genau deswegen wär ich ja an einer (anderen, als die "ausgeschlossene") Lösung interessiert - wenn das denn möglich ist.
Ciao
Thorsten
Anzeige
"Kurz" ist halt nicht immer sinnvoll...
01.07.2022 11:24:50
{Boris}
Hi Thorsten,
...da hat Luschi völlig Recht mit seiner Anmerkung. Genau dafür gibt es ja auch Variablen - und auch in der Formelwelt wurde das mit Einführung der LET-Funktion nun umgesetzt, um Redundanzen (und somit unnötige Doppelberechnungen) zu vermeiden.
VG, Boris
AW: "Kurz" ist halt nicht immer sinnvoll...
01.07.2022 11:41:58
Oberschlumpf
Hi Boris,
ok, es scheint also keine andere Lösung zu geben als die mit "Zusatz-Code".
Ich werd dann weiter 2xSplit() verwenden - es sei denn, ich stelle fest, dass die Berechnungszeit + Prozessorauslastung wirklich zu sehr in die Höhe schnellt.
Ciao
Thorsten
AW: "Kurz" ist halt nicht immer sinnvoll...
01.07.2022 12:14:36
snb
2* Split ist keine seriöse Aufgabe für ein Prozessor:
timer -t0 ist immer Null.

Sub M_snb()
t0 = Timer
c00 = Split("aaa\vvv\hhh\nnn\kkk", "\")(UBound(Split("aaa\vvv\hhh\nnn\kkk", "\"))-1)
MsgBox Timer - t0
End Sub

Anzeige
AW: "Kurz" ist halt nicht immer sinnvoll...
01.07.2022 13:17:01
Oberschlumpf
Hi,
danke für deine Demo.
Aber was meinst du bitte mit "keine seriöse Aufgabe"?
Daraus verstehe ich, dass es "nicht gut" --> "nicht seriös" ist, eine Funktion mehrmals in nur einem Befehl zu verwenden.
Oder habe ich dich falsch verstanden?
Ciao
Thorsten
AW: Translation 4 Börlinar :-)
01.07.2022 13:28:10
GerdL
2* Split ist keine ernsthafte Aufgabe für einen Prozessor.
Der timer -t0 ist immer Null.
AW: Translation 4 Börlinar :-)
01.07.2022 13:45:32
Daniel
naja, was so nicht stimmt.
Es kommt halt immer darauf an, wie oft man die Aufgabe ausführen muss.
die Variante mit der Variable ist tatsächlich doppelt so schnell die die zweifache Verwendung von Split.
allerdings ist es nochmal um den Faktor 4 schneller, den Textteil mit InstrRev zu extrahieren:
hier mal ein kleines Textszenario, einfach in ein Modul einfügen und das makro Test starten.
Ergebnisausgabe dann im Direktfenster:

Option Explicit
Const txt As String = "aaaaaaa\bbbbbbb\ccccccc\ddddddd\eeeeeee\fffffff\ggggggg\hhhhhh"
Const anz As Long = 100000
Dim T As Double
Dim i As Long
Dim Erg
Sub test()
Dim M
For Each M In Array("A", "B", "Cx")
Debug.Print M & ": ";
T = Timer
Application.Run M
Debug.Print Timer - T,
Next
Debug.Print
End Sub
Sub A()
For i = 1 To anz
Erg = Split(txt, "\")(UBound(Split(txt, "\")) - 1)
Next
End Sub
Sub B()
Dim x
For i = 1 To anz
x = Split(txt, "\")
Erg = x(UBound(x) - 1)
Next
End Sub
Sub Cx()
Dim x As String
For i = 1 To anz
x = Left(txt, InStrRev(txt, "\") - 1)
Erg = Mid(x, InStrRev(x, "\") + 1)
Next
End Sub
Gruß Daniel
Anzeige
AW: Translation 4 Börlinar :-)
01.07.2022 14:44:39
Oberschlumpf
Hi Daniel,
auch an dich danke.
Als Ergebnisse hab ich...
A: 0,265625 B: 0,12109375 Cx: 0,02734375
...erhalten
Unter Voraussetzung, dass durchzuführende Berechnungen/Umwandlungen/sonstiges wirklich sehr lange dauern könnten, würde ich natürlich auch Cx (oder vergleichbar) verwenden.
So lange aber Zeitaufwand kleiner/gleich 0, bleib ich bei A...mein PC + ich können damit leben :-)
Ciao
Thorsten
AW: Translation 4 Börlinar :-)
01.07.2022 16:33:56
Daniel
Zeit aufwand kleiner 0, zeig mal wie du das machst ;-)
dann wäre das Makro fertig, bevor du den Startbutton gedrückt hast.
ansonsten muss man sich halt immer überlegen, ob einem eine zusätzliche Variable oder ein zusätzliches Rechnen mehr Aufwand bereitet.
ich persönlich finde, dass sich die Variable lohnt, sobald das Rechenergebnis an zwei oder mehr unterschiedlichen Stellen benötigt wird.
bleibt man hier bei der Berechnung, steigt das Risiko dass man bei einer Änderung vergisst, eine Stelle zu ändern.
andererseits, wenn das Projekt größer ist und sowieso schon viele Variablen hat, geht die Übersicht verloren wenn man für jeden Kleinkram eine neue Variable erstellt.
Anzeige
AW: Translation 4 Börlinar :-)
01.07.2022 19:31:33
Oberschlumpf
hahahaha
eigtl war ich schon dabei, dir zu widersprechen....bis denn - auch ich - erkannte....dass ich kleiner/gleich EINS meinte^^ :-))
AW: Translation 4 Börlinar :-)
01.07.2022 14:37:43
Oberschlumpf
Hi Gerd,
danke.
Ja, sicher hatte ich auch "Der timer -t0 ist immer Null." gelesen.
Aber "meine Übersetzung" von "keine seriöse..." stand dazu halt im Widerspruch :-)
Nun denn, ich habs nun verstanden :-)
Ciao
Thorsten
AW: Ich halte mich da "mangels wissen raus." aber
01.07.2022 11:47:55
Johannes
Ich halte mich da mal "mangels wissen raus.".
Ich bin froh, dass es funktioniert, würde aber eine andere Version wegen des Lernfaktors gerne ausprobieren.
Danke an alle die immer wieder Newbies helfen, auch wenn die euch manchmal in Wahnsinn treiben
Johannes
Anzeige
AW: Ich halte mich da "mangels wissen raus." aber
01.07.2022 11:49:13
Oberschlumpf
eine andere Version hatte ich doch gezeigt...n paar Antworten weiter vorn
AW: Danke Schönes Wochenende
01.07.2022 14:52:07
Johannes
Super schaue ich mir am WE an, kämpfe noch mit meinem anderen Problemchen
Danke
Schönes Wochenende
Johannes

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige