Anzeige
Archiv - Navigation
1164to1168
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

Wie geht das einfacher, Schleife doppelt

Wie geht das einfacher, Schleife doppelt
Holger
Hallo,
ich habe zwei Variablen für Dateinamen.
Ich prüfe nun ab ob es diese schon gibt, wenn ja, werden diese gelöscht.
Da ich zwei Variablen habe, muss ich das zweimal machen.
Oft bin ich mit diesem Problem konfrontiert, dass ich unnötig oft
CodeWiederholungen habe.
Kann man das nicht besser machen? Da es String Variablen sind,
weiß ich nicht wie ich es besser machen kann, sonst hätte
ich an ein array gedacht. Ihr seht, ich bin gerade an dem Punkt
des gefährlichej ViertelWissens angelangt.
strDateiname sieht so aus (immer der komplette Pfad): C:\juhu\juhu.xls
Sub kompliziert
If Dir(strDateiname1)  "" Then
Kill strDateiname1
End If
If Dir(strDateiname2)  "" Then
Kill strDateiname2
End If
End Sub

ARRAY ist schon mal nicht schlecht
25.06.2010 09:51:34
NoNet
Hallo Holger,
wenn Deine Dateinamen in einzelnen Variablen gespeichert sind, bleibt dir nichts anderes übrig, als die von Dir gepostete Methode zu verwenden.
Sinnvoller (bei vielen Dateinamen) wäre es jedoch (da bestätigt sich Dein Verdacht), dafür eine ARRAY-Variable zu verwenden. Hier ein Beispiel (4 Dateinamen im Array) :
Sub Jektiv()
Dim strDateien, lngT As Long
strDateien = Array("juhu.xls", "oweh.xls", "naja.xls", "aha.xls")
Const strpfad = "C:\Juhu\" 'Pfad bitte mit "\" am Ende eingeben !
For lngT = LBound(strDateien) To UBound(strDateien)
If Dir(strpfad & strDateiname(lngT))  "" Then _
Kill strpfad & strDateiname(lngT)
Next
End Sub
Ich hoffe, dein Wissen ist nun von ¼ auf angestiegen ;-)
Gruß, NoNet
gegen 6:4 n. 11m-Schießen
Anzeige
AW: ARRAY ist schon mal nicht schlecht
25.06.2010 10:20:28
Holger
Hi NoNet,
hm, das list sich super. Aber ich kapiere das hier nicht:
strDateiname(lngT))
strDateiName wird doch nirgendwo deklariert, also was ist das und wozu das lngT?
Mein Problem ist noch folgendes:
Ich brauche beide Dateinamen noch in einem anderen Modul, da ich die Dateinamen als Public deklariert habe, um sie in dem anderen Modul als Parameter an eine Funktion zu übergeben, die einen
csv Export durchführt. Dafür brauche ich den Dateinamen plus vollen Pfad damit
der Befehl Open Dateiname as #1 funktioniert.
AW: ARRAY ist schon mal nicht schlecht
25.06.2010 10:31:47
Holger
Nochmal Hallo,
bei mir funktioniert es auc nicht, weil srDateiname nicht deklariert ist.
Wenn ich einfach Dim strDateiname definiere, erscheint die Meldung Typen unverträglich?
Anzeige
@NoNet Danke, hab was
25.06.2010 10:40:23
Holger
He,
habe deinen Code jetzt kapiert.
Ist ja echt cool. So, hier ist meine Lösung und alles in einem.
Sub SUPI
strDateinameData = "1_ "
strDateinameInStore = "2_ "
For lngT = LBound(strDateien) To UBound(strDateien)
strDateien(lngT) = strDateien(lngT) & strDate & ".csv"
strDateien(lngT) = strPfad & strDateien(lngT)
If Dir(strDateien(lngT))  "" Then
Kill strDateien(lngT)
End If
Next lngT
End Sub

Ja, genau: strDateien() anstatt strDateinamen()_oT
25.06.2010 10:47:00
NoNet
_oT = "ohne Text"
Halt, eine Sache noch
25.06.2010 10:54:31
Holger
Ne NoNet,
bitte hilf nochmal kurz.
Alles funktioniert soweit, doch würde ich in der Schleife gerne strDateiNameData und strDateiNameInstore
mit dem aktuellesten Wert aus strDateien upaten. Geht das?
Denn in der Schleife baue ich strDateien ja so zusammen wie ich die Variablen später benötige.
Sonst habe ich ja keine Ersparnis. Verstehst du mein Problem?
Anzeige
Ich kapiere Deine Frag nicht so ganz...:-( _oT
25.06.2010 11:00:36
NoNet
_oT = "ohne Text"
Schau
25.06.2010 11:10:18
Holger
Hallo NoNet (das ne vorhin sollte ein he sein),
habe meinen Code angepasst, vielleicht verstehst du, was ich brauche.
Es funktioniert jetzt, aber wie immer so kompliziert:
Sub NEu
For lngT = LBound(strDateien) To UBound(strDateien)
strDateien(lngT) = strDateien(lngT) & strDate & ".csv"
strDateien(lngT) = strPfad & strDateien(lngT)
If Dir(strDateien(lngT))  "" Then
Kill strDateien(lngT)
End If
If InStr(1, strDateien(lngT), "Features") > 0 Then
strDateinameData = strDateien(lngT)
Else
strDateinameInStore = strDateien(lngT)
End If
Next lngT
End Sub

Anzeige
Halt, eine Sache noch
25.06.2010 10:59:52
Holger
Ne NoNet,
bitte hilf nochmal kurz.
Alles funktioniert soweit, doch würde ich in der Schleife gerne strDateiNameData und strDateiNameInstore
mit dem aktuellesten Wert aus strDateien upaten. Geht das?
Denn in der Schleife baue ich strDateien ja so zusammen wie ich die Variablen später benötige.
Sonst habe ich ja keine Ersparnis. Verstehst du mein Problem?
AW: Wie geht das einfacher, Schleife doppelt
25.06.2010 10:33:11
Christian
Hallo,
du kannst ja auch Strings in einen Array packen.
Hier ein Bsp mit MsgBox. Kill ist immer gleich so endgültig und eignet sich wenig zum üben...
Option Explicit
Sub TestIt()
Dim strTest(1) as String
Dim i as long
strTest(0) = "erster String"
strTest(1) = "zweiter String"
For i = 0 to UBound(strTest)
MsgBox strTest(i)
Next
End Sub
Gruß
Christian
Anzeige
AW: Wie geht das einfacher, Schleife doppelt
25.06.2010 14:38:04
dan
Hallo Holger,
oder man koennte eine Klasse bilden, die das alles macht.
Gruss dan, cz.
Ein simples Beispiel:
' -------------------------------------------------------------
' Standart Module Code
' -------------------------------------------------------------
Option Explicit
' datei manager deklarieren
Private dateiNamen As DateiNamenManager
Public Sub Main()
On Error GoTo FinallyMain
' instance bilden
Set dateiNamen = New DateiNamenManager
' datei namem zugeben
dateiNamen.AddDateiName ("C:\juhu\juhu.xls")
dateiNamen.AddDateiName ("C:\juhu\juhu2.xls")
dateiNamen.AddDateiName ("C:\juhu\juhu3.xls")
Dim i As Variant
i = dateiNamen.DateiName(1)
i = dateiNamen.DateiName(2)
i = dateiNamen.DateiName(3)
i = dateiNamen.DateiName(4) ' error here
' dann alle datei namen pruefen lassen
dateiNamen.Pruefen
FinallyMain:
If (Err.Number  0) Then MsgBox Err.Description, vbCritical
' instance auf Nothing
Set dateiNamen = Nothing
End Sub
' -------------------------------------------------------------
' Class Module Code, Name DateiNamenManager
' -------------------------------------------------------------
Private dateiNamen As Collection
Private Sub Class_Initialize()
Set dateiNamen = New Collection
End Sub
Public Property Get DateiName(index As Integer) As String
If (index >= 1 And index DateiName = dateiNamen.Item(index)
Else
Err.Raise vbObjectError + 1000, "DateiNamenManager.DateiName", "Index out of range"
End If
End Property
Public Sub AddDateiName(ByVal newDateiName As String)
dateiNamen.Add Item:=newDateiName, Key:="DateiName_" & dateiNamen.Count
End Sub

Public Sub Pruefen()
Dim dateiNamenItem As Variant
For Each dateiNamenItem In dateiNamen
If Dir(dateiNamenItem)  "" Then
Kill dateiNamenItem
End If
Next dateiNamenItem
End Sub

Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige