[[20100311174616]] 『IF文を使っての保存』(うさぎさん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『IF文を使っての保存』(うさぎさん)

 こちらで下記のような、コードをご教授いただいたのですが、
DTPath = WSH.SpecialFolders("Desktop") などをしようして、デスクトップのパスを
 取得して、もしデスクトップ上に作業フォルダというフォルダがある場合、その中へ保存し、そうでない場合は作業フォルダを作成して保存という感じにはできませんでしょうか? 

 _________
 Sub SaveWS() 
    Dim savePath As String 
    savePath = ThisWorkbook.Path & "\作業フォルダ\" & ActiveSheet.Name & "(" & ActiveSheet.Range("E5").Value & ")" & ".xls" 

    If Dir(ThisWorkbook.Path & "\作業フォルダ") = "" Then   
     MkDir ThisWorkbook.Path & "\作業フォルダ" 
 End If 

    ActiveSheet.Copy 
    ActiveWorkbook.SaveAs savePath 
    ActiveWorkbook.Close 
    MsgBox savePath & vbNewLine & "を保存しました。" 
 End Sub 
  
[[20100310162811]] 『エクセルマクロ 名前を付けて保存について』(うさぎさん)
 _________
よろしくお願いします。

 savePath ・・・・の前に

 DTPath = CreateObject("Wscript.Shell").SpecialFolders("Desktop")

 として、上のコードのThisWorkbook.Pathの部分をDTPathにすれば出来ると思います。
 (momo)

momo様

 教えていただいたとおり、下記のように書き換えましたが、「コンパイルエラー 変数が定義されておりません」と出てしまいます。
 対処法がおわかりになりましたら、よろしくお願いします。(うさぎさん)

___________

 Sub SaveWS() 

    Dim savePath As String
    DTPath = CreateObject("Wscript.Shell").SpecialFolders("Desktop")
    savePath = DTPath & "\作業フォルダ\" & ActiveSheet.Name & "(" & ActiveSheet.Range("E5").Value & ")" & ".xls"

    If Dir(DTPath & "\作業フォルダ") = "" Then   
     MkDir DTPath & "\作業フォルダ"
 End If

    ActiveSheet.Copy
    ActiveWorkbook.SaveAs savePath
    ActiveWorkbook.Close
    MsgBox savePath & vbNewLine & "を保存しました。"
 End Sub

__________


 その名のとおりのエラーですので変数を定義してあげればよいです。
 宣言されていない変数はDTPathですので
 Dim DTPath As String
 を追加してみてください。
 (momo)

momo様

 ありがとうございます。新規にフォルダを作って(デスクトップ上に作業フォルダがない場合)、保存する場合はちゃんと動くのですが、
 すでに、作業フォルダをが作成してある場合、(最初で質問させていただきました、もしデスクトップ上に作業フォルダというフォルダがある場合、
 その中へ保存し、そうでない場合は作業フォルダを作成して保存したい)
 は、実行時エラー75 パス名が無効となってしまいます。

 なにか対処法がございましたら、なにとぞよろしくお願いします(うさぎさん)

 F8キーでステップ実行すると原因がわかると思います。

 作業フォルダがあってもなくても
 >If Dir(DTPath & "\作業フォルダ") = "" Then
 この判定を通過してしまいませんか?
 「\作業フォルダ」となっているので「作業フォルダ」というファイルを探しているため
 当然無いので通過してフォルダを作ろうとしてしまいます。

 If Dir(DTPath & "\作業フォルダ\") = "" Then
                ~~~
 のように「\作業フォルダ\」と最後に¥をつけてフォルダ名をチェックするのだという事を
 Excel君に教えてあげれば希望どおりになると思いますよ。
 (momo)

momo様

 ありがとうございました。希望通りの動きができました。

 同じ名前のファイルがある場合、置き換えますか?というポップアップがでると思うのですが、
 その時に「いいえ」を選択すると、実行時エラー1004 saveAZメソッドが失敗しましたworkbookオブジェクトとでるのですが、同じブックがあり置き換えますか?でいいえを選択したら、
 なにもエラーがでないようにはできませんでしょうか?

 いいえと押すと互換モードという同じファイルのエクセルが立ち上がってしまうのですが、これはなんでしょうか?(T0T)
 何度も申し訳ありませんがおわかりになりましたらぜひよろしくお願いします(うさぎさん)

 Dir関数の使い方を知ってらっしゃるようですので、
 同じように事前にチェックして判定させてみてはどうでしょうか?

 Sub SaveWS()

 Dim savePath As String
 Dim DTPath   As String
 DTPath = CreateObject("Wscript.Shell").SpecialFolders("Desktop")
 savePath = DTPath & "\作業フォルダ\" & ActiveSheet.Name & "(" & ActiveSheet.Range("E5").Value & ")" & ".xls"

 If Dir(DTPath & "\作業フォルダ\") = "" Then
     MkDir DTPath & "\作業フォルダ"
 End If

 If Dir(savePath) <> "" Then
     If MsgBox("同じファイル名が存在します。上書き保存しますか?", vbYesNo + vbExclamation) = vbNo Then
         MsgBox "保存を中止しました。"
         Exit Sub
     End If
 End If
 ActiveSheet.Copy
 ActiveWorkbook.SaveAs savePath
 ActiveWorkbook.Close
 MsgBox savePath & vbNewLine & "を保存しました。"

 End Sub

 (momo)

momo様

 どうもありがとうございます。しっかり動きました。
 1点、ご相談なのですが、同じファイル名が存在します。上書き保存しますか?とでてきて、「はい」
 を選択したら以前出てきた、置き換えますか?のポップアップが出て再度「はい」とクリックしなければならないのですが、
 これをなんとかすっきりと、する方法はございませんでしょうか?よろしくお願いします(うさぎさん)

 >ActiveSheet.Copy
 >ActiveWorkbook.SaveAs savePath
 >ActiveWorkbook.Close
 >MsgBox savePath & vbNewLine & "を保存しました。"

 の部分を

 Application.DisplayAlerts = False '★追加
 ActiveSheet.Copy
 ActiveWorkbook.SaveAs savePath
 ActiveWorkbook.Close
 Application.DisplayAlerts = True '★追加
 MsgBox savePath & vbNewLine & "を保存しました。"

 にしてください。
 (momo)

momo様

 感動です。やっとできましたー。お世話になりました。どうもありがとうございました^0^(うさぎさん)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.