[[20141210151906]] 『動いていたマクロが動かなくなった』(矢嶋) ページの最後に飛ぶ

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

 

『動いていたマクロが動かなくなった』(矢嶋)

Mac OSX 10.9.5 Excel2011

先日まで動いていたマクロが急に動かなくなってしまいました。特に関連するアプリをアップデートなどはしていないのですが...。アンインストール、各更新プログラムを順番にアップデート、別名で保存で新しいファイルとして読み込み、、、など色々試したのですがお手上げ状態で困り果てています。何か原因はわかりますでしょうか?

shhet1のセルC1の値をファイル名にしてPDFを指定のフォルダ(デスクトップ)に書き出すマクロで、以前こちらの掲示板で教えて頂いたマクロです。

分かる方いらっしゃいましたらご教授お願い致します。

―――

Sub 見積書をPDFでデスクトップに保存()

'Ron de Bruin, 1-June-2012
FN = Range(“sheet!C1")

    Dim TempPDFFolder As String
    Dim PDFfolder As String
    Dim PDFfileName As String

    'Path to folder where we save the pdf's temporary. The code will create
    'the folder named "PDFTempFolder" in your Documents folder for you
    'Note: this will not be used when you create a pdf of one sheet but not remove this line
    TempPDFFolder = "Users:hogehoge:Desktop:"

    'Folder where you want to save the PDF file, Documents folder in this example
    PDFfolder = "Users:hogehoge:Desktop:" & FN

    'Enter the file name that you want to use for the PDF, do not add the extension.
    'なぜか効かない↓
    PDFfileName = "korekana" & Format(Now, "dd-mmm-yy h-mm-ss")

    Application.ScreenUpdating = False

    'You can also use this for the activesheet : ActiveSheet.Copy
    Worksheets("見積書").Copy

    'Do not change the macro call below, you see that we only have one macro call
    'if we create a PDF of one sheet because we not have a problem with the bug that
    'create a pdf of each worksheet in the workbook because there is only one sheet.
    Call MakePDF(TempPDFFolder, PDFfolder, PDFfileName, True)

    'Close temporary file
    ActiveWorkbook.Close SaveChanges:=False

    Application.ScreenUpdating = True
End Sub
 '*********Functions used by the macros to create pdf files and create mails with the the pdf attached, do not change them**********

Function MakePDF(TempPDFLocation As String, YourPDFfolder As String, YourPDFName As String, Finish As Boolean)
'Ron de Bruin, Version 2, 13-March-2012
'Function to create a PDF of the ActiveWorkbook in Excel 2011
'Note: The code will not work correct if not all sheets are the same type
'For example it will not work if there is one chart sheet in the workbook
'If the sheets not all use landscape or portrait it is also not working correct

    Dim I As Long
    Dim SheetName As String
    Dim scriptToRun As String
    Dim ScriptToMakeDir As String

    If ActiveWorkbook.Sheets.Count > 1 Then
        'Script to create the Temporary PDF folder if it not exist
        ScriptToMakeDir = "tell application " & Chr(34) & _
                          "Finder" & Chr(34) & Chr(13)
        ScriptToMakeDir = ScriptToMakeDir & _
                          "do shell script ""mkdir -p "" & quoted form of posix path of " & _
                          Chr(34) & TempPDFLocation & Chr(34) & Chr(13)
        ScriptToMakeDir = ScriptToMakeDir & "end tell"

        On Error Resume Next
        MacScript (ScriptToMakeDir)
        On Error GoTo 0
    Else
        TempPDFLocation = YourPDFfolder
    End If

    'look for the first sheet name in the workbook
    'We need this name so we can remove it from the file name
    For I = 1 To ActiveWorkbook.Sheets.Count
        If Sheets(I).Visible = True Then
            SheetName = Sheets(I).Name
            Exit For
        End If
    Next I

    'Save the workbook as PDF, remove the sheet name from the file name(bug) and
    'move the PDF to YourPDFfolder if the workbook have more then one worksheet.
    scriptToRun = scriptToRun & "tell application " & Chr(34) & _
                  "Microsoft Excel" & Chr(34) & Chr(13)
    scriptToRun = scriptToRun & "save active workbook in (" & _
                  Chr(34) & TempPDFLocation & ".pdf" & _
                  Chr(34) & ") as PDF file format" & Chr(13)
    scriptToRun = scriptToRun & "end tell" & Chr(13)

    If Finish = True Then
        scriptToRun = scriptToRun & "tell application " & Chr(34) & _
                      "Finder" & Chr(34) & Chr(13)
        scriptToRun = scriptToRun & "set name of file " & Chr(34) & _
                      TempPDFLocation & SheetName & ".pdf" & Chr(34) & _
                    " to " & Chr(34) & YourPDFName & ".pdf" & Chr(34) & Chr(13)

        If ActiveWorkbook.Sheets.Count > 1 Then
            scriptToRun = scriptToRun & "move " & Chr(34) & TempPDFLocation _
                        & YourPDFName & ".pdf" & Chr(34) & " to " & Chr(34) & YourPDFfolder & Chr(34) & Chr(13)
        End If
        scriptToRun = scriptToRun & "end tell" & Chr(13)
    End If

    On Error Resume Next
    MacScript (scriptToRun)
    On Error GoTo 0
End Function

< 使用 アプリ:Excel2011、使用 OS:MacOSX >


ロジックの先頭にブレークポイントを設定しておき、そこで停止した後、F8キー(Macも同じですか?)でステップ実行し、どの行まで動くのかを確認してください。

また、どんなエラーメッセージが表示されるかを書いてください。それとも、全然動かないのですか? 現象の説明は正確にお願いします。

ちなみに、Macではファイル名やフォルダ名に、濁点の入った文字を使うと文字化けして、正しく動かなくなるようですが、心当たりはありませんか?
(???) 2014/12/10(水) 15:36


???さん ありがとうございます。

ステップ実行していくと、以下の箇所でなぜか新しいウィンドウで見積書がブックとして開きます。sheet1はそのままの状態です。
sheet1と見積書は同じブックに収まっているので、本来はせいぜいシート移動くらいの動作かと思いますが、以前動いていた時もたまにこの症状が出ていました。
以前症状が出ていたのは、プリントアウトするマクロの次に間髪入れずにPDF保存マクロを押した時によくなっていました。
この症状は
Call MakePDF(TempPDFFolder, PDFfolder, PDFfileName, True)

次にそのウィンドウを保存してくれれば良いのですが、そのままステップ実行していくと、そのまま最後までいって見積書のウィンドウは閉じてマクロ自体が最後までいきました。

エラーメッセージは何も出ていません。
現在問題のマクロを押すと、ウィンドウがチラッとひかり?ます。何か実行している感がある挙動です。これは動いていた時からありましたが、やや挙動のちらっと光る感じが短いようです。以前はそれでちゃんとPDFが保存されていましたが、今はチラッとひかるだけでエラーメッセージも何も起こりません。

ファイル名、フォルダ名に関しては本当に何も変更していないので、心当たりはありません。
今までは以下の様にファイル名を付けていました。
201412100003_氏名様/御中 領収証.pdf

よろしくおねがいします。

(矢嶋) 2014/12/10(水) 19:26


ファイル名の作り方に変化があったのではないかと推測しますね。

If Finish = True Thenの前後と、If ActiveWorkbook.Sheets.Count > 1 Then の前後で、
scriptToRun という変数にセットされた文字列を確認してみてください。
一度セットした内容を上書き更新し、別なファイル名に変えている点が気になります。
(シート数が1つか複数かでスクリプト文字列が全然別物になりますが、間違えてシート追加した、とかは?)
(???) 2014/12/11(木) 09:42


Windows Update の影響はどうでしょうか?
(uparrow) 2014/12/11(木) 11:59

???さん すみません、マクロやapplescriptについては、知識がなくさっぱり読めないのです。。
コピペしてなんとか作成しました。
シートの追加はしていません。

ブックの構成としましては、sheet1(データ入力用。他のシートに反映させる)、見積書、納品書、請求書、領収証です。
昨日プリントアウトするマクロと、手動でPDFを保存、という作業を交互に行っていたところ、何度か繰り返したら途中からプリントアウトするマクロが動かなくなりました。エクセルが落ちたりはしていないのにです。ブックを再度開くとその症状は治りました。ちなみにそのプリントアウトするマクロは以下のものです。

もしかするとMac OS X側(applescript)側の問題でしょうか。

Sub 請求書()
Sheets("請求書").PrintOut
End Sub

uparrowさん ありがとうございます。
Parallelsでwin7を入れていたので、全て更新してみましたが、マクロの挙動は特に変わりませんでした。
なおエクセルはMac Excel 2011のみ使用しており、win版は使用していません。。

(矢嶋) 2014/12/11(木) 15:39


C1セルにファイル名、との事ですが、ソースを見るとフォルダ名が入りそうです。
で、そのフォルダがデスクトップに存在しないせいで、出力できていないとかないですかね?

C1セルと同じ名前のフォルダを、予めデスクトップに作成しておくとどうなりますか?

スクリプトに渡す文字列と、フォルダの実体を見比べれば、問題点が判りそう…。
最後の On Error をコメントアウトしてみる、とかも、試してみてください。
(???) 2014/12/11(木) 17:13


???さん ・そのフォルダがデスクトップに存在しないせいで、出力できていないとかないですかね?
・C1セルと同じ名前のフォルダを、予めデスクトップに作成しておくとどうなりますか?
どちらも試してみましたが駄目でした。

他のPC(Mac OSX 10.7.5)、Excel2011で試してみたところ普通に動きました。。

(矢嶋) 2014/12/11(木) 20:37


On Error を止めても、特にエラー停止するわけでもないならば、MacScriptの問題では無さそうですね。

他のPCでは動くということは、あとは環境の違いを調べてもらうしか…。MacScriptのバージョンとか。
ほかには、例えばユーザー名に日本語を使っていて、それを先日変えた、とかありませんか?
(???) 2014/12/12(金) 08:48


???さん ユーザー名も変えてはいないです。
ディスクユーティリティやウィルススキャンなど思いつく限り試してみましたが、やはり駄目みたいです。とりあえずエクセルではなくMac側が悪そうですね。
長々とありがとうございました。今回の事は諦めます。
(矢嶋) 2014/12/12(金) 14:55

コメント返信:

[ 一覧(最新更新順) ]


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