[[20140716170703]] 『機能追加したい』(なーくん) ページの最後に飛ぶ

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

 

『機能追加したい』(なーくん)
[[20110225102804]]
[[20110614152804]]
 以前に、こちらで教えて頂いたマクロで一部追加したいのですが教えてください。
 今の仕様は、ファイルをコピーする時に名前をつけて保存がでてきて、マイドキュメントが指定された状態です。
 これをデスクトップに指定し直して、新しいフォルダを作り、ファイル名を入力して保存しています。
 2回目以降のコピー作業は、新しいフォルダを指定している状態なのでそのまま保存しています。

 今回追加したい事は、1回目のコピー作業をする時に、マイドキュメントではなく、デスクトップが指定された状態にしたい。
 そして、ファイル名を入力作業をなくす為に、、FoundPathから表示したいです。
 2回目以降のコピー作業は、今までと同じで新しいフォルダを指定している様にしたい。

 1.イにすると、毎回デスクトップになる。
 2.InitialFileName:=FoundPathにしても変化なし

 といった感じなので、どうかご教授願います。

 なーくん

 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
   With Target
     If (.Column = 6 Or .Column = 8) And .Count = 1 Then
       If .Value = "PDF" Or .Value = "DXF" Then
         検索 Target
       End If
     End If
   End With
 End Sub

 Sub 検索(myRng As Range)
   Dim FoundRng As Range
   With Worksheets("リスト").Columns("B")
     Set FoundRng = .Find(myRng.EntireRow.Cells(2).Value, .Cells(.Cells.Count), _
                       xlValues, xlWhole, xlByRows, xlNext, False)
   End With
   If FoundRng Is Nothing Then ' Exit Sub
     MsgBox "リストと一致しません"
   Else
     処理 myRng, FoundRng.Offset(, 1).Value
   End If
 End Sub

 Sub 処理(myRng As Range, FolderPath As String)
   Dim FindFileName     As String
   Dim FoundPath        As String
   Dim FileSaveName     As String
   Dim Ans              As Long
   FindFileName = myRng.EntireRow.Cells(2).Value & myRng.EntireRow.Cells(4).Value & "*." & myRng.Value
   FoundPath = Dir(FolderPath & FindFileName)
   If FoundPath = "" Then
     MsgBox "該当ファイルがありません。", vbExclamation
   Else
     Ans = MsgBox("ファイルが見つかりました。" & vbLf & _
                  "ファイル名 : " & FoundPath & vbLf & vbLf & _
                  "ファイルを開く" & vbTab & ": はい" & vbLf & _
                  "ファイルを保存" & vbTab & ": いいえ" & vbLf & _
                  "処理を中止する" & vbTab & ": キャンセル" & vbLf & vbLf & _
                  "を押してください。", vbYesNoCancel)
     Select Case Ans
       Case vbYes
         If myRng.Value = "PDF" Then
             ThisWorkbook.FollowHyperlink FolderPath & FoundPath
         Else
             MsgBox "このファイルは開く事は出来ません!「いいえ」の保存を実行して下さい!!"
         End If
       Case vbNo

 '現在のマクロ
         FileSaveName = Application.GetSaveAsFilename(StrReverse(Split(StrReverse(FoundPath), "\", 2)(0)), _
                            fileFilter:=myRng.Value & "ファイル, *." & myRng.Value)

 ''毎回デスクトップが表示されるが・・・イ
        FileSaveName = Application.GetSaveAsFilename(InitialFileName:=CreateObject("WScript.Shell").SpecialFolders("Desktop"), _
 '                           fileFilter:=myRng.Value & "ファイル, *." & myRng.Value)

         If FileSaveName <> "False" Then
           FileCopy FolderPath & FoundPath, FileSaveName
         End If
       Case vbCancel
         'キャンセルの場合の処理
     End Select
   End If
   End Sub

< 使用 Excel:Excel2003、使用 OS:Windows7 >


Msgboxでなく、Inputboxまたはユーザーフォームを使用すればどうでしょうか。

 こんな感じで選択肢を増やせるのではないかと思います。そういう問題ではない?

 開く、保存、処理中止
 ↓
 開く、デスクトップに保存、マイドキュメントに保存、処理中止

(マナ) 2014/07/18(金) 21:12


質問を読み直してみました。
もしかするとカレントフォルダをデスクトップにすれば解決?
  
http://www.asahi-net.or.jp/~ef2o-inue/kankyo/sub02_01.html

(マナ) 2014/07/18(金) 21:48


 (マナ)さんコメントありがとうございます。

 動きとしては、ばっちりです。
 ですが、決まったファイルだけにしたいです。
 それは可能ですか?

(なーくん) 2014/07/22(火) 11:30


 ファイルを開く際に、カレントフォルダを変更し
 必要なら、閉じる際に、マイドキュメントに戻すとか。

 Private Sub Workbook_Open()
    ChDir CreateObject("WScript.Shell").SpecialFolders("Desktop")
 End Sub

 でも

 >動きとしては、ばっちりです。

 ということならば、名前をつけて保存ダイアログの左側のショートカットバーの
 マイドキュメントやデスクトップをクリックで十分では?
 1クリックするだけで、そんなに手間でもないような気がするのですが。

(マナ) 2014/07/22(火) 22:32


 (マナ)さんコメントありがとうございます。

 >1クリックするだけで、そんなに手間でもないような気がするのですが。
 そうなんですが、毎回となると、この1クリックもなくす事できないかなぁと思うようになりまして・・・。

 教えてもらった内容を取り込んでみます。

 >2.InitialFileName:=FoundPathにしても変化なし
 について、何かいい方法ありますか?

(なーくん) 2014/07/23(水) 16:11


書き込みできない環境にいましたので、返事が遅くなりました。

 >2.InitialFileName:=FoundPathにしても変化なし

 変化なしの意味が理解できません。カレントフォルダが開かれて、
 保存ファイル名としてFoundPathを表示されるというコードですが
 そうはなりませんか。

 期待している動作と、実際の動作を具体例で説明して下さい。

(マナ) 2014/07/25(金) 20:43


 (マナ)さんコメントありがとうございます。

 >>2.InitialFileName:=FoundPathにしても変化なし

 >変化なしの意味が理解できません。カレントフォルダが開かれて、
 >保存ファイル名としてFoundPathを表示されるというコードですが
 >そうはなりませんか。

 FoundPathの内容を表示するはずなのに表示しないと言う意味です。
 なので、いったん仮にA1に文字を入力し、参照するようにしてみると参照しました。(A1=abc)
 そこでA1の内容をFoundPathの内容になるように手入力しました。(A1=qaz-A△2.PDF)
 すると、参照しなくなりました。
 A1=qaz-A△2にすると参照しました。

 1.ここで質問です。
     なぜですか?「.PDF もしくは.DXF」はどんな悪さをしているか、わかりますか?
     とりあえず、以下の様にしてFoundPathから抜き出す事ができました。
     このようなステップを踏まないとFoundPathは利用できませんか?

    Dim ファイル名 As String
    Dim 全文字数 As Long

    ファイル名 = FoundPath
    全文字数 = Len(ファイル名)

    ファイル名 = Left(ファイル名, 全文字数 - 4)

        FileSaveName = Application.GetSaveAsFilename(ファイル名, _
         FileFilter:=myRng.Value & "ファイル, *." & myRng.Value)

 なので、

        FileSaveName = Application.GetSaveAsFilename(CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\" & ファイル名, _
         FileFilter:=myRng.Value & "ファイル, *." & myRng.Value)

 にするとデスクトップを指定する所までできました。

 2.また最初に戻るのですが、毎回デスクトップになります。
     新しくフォルダを作成した場合、以降はその新しいフォルダを参照して欲しいです。
     どうすればできますか?

(なーくん) 2014/07/29(火) 10:25


理由はわかりませんが、私の環境では、拡張子を小文字で揃えれば、表示されました。

 Sub test()
    Dim ファイル名 As String
    Dim FileSaveName As String

    ファイル名 = "qaz-A△2.pdf"

    FileSaveName = Application.GetSaveAsFilename(ファイル名, _
         FileFilter:="PDF" & "ファイル, *." & "pdf")

 End Sub

(マナ) 2014/07/29(火) 20:57


 > 2.また最初に戻るのですが、毎回デスクトップになります。
 >     新しくフォルダを作成した場合、以降はその新しいフォルダを参照して欲しいです。
 >     どうすればできますか?

 InitialFileNameでパスを指定すればそのフォルダを開けますが

 1回めかどうかは、どうしたら判断できるのですか?
 新しいフォルダの名前も決まっていないのですよね?

 パスを指定しなければ、カレントフォルダが開きますので
 初回のデスクトップだけ、左側のショートカットバーの1クリック手間が増えますが
 2回め以降はは、最初から新しいフォルダで開くと思いますが。

(マナ) 2014/07/29(火) 21:24


 (マナ)さんコメントありがとうございます。

 >理由はわかりませんが、私の環境では、拡張子を小文字で揃えれば、表示されました。 
 私のほうでは、小文字に揃えても表示されません。

 >Sub test()
 >   Dim ファイル名 As String
 >   Dim FileSaveName As String

 >   ファイル名 = "qaz-A△2.pdf"

 >   FileSaveName = Application.GetSaveAsFilename(ファイル名, _
 >        FileFilter:="PDF" & "ファイル, *." & "pdf")

 >End Sub

 これは大文字、小文字どちらも表示されます。

 Sub Macro1()
     Application.DefaultFilePath = "C:\Users\ユーザー名\desktop"
 End Sub
 Sub Macro2()
     Application.DefaultFilePath = "C:\Users\ユーザー名\Documents"
 End Sub
 このマクロでカレントフォルダの切換が出来そうです。

 Macro1は

 Sub Macro3()
     Application.DefaultFilePath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
 End Sub

 で行けそうですが、Documentsに戻すのはどうすればできますか?

(なーくん) 2014/07/31(木) 09:27


 SpecialFolders は MyDocuments もサポートしています。
http://msdn.microsoft.com/ja-jp/library/cc364490.aspx
(Mook) 2014/07/31(木) 10:11

 (Mook)さんコメントありがとうございます。

 Sub Macro4()
     Application.DefaultFilePath = CreateObject("WScript.Shell").SpecialFolders("Documents")
 End Sub

 で、できなかったです。

 DocumentsをMyDocumentsにしたらできました。
(なーくん) 2014/07/31(木) 12:02

コメント返信:

[ 一覧(最新更新順) ]


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