2.5k Aufrufe
Gefragt in Tabellenkalkulation von higge Einsteiger_in (15 Punkte)
Hallo,

ich bin Biologe und hatte mit vor einger Zeit ein kleines Excel-Makro gebastelt, dass .txt files öffnet, die Daten nach meinen Vorstellungen plottet und schließlich die Datei als .xls speichert. Klappt alles wunderbar, solange die .txt files manuell nummeriert werden. Inzwischen würden jedoch auch andere Arbeitsgruppen gerne damit arbeiten, doch haben die zum einen deutlich mehr .txt files und zudem noch weniger Ahnung von Makros als ich (sie verzweifeln augenblicklich, sobald sie den VBA-Code sehen!). Mein Wunsch wäre es daher, die Nummerierung überflüssig zu machen und das Makro dazu zu bewegen, dass es .txt files mit beliebigen Dateinamen erkennt, bearbeitet und als .xls speichert. In dem Ordner befinden sich auch noch andere Dateiformate (.avi, .tif), mit dem gleichen Dateinamen, die jedoch nicht bearbeitet werden sollen (und natürlich auch nicht können).
Ich habe mich schon in diesem und anderen Foren umgeschaut, doch leider reichen meine Kentnisse nicht mal aus, um ähnliche Codes entsprechend zu adaptieren.
Ich arbeite mit Microsoft Excel 2004 for Mac (Version 11.5).
Hier der Teil des Codes, den ich gerne verbessern würde:


Sub Motility()
'
'plots raw data and performs statistics


For i = 10 To 87
Dim strName As String
strName = "_logfile_"


Workbooks.OpenText Filename:=("users:MacBookPro:Desktop:Master course:" + CStr(i) + strName + ".txt"), _
DataType:=xlDelimited, Space:=True

'my working procedure

ActiveWorkbook.SaveAs Filename:= _
"users:MacBookPro:Desktop:Master course:" + CStr(i) + strName + ".xls", FileFormat:= _
xlExcel9795, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
False, CreateBackup:=False
ActiveWorkbook.Close


Next i
End Sub




Ich würde mich über Hilfe sehr freuen.

5 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

ich habe leider kein Mac-Excel, sodass ich den Code nicht prüfen kann, aber mit Excel funktioniert es nach diesem Prinzip:
Sub MehrereDateienOeffnen()
Dim strVerzeichnis As String
Dim strDatei As String
Dim strTyp As String
Dim strDateiname As String
strTyp = "*.txt"
Application.ScreenUpdating = False
strVerzeichnis = "C:\Test\"
strDateiname = Dir(strVerzeichnis & strTyp)
Do While strDateiname <> ""
' statt der folgenden Zeile dein Code zum Öffnen
Workbooks.Open Filename:=strVerzeichnis & strDateiname
' ab hier dein weiterer Code zum Bearbeiten, Speichern und Schließen
'..........
strDateiname = Dir
Loop
Application.ScreenUpdating = True
End Sub

Bis später,
Karin
0 Punkte
Beantwortet von higge Einsteiger_in (15 Punkte)
Hi Karin,

zunächst vielen Dank für Deine Hilfe. Deine Version sieht schon deutlich professioneller aus, als meine. Ich hab&#39; Deinen Code entsprechend eingefügt und angepasst

Workbooks.OpenText Filename:=strVerzeichnis + strDateiname, _
    DataType:=xlDelimited, Space:=True

, doch leider dann beim Starten passiert nichts...und zwar gar nichts. Ich drücke auf Start und Excel beginnt weder mit dem Öffnen irgendwelcher Dateien, noch gibt es mir  eine Fehlermeldung oder ruft den Debugger Modus auf.


Wenn ich den Text-Zusatz weglasse, a lá:

Workbooks.Open Filename:=strVerzeichnis + strDateiname, _
    DataType:=xlDelimited, Space:=True

dann wird der Debugger geöffnet und ich bekomme ein &quot;Named argument not found&quot; für DataType:=xlDelimited .

Ich habe inzwischen mehrere Kleinigkeiten probiert ( &quot;DataType:=xlDelimited, Space:=True&quot; ganz weglassen, verändern etc.), doch es tauchen jedes mal nur die beiden genannten Probleme auf. Momentan sieht es bei mir also so aus:

Dim strVerzeichnis As String
    Dim strDatei As String
    Dim strTyp As String
    Dim strDateiname As String
    strTyp = &quot;*.txt&quot;
    Application.ScreenUpdating = False
    strVerzeichnis = &quot;users:MacBookPro:test:&quot;
    strDateiname = Dir(strVerzeichnis &amp; strTyp)
    Do While strDateiname &lt;&gt; &quot;&quot;
    Workbooks.Open Filename:=strVerzeichnis + strDateiname, _
    DataType:=xlDelimited, Space:=True
. . .


Viele Grüße

Stephan
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi Stephan,

hast du den Code im Einzelschrittmodus ablaufen lassen - ist die Variable strDateiname mit dem richtigen Dateinamen belegt?

Der Mac-Code für das Öffnen der Datei sieht doch anders aus:

Workbooks.OpenText Filename:=("users:MacBookPro:Desktop:Master course:" + CStr(i) + strName + ".txt"), _
DataType:=xlDelimited, Space:=True


Vielleicht musst du hier nur anstelle von + CStr(i) + strName + ".txt" dieses schreiben: + strDateiname

Bis später,
karin
0 Punkte
Beantwortet von higge Einsteiger_in (15 Punkte)
Hi Karin,

danke für den Vorschlag, ich hab den Einzelschrittmodus benutzt und auch den MacCode entsprechend eingefügt. Es stellte sich allerdings ziemlich schnell heraus, dass der Mac-Code keine Platzhalter benutzen kann. Ich hatte seither die meiste Zeit damit verbracht dieses Wild Card Problem zu lösen, doch offenbar gibt es im gesamten Netz nur eine halbwegs passende Antwort ( http://www.mrexcel.com/forum/showthread.php?t=375514 ), die mir letztlich auch nicht viel nützt.
Lange Rede kurzer Sinn: Ich habe ab Monatg einen PC zur Verfügung, werde die ganze Geschichte dort aufziehen und dann berichten, wie es lief.

Aktueller Code im MSExcel für Mac, für den Fall, dass doch noch jemand eine Lösung findet:


Sub Motility()
' Motility Macro

Dim strVerzeichnis As String
Dim strDatei As String
Dim strDateiname As String
strVerzeichnis = "users:MacBookPro:Desktop:Master course:"
strDateiname = Dir(strVerzeichnis, MacID("TEXT"))
MsgBox ("Found file : " & strDateiname) ' Die Message Box zeigt mir weder Namen noch Verzeichnis an
Do While strDateiname <> ""

Workbooks.OpenText Filename:=(strVerzeichnis + strDateiname), _
DataType:=xlDelimited, Space:=True

' Mein Code


Viele Grüße

Stephan
0 Punkte
Beantwortet von higge Einsteiger_in (15 Punkte)
Hi Karin,

danke für den Code. In Excel für den PC habe ich nur ein paar Kleinigkeiten abändern müssen und schon lief es wie geschmiert. Vielen Dank noch einmal dafür

Aktuell und abschließend sieht der Code also nun so aus:

Sub Motility()

Dim stropeningdirectory As String
Dim strstoragedirectory As String
Dim strfile As String
Dim strTyp As String
Dim strfilename As String
Dim strName As String
strName = "_extracted"
strTyp = "*.txt"
Application.ScreenUpdating = False
stropeningdirectory = "C:\Documents and Settings\ar189x\Desktop\ToAST\ToAST analysis\ImageJ analysed\"
strstoragedirectory = "C:\Documents and Settings\ar189x\Desktop\ToAST\ToAST analysis\Excel analysed\"
strfilename = Dir(stropeningdirectory + strTyp)
Do While strfilename <> ""
'MsgBox ("Found File : " + strfilename)


Workbooks.OpenText Filename:=(stropeningdirectory + strfilename), _
DataType:=xlDelimited, Space:=True
ActiveWindow.View = xlPageBreakPreview
ActiveWindow.View = xlNormalView

'mein Code

ActiveWorkbook.SaveAs Filename:=strstoragedirectory + strfilename + ".xlsm", FileFormat:=52, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
ActiveWorkbook.Close

strfilename = Dir
Loop
Application.ScreenUpdating = True
End Sub

Vielen Dank, Du warst mir eine große Hilfe

Stephan
...