2016-06-30 2 views
0

Wie kann ich den folgenden VBA-Code ändern, damit es auf Win10 funktioniert? Es funktioniert gut auf Win8.1. Auf meinem Win10-Computer erstellt es Verzeichnis aber kann CSV nicht speichern.Excel-Makro in der Lage, csv auf Win8.1 zu speichern, aber gestoppt/unter Win10

Dieser Code ist ein zusätzlicher Teil, den ich selbst schreibe hinzufügen, Speichern von CSV-Funktionalität zu Data-Abruf-Code (Quelle: http://investexcel.net).

Im Folgenden finden Sie die Fehlermeldung, die ich während gesamte Makro ausgeführt erhielt (nach Application.DisplayAlerts = True machen)

'16.csdv' cannot be accessed. The file may be corrupted, located on a server that is not responding, or read-only. (Options - Retry/Cancel)

Nach dem Drücken bekam cancel diesen Fehler:

Run-time error 1004: Application defined or object defined error

Pressing Debug nimmt mich dieser Teil des Codes (gelb hervorgehoben)

ActiveSheet.SaveAs Filename:=FName, _ 
    FileFormat:=xlCSV, CreateBackup:=False 

Dies ist die gesamter Code-Körper, der CSV speichert.

Dim strName As String 
Dim strDirname, Path, strDefpath As String 
Dim FName As String 

On Error Resume Next ' If directory exist goto next line 

'Now we check if export folder exists. If not then it gets created here 


If Len(Dir("Z:\MyBackfill\Extracts\", vbDirectory)) = 0 Then 
MkDir "Z:\MyBackfill\Extracts\" 
End If 

strDirname = Format(CStr(Now), "DDMMMYY") ' New directory name 
strDefpath = "Z:\MyBackfill\Extracts\" 
MkDir strDefpath & strDirname 
Path = strDefpath & strDirname & "\" 'create total string 
dt = Format(CStr(Now), "DDMMMYY HHMMSS") 



Worksheets("Data").Activate 
Range("G8").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.NumberFormat = "dd-MM-yy HH:mm:ss" 
Columns("G:G").Select 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Columns("G:G").Select 
Application.CutCopyMode = False 


With ActiveSheet 

lLastRow = .Columns("G:G").Cells(.Rows.Count, 1).End(xlUp).Row 

ReDim arrDate(1 To lLastRow) As Long 
ReDim arrTime(1 To lLastRow) As Double 
arrDateTimes = .Range("G1:G" & lLastRow).Value 
For lRow = LBound(arrDateTimes) To UBound(arrDateTimes) 
arrDate(lRow) = Int(arrDateTimes(lRow, 1)) 
arrTime(lRow) = arrDateTimes(lRow, 1) - arrDate(lRow) 
Next 
.Range("H1:H" & lLastRow).Value = WorksheetFunction.Transpose(arrDate) 
.Range("I1:I" & lLastRow).Value = WorksheetFunction.Transpose(arrTime) 
.Range("H1:H" & lLastRow).NumberFormat = "dd-mm-yy" 
.Range("I1:I" & lLastRow).NumberFormat = "hh:mm:ss" 

End With 


' Selection.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, _ 
' TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _ 
' Semicolon:=False, Comma:=True, Space:=True, Other:=False, FieldInfo:= _ 
    ' Array(1, 2), TrailingMinusNumbers:=True 


Range("G8").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.NumberFormat = "dd-MM-yy" 
Range("H8").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.NumberFormat = "HH:mm:ss" 

Columns("H:I").Select 
Selection.Cut 
Columns("B:B").Select 
Selection.Insert Shift:=xlToRight 

Columns("Z:I").Select 
Selection.Delete Shift:=xlToLeft 

Range("B8").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.NumberFormat = "dd-MM-yy" 
Range("C8").Select 
Range(Selection, Selection.End(xlDown)).Select 
Selection.NumberFormat = "HH:mm:ss" 


Range("A8").Select 
ActiveCell.FormulaR1C1 = "=Parameters!R[5]C[1]" 
Range("A8").Select 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
Range("A8").Select 
Application.CutCopyMode = False 
'Selection.AutoFill Destination:=Range("A8:A4520") 
Selection.AutoFill Destination:=Range("A8:A" & Range("B" & Rows.Count).End(xlUp).Row) 
'Range("A8:A4520").Select 
Columns("G:G").Select 
Selection.Cut 
Columns("E:E").Select 
Selection.Insert Shift:=xlToRight 
Columns("D:D").Select 
Selection.Cut 
Columns("H:H").Select 
Selection.Insert Shift:=xlToRight 
Rows("1:7").Select 
Range("A7").Activate 
Selection.Delete Shift:=xlUp 


'ADDING 59 to Seconds for correct backfill////////////////////////////////////////// 
Dim cell As Range 
For Each cell In Range("C1", Range("C1").End(xlDown)) 
cell.Value = Left$(cell.Value, 6) & "59" 
Next 




'Filename = "GFill" & " " & DataSheet.Range("A1").Value & " " & dt & " " & "FROM" & "_" & DataSheet.Range("B1").Value & ".csv" 
Filename = "GFill" & " " & "NIFTY" & " " & dt & " " & "FROM" & "_" & DataSheet.Range("B1").Value & ".csv" 
FName = Path & Filename 


Cells.Select 
Selection.Copy 
Workbooks.Add 
ActiveSheet.Paste 
Application.CutCopyMode = False 
'ChDir "C:\Users\Vaibhav\Desktop" 
ActiveSheet.SaveAs Filename:=FName, _ 
    FileFormat:=xlCSV, CreateBackup:=False 
ActiveWorkbook.Save 
ActiveWindow.Close 
Selection.QueryTable.Delete 
Selection.ClearContents 
Range("A1").Select 
ActiveWorkbook.Save 
+0

kommt Sie erhalten Fehlermeldungen? Wenn ja, wo? –

+0

Entschuldigung, die Fehlerzeile zum Hauptfragenkörper jetzt hinzufügen. Bitte überprüfen Sie einen Moment. – Vaibhav

+0

Nun, Sie verwenden Select und Selection Methoden und die Active Objekte, so dass alles passieren kann. Wenn Sie zuverlässige Excel-VBA-Makros benötigen, verwenden Sie diese Krücken nicht mehr und verwenden stattdessen Bereichsobjekte und -methoden und Objektvariablen. – RBarryYoung

Antwort

1

Dies ist eine Art schwierig.

Die MkDir Funktion ein Drive:\Directory\Subdirectory auf einmal nicht schaffen kann - es versucht, das Unterverzeichnis in einem Verzeichnis zu erstellen, die nicht vorhanden ist, so dass Sie zuerst das Verzeichnis anlegen müssen, und dann Sie es verwenden können erstellen das Unterverzeichnis:

MkDir "Drive:\Directory" 
MkDir "Drive:\Directory\Subdirectory" 

So dies wahrscheinlich erklärt, warum Sie einen Fehler auch auf dem C-Laufwerk Ihrer Win10 Maschine zu bekommen.

In Bezug auf die Z & E-Laufwerke (unter der Annahme, dass Shares sind) würde ein ähnlicher Fehler auftreten, wenn Sie nicht berechtigt sind, auf diese Laufwerke von der Win10-Maschine zugreifen oder schreiben; das ist nicht ein Problem, das mit VBA gelöst werden kann, es sei denn, es eine einfache Laufwerkbuchstaben Zuordnungsproblem ist, in diesem Fall können Sie es wahrscheinlich lösen, indem Sie den vollständigen kanonischen Pfad bereitstellt, zum Beispiel:

MkDir "\\servername\Directory" 

Wie Sie‘ Wenn bei SaveAs immer noch ein Fehler auftritt, überprüfen Sie den Wert Fname.

Du bist in einem Date-Wert zieht aus:

DataSheet.Range("B1").Value

Und dazu gehört Schrägstrich-Zeichen, die in einem Dateinamen nicht verwendet werden können. stattdessen

Versuchen:

Format(DataSheet.Range("B1").Value, "yyyymmdd")

+0

Ich habe 2 Stück und läuft das Makro lokal auf beiden. Pc1 hat win8.1 und pc2 hat win10. Ich habe sichergestellt, dass alle Verzeichnisse bereits vorhanden sind. Wenn das Makro ausgeführt wird, wird nur das endgültige Verzeichnis erstellt. Dieses endgültige Verzeichnis wird als aktuelles Datum benannt. Außerdem erstellt das Makro den letzten Ordner mit dem Namen {aktuelles Datum}. Nur die Datei wird nicht gespeichert – Vaibhav

+0

So scheitert es jetzt nur bei 'ActiveSheet.SaveAs ...'? Was ist der Wert von 'FName'? –

+0

'strDirname = Format (CStr (Now) "DDMMMYY") 'Neues Verzeichnis name' ' strDefpath = "C: \ MyBackfill \ Auszüge \" '' MkDir strDefpath & strDirname' 'Path = strDefpath & strDirname &" \ "'Gesamtzeichenfolge erstellen' ' Dateiname = "GFill" & "" & "NIFTY" & "" & dt & "" & "VON" & "_" & DataSheet.Range ("B1"). Wert & " .csv "' 'FName = Pfad & Dateiname' – Vaibhav

0

Dank David Zemens.

Er wies mich auf sofortige Fenster zu verwenden.

Das Problem kam, weil aus irgendeinem Grund "/" im Dateinamen aufkam und das sollte nicht.

Die Variable Dateiname wurde passend bearbeitet, um das "/" zu entfernen, und die Dateien werden ordnungsgemäß generiert.

Nur um festzustellen, dass das gleiche Problem nicht in Win8.1

Verwandte Themen