Hallo Reinhard,
Du liest eine Datei aus. jede zeile wird nacheinander in die
Variable sLine geschrieben.
Alle 50000 zeilen passiert irgendwas weil statcnt auf 50000
steht.
Dann wird frmAppStatus.lblStat2.Caption mit irgednwas befüllt.
Caption ist ein Text=String,
sorry, da hab ich gepennt. Zur Erklärung: Das Einlesen erfolgt im Hintergrund, vorne steht eine Ausgabemaske, die anzeigt, welche Zeile der einzulesenden Datei gerade gelesen wird. Die für diese Maske benötigten Variablen sind statcnt, msgcnt, und das komplette frmAppStatus-Teil.
du benutzt aber wieder das
Pluszeichen?
Jepp, funktioniert aber hier. Der Teil des Codes ist nicht von mir und ich verstehe maximal die Hälfte davon.
Und bei der Querytable sehe ich keinen Zusammenhang mit sLine.
Mit Wuerytable meinst du
With ActiveSheet.QueryTables.Add(Connection:= \_
Filstr2$ \_
, Destination:=Range("$A$1"))
?
Und, du benutzt die, meist für Fremde unbekannt gefüllten
nachfolgenden ZEHN Variablen für nicht mal 20 Zeilen
Code (die Standards von Querytable.Add kann man ja nicht
mitzählen)
vin,sline,ilinecnt,statcnt,msgcnt,puptxt15,Str$,i,filestr$,qrystr
Da stellen sich mir zwei Fragen, braauch man soviel Variablen
Kann ich dir nicht sagen, ich versteh den Code ja selber nicht.
Wenn dein jetziges Problem darin besteht daß in einer datei in
einer zeile das Grad-zeichen steht, aber irgendwie nicht
richtig ausgelesen wird.
Eben nicht, ausgelesen wird es, aber nicht wieder hineingeschrieben.
Na gut, dann bastle eine Txt-datei mit einer zeile wo das
Grad-zeichen drinsteht.
kein Thema
Dann liefere dazu deinen Code der die dateizeile ausliest und
falsch darstellt.
Und zeige uns die Datei und den Code. dann können wir schauen
an was es liegt.
OK. Hier ist der Code (immer noch 190 Zeilen).
Sub OpenDAT()
pubFileName = "einlesen.dat"
pubwsDAT = Worksheets("DAT-File1").Name
FilStr = Worksheets("Results").Name
Dim vIn, sLine As String, iLineCnt As Long
vIn = FreeFile()
' open file
Open pubFileName For Input As vIn
' option to avoid counting records
If LOF(vIn) \> pubLenChk Then
Response = MsgBox(pubTxt19 + Chr(10) + pubTxt21, vbYesNo)
If Response = vbNo Then
Close vIn
GoTo CreateTempDATs
End If
End If
' count number of DAT records
Do While Not EOF(vIn): DoEvents
Line Input #vIn, sLine
If Len(sLine) \> 0 Then
iLineCnt = iLineCnt + 1
statcnt = statcnt + 1
If statcnt \> 49999 Then
msgcnt = msgcnt + statcnt
frmAppStatus.lblStat2.Caption = pubTxt15 + " " + Trim(Str$(Int(msgcnt)))
statcnt = 0
End If
Strx$ = Trim(sLine)
If Strx$ "" Then
i = i + 1
End If
End If
Loop
' Close DAT file
Close vIn
'
CreateTempDATs:
Call CreateTempDAT(msgcnt)
Call ImportTempDAT(msgcnt)
pubSSCnt = msgcnt
frmAppStatus.Hide
pubParmsReady = "Y"
End Sub
Sub CreateTempDAT(msgcnt)
Dim vIn, sLine As String, iLineCnt As Long
vIn = FreeFile()
msgcnt = 0
fnum = 1
statcnt = 0
iLineCnt = 0
rcnt = 0
OutOpenNeeded$ = "Y"
' the root for the input file name is used to form the file name output temporary files
' need to identify where the ".DAT" is located in the string and insert output segment number
FilStr$ = pubFileName
If Len(pubFileName) \> 4 Then
If Mid$(pubFileName, Len(pubFileName) - 3, 1) = "." Then
FilStr$ = Mid$(pubFileName, 1, Len(pubFileName) - 4)
End If
End If
' open input file
Open pubFileName For Input As vIn
' get DAT records from input
Do While Not EOF(vIn): DoEvents
Line Input #vIn, sLine
If Len(sLine) \> 0 Then
iLineCnt = iLineCnt + 1
If Trim(sLine) "" Then
statcnt = statcnt + 1
rcnt = rcnt + 1
End If
' check if open output file needed
If OutOpenNeeded$ = "Y" Then
vOutNum = FreeFile()
Open FilStr$ + "\_X" + Trim(Str$(Int(fnum))) + ".DAT" For Output As #vOutNum
OutOpenNeeded$ = "N"
End If
' write output line
Print #vOutNum, sLine
End If
Loop
' Final status and close temporary output file
If OutOpenNeeded$ = "N" Then
msgcnt = msgcnt + rcnt
frmAppStatus.lblStat2.Caption = pubTxt15 + " " + Trim(Str$(Int(msgcnt)))
Close #vOutNum
End If
' Close input file
Close vIn
msgcnt = fnum
DoEvents
End Sub
Sub ImportTempDAT(msgcnt)
fnum = 1
' one loop for each spreadsheet into which data is to be imported
Do Until fnum \> msgcnt
' determine name for next sheet into which data is to be imported
' this name already exists in pubwsDAT for first sheet
FilStr$ = pubwsDAT
If fnum \> 1 Then
Mid$(FilStr$, Len(FilStr$), 1) = Trim(Str$(Int(fnum)))
frmAppStatus.lblStat1.Caption = pubTxt18
frmAppStatus.lblStat2.Caption = FilStr$
DoEvents
End If
' If receiver spreadsheet does not exist, create it
Call CheckwsDATAvailability(FilStr$)
' Select worksheet to receive the import
Worksheets(FilStr$).Activate
Worksheets(FilStr$).Select
' FilStr2 holds the text string identifying the file to be imported
' Example: if original file is DGDATA.DAT then temp files are DGDATA1.DAT, DGDATA2.DAT, etc
Filstr2$ = Mid$(pubFileName, 1, Len(pubFileName) - 4) + "\_X" + Trim(Str$(Int(fnum))) + ".DAT"
Filstr2$ = "TEXT;" + Filstr2$
QryStr$ = FilStr$ + "\_1"
With ActiveSheet.QueryTables.Add(Connection:= \_
Filstr2$ \_
, Destination:=Range("$A$1"))
.Name = QryStr$
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 65001
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
' increment to get next temporary file
fnum = fnum + 1
Loop
End Sub
Sub CheckwsDATAvailability(FilStr$)
On Error GoTo CreateDATReceiver
Worksheets(FilStr$).Activate
Worksheets(FilStr$).Select
Exit Sub
CreateDATReceiver:
' insert the Results receiver worksheet and name to parm
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = FilStr$
End Sub
Damit das Ding läuft, brauchst du ein Arbeitsblatt, das DAT-File1 heißt. Auf den Dateihochlade-Seiten im INternet kann man immer nur Bilder hochladen, deswegen kommt die dat-Datei per mail.
Ralph, hoffnungsvoll