| 
    
     |  | 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
 
 |  |