|
INAさん度々ありがとうございます。
まずは、エラーの分析をしてみました。
まずは、下記のコードは、
変数myPathが、GetMyDocumentsPath & "\CD\CDのCSV"までのフォルダ名で、
GetMyDocumentsPathが、「C:\Documents and Settings\ID\My Documents」
までのパスを取ってくるらしい変数で、コードは難しくて理解できなかったのですが、別SubでPublic Functionから持ってきているものです。
そして、CSVに変換をして、保存をするようにしているのですが、一回の作業(EXCELで保存せずに、一回の作業でCSVに変換した場合)は、うまくいくのですが、例えば、EXCELを一回別のフォルダに保存して、そこから、このマクロの入っているEXCELを起動させて動かすと、パスが違ってエラーがでてしまうと表示されます。
なので、保存する際に「myPathと、ファイル名」だけで保存したいのですが、ファイル名にパスがついてくるために、myPath+ファイルのパスでダブってしまうために、「-56」で減らしてから、保存するようにしていたのですが・・・・結局は、それじゃ対応策にならなくなってしまい・・・・・
わかりにくい文章でしたが、どうしていいかわからないので、本当に困っているので、解決法を教えて頂けないでしょうか?
Sub PerfectSave()
Dim Cmax As Integer, Rmax As Long, CC As Integer, RR As Long
Dim Cfile As String, DC As String
Dim ws As Worksheet
Set ws = ActiveSheet '現在表示中のシートが対象
Dim myFileName As String
Dim myPath As String
myPath = GetMyDocumentsPath & "\CD\CDのCSV"
DC = Chr(34) '"
'NewFile
On Error Resume Next
With ws.Parent
'保存されたブックの時はブックと同じフォルダに
Cfile = .FullName
Cfile = Right(Cfile, Len(Cfile) - 56)
Cfile = myPath & Left(Cfile, Len(Cfile$) - 3) & "csv"
End With
Debug.Print Cfile
If Err.Number = 5 Then
MsgBox "CSVを読み込んでから実行してください"
Exit Sub ' ←もしくは End
End If
On Error GoTo 0
'出力範囲
Application.EnableEvents = False
ActiveSheet.Unprotect
Rows(1).Delete
With Selection.CurrentRegion
Cmax = .Cells(.Count).Column
Rmax = .Cells(.Count).Row
End With
With ws
Open Cfile For Output As #2
For RR = 1 To Rmax
For CC = 1 To Cmax
If CC > 1 Then Print #2, ",";
'数字は”でくくらない場合などはここで分岐
Print #2, Chr(34) & .Cells(RR, CC).Value & Chr(34);
Next
Print #2, "" '改行
Next
Close #2
Application.DisplayAlerts = False
Application.Quit
Application.DisplayAlerts = True
End With
Set ws = Nothing
End Sub
|
|