[[20191003093916]] 『xlsmファイルをxlsxファイルに変換するvbsを作りax(佐藤) ページの最後に飛ぶ

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

 

『xlsmファイルをxlsxファイルに変換するvbsを作りたい』(佐藤)

表題の件、教えてください。
何点かエラーが出てきます。

?@76 パスが見つかりません
 →はい
 マクロなしで保存しますか?
 →はい
 で先に進みます。
?A元のxlsmファイルを削除したいのに出来ません

すみませんがよろしくお願いいたします。

 Option Explicit
 Dim bk, ex, f, gf, so
 Set so = CreateObject("Scripting.FileSystemObject")
 Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName))
 Set ex = CreateObject("Excel.Application")
 ex.Application.DisplayAlerts = False
 ex.Visible = False
 For Each f In gf.Files
 If LCase(so.GetExtensionName(f.Name)) = "xlsm"Then
 Set bk = ex.Workbooks.Open(gf &"\"&f.Name)
 bk.SaveAs gf &"\"&so.GetBaseName(f.Name) &".xlsx", 51
 bk.Close
 Set bk = Nothing
 End If
 Next
 ex.Quit
 Set ex = Nothing
 Set gf = Nothing
 Set so = Nothing
 MsgBox("Finished!")

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 >元のxlsmファイルを削除したいのに出来ません

 削除するコードは書かれていませんが? 
(渡辺ひかる) 2019/10/03(木) 09:50

そのコードを探しているところです
(佐藤) 2019/10/03(木) 09:52

 >そのコードを探しているところです

 そういうことであれば、そのように書いてもらえるとわかりやすいです

 >出来ません

 と書かれると、削除しようとしているのに できない と解釈します

 それはさておき

 Scripting.FileSystemObject を使用しているのであれば

 DeleteFile メソッドか

 Fileオブジェクト対して Delete メソッドを使用するかでしょう。

 ループで Fileオブジェクトを取得しているので 後者の方がベターかと思います。

(渡辺ひかる) 2019/10/03(木) 10:26


76エラーが出て進まないところが出来ない部分です

メソッドなどもわからないので探してみます
(佐藤) 2019/10/03(木) 10:56


■1
>vbsを作りたい
VBScriptの話だとすると、あんまり力にはなれなさそうですが【エクセル】の質問掲示なので、私が分かる範囲でエクセルVBAで考えてみました。

    Sub 考えてみた()
        Dim MyPath As String

        Dim FSO As Object, MyFile As Object
        Set FSO = CreateObject("Scripting.FileSystemObject")

        '▼ダイアログを表示してユーザーに処理対象のフォルダを選択させる
        With Application.FileDialog(msoFileDialogFolderPicker)
            If .Show = True Then
                MyPath = .SelectedItems(1)
            Else
                MsgBox "処理中断"
                Exit Sub
            End If
        End With

        Stop '←ブレークポイントの変わり

        '▼ループ処理で指定したフォルダのxlsmブックを開いて、"別フォルダ"に名前を付けて保存して閉じる
        For Each MyFile In FSO.GetFolder(MyPath).Files
            If ThisWorkbook.Name <> MyFile.Name And LCase(FSO.GetExtensionName(MyFile)) = "xlsm" Then
                With Workbooks.Open(MyFile.Path)
                    .SaveAs _
                      Filename:="D:\出力先\" & FSO.GetBaseName(MyFile), _
                      FileFormat:=xlWorkbookDefault
                    .Close
                End With
            End If
        Next MyFile

        '▼終了処理
        If Workbooks.Count = 1 Then
            Application.Quit
        Else
            ThisWorkbook.Close
        End If               

    End Sub

↑をこちらでテストしてみましたが、たぶん同じような感じにはなったと思いますので、VBSに拘らないという場合はエクセルVBAも検討してみては如何でしょうか。

■2
>?A元のxlsmファイルを削除したいのに出来ません
元のファイルは消さない方が良くないですか?
変換後のファイルを別フォルダにはき出すようにしておけば処理前と処理後は容易に区別出来るでしょうし、そもそもうっかり必要なソースコードが書かれているブックまで処理しちゃったら元に戻せなくなるリスクがあるとおもいます。

(もこな2 ) 2019/10/03(木) 11:41


 こちらで提示されたコードをそのままVBSファイルにして 環境を作って 動かしましたが
 エラーも出ず、マクロなしのメッセージも出ないで、正常に終了しました

 環境はデスクトップです。

 76エラーについては、

 ネットワークや深いパスの場合、瞬時に取得できないケースがありますが
 心当たりはありませんか?

 質問者さんも デスクトップなどに配置して実験されることをお勧めします

 マクロなしメッセージについては、下記のリンクでも議論されていたようです

https://answers.microsoft.com/ja-jp/msoffice/forum/all/vba/3f3b9872-aa62-4c20-85c0-23a40d9aa69f

(渡辺ひかる) 2019/10/03(木) 11:45


stopでエラーになってしまいます・・・
(佐藤) 2019/10/03(木) 12:45

 >stopでエラーになってしまいます・・・

 って そこからステップ実行(F8キー)できるように もこな2さんが わざわざ入れたもので
 エラーではありませんよ。

 もしかして 掲示されたVBSも 質問者さんが自分で書かれたコードではないのでは?
 コードの内容も理解されていないのではと推測します。

 せっかく、もこな2さんが VBAのコードを提示してくれたのですから
 ステップ実行するなりして、コードの理解に努めては?

(渡辺ひかる) 2019/10/03(木) 13:05


書き方が悪かったです。
stopの後ろがエラーになり、ファイルは開きますが、保存が出来ない状態です。
もう少し頑張ってみます
(佐藤) 2019/10/03(木) 13:15

コメント返信:

[ 一覧(最新更新順) ]


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