アプリ版:「スタンプのみでお礼する」機能のリリースについて

PDFを作成するマクロを作りたいため,以下のコードを作ろうとすると,「コンパイルエラー 修正候補 式」「「コンパイルエラー 修正候補 識別子」といったメッセージが出て,下の4行(TypeからIgnore・・まで)が赤字になってしまいます。
なお,FileNameの「l」は,「Dim l As String」「l = Worksheets("成績").Range("A4").Value」と変数で定義しています。

Worksheets("成績").Select
ActiveWindow.SelectedSheets.ExportAsFixedFormat_
Type:=xlTypePDF,
FileName:=l,
OpenAfterPublish:=True,
IgnorePrintAreas:=False

どのように修正したら良いのか,ご教示願います。

よろしくお願い申し上げます。

A 回答 (10件)

No.4,5,6,7です。



>しかし,ファイル名が連続して変わるコードに既になっていると思います。

なにか勘違いがあると思います。

>A5セルには数式が入っているため,順番に代わります

For~Nextの外で変えても意味がありません。

>fileName:=iにすると意図するファイル名とは違いますが(数字です),順番にPDFが作成・保存されます。

まさしく、このようにForの後にファイル名変更コードを書かないと意味がない訳です。
    • good
    • 0

シンクライアント環境だと、システム管理者でないと実態を把握できません。


Cドライブ自体が仮想化されている可能性もあります。

試してみてよいなら、No.5で回答したように

C:\User\user\DeskTop\ファイル名.pdf

というようにファイル名の前に自分のDeskTopのフルパスを付けたファイル名にすれば、自分のデスクトップな保存されるはずです。

あくまでも「はずです」であり、シンクライアント環境はシステム管理者でないと本当のところは判りません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
もう一度、パスが表示されないか確認してみます。

お礼日時:2023/02/09 11:36

No.4,5,6,7,8です。



ファイル名は

l = Worksheets("成績").Range("A5").Value

で指定しているわけですから、For~Nextの外です。
J~kが変わってもlが変わることはありません。

どうしても納得いかないなら、

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=l, OpenAfterPublish:=False, IgnorePrintAreas:=False

の直前に

Debug.Print "l=", l

を入れて実行してみてください。
実行後VBEエディタを開いて、CTRL+Gを押し、「イミディエイトウィンドウ」を開いて確認してみてください。
lの値が全て同じになっていると思います。
    • good
    • 0
この回答へのお礼

いろいろとありがとうございます。
おっしゃるとおり修正したらうまく動きました。

一点,伺いたいのですが,今のコードだと,使用しているシンクライアント端末のドライブにPDFが作成され保存されます。デスクトップに保存されるようにするにはどのようにすれば良いか教えていただけると幸いです。

お礼日時:2023/02/08 19:52

No.4,5,6です。



VBAのコードを見るとPDF出力する「成績」シートはFor~Nextの間で何ら変更されていないように見受けられます。

この状態で、For~Nextで複数回PDFを作成する意図がわかりません。

No.6でファイル名を連続して変更するコードを入れると書きましたが、それをしても、ファイル名の違う中身の同じPDFが複数できあがるだけです。

どういう目的なのでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。先ほどのお礼でも書かせていただきましたが,変数iがjからkの間で変わる度に「成績」シートは書き換わっていきます。成績シートは,ほとんど全部,数式で値を入れています。

お礼日時:2023/02/08 18:42

見落としていました。


OpenAfterPublish:=True
を指定しているので、1枚目を作成した時点で、ドキュメントが開いている状態になっています。
従って、2枚目以降が作成されないのは当たり前でした。
OpenAfterPublish:=false
にすれば、エラーは出なくなりますが、PDFが上書きされてしまうので、
For以下かつ
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=l, OpenAfterPublish:=False, IgnorePrintAreas:=False
の前にファイル名を連続して変更するコードを追加する必要があると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
しかし,ファイル名が連続して変わるコードに既になっていると思います。
変数iがjからkの間で変わる間に,A5セルには数式が入っているため,順番に代わります。また,falseにしても,最初の1枚しか作成・保存されません。

わかった点としては,「ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=l, OpenAfterPublish:=True, IgnorePrintAreas:=False」の部分で,fileName:=lをfileName:=iにすると意図するファイル名とは違いますが(数字です),順番にPDFが作成・保存されます。
fileName:=lだと,A5セルに入力してある数式が返した値をファイル名にすることになりますが,1枚しかPDFは作成されず,実行時エラー1004で止まってしまいます。

何がいけないんでしょうか。。

お礼日時:2023/02/08 18:37

No.4です。



ご質問者の掲示されたコードを、こちらで実行してみたところ、何の問題もなくPDFが出力されます。

もしかしたら、指定したフォルダがない(サブフォルダの場合、別の親フォルダの下に作成していた)とか、フォルダはあるが書き込み権限のないフォルダに書き込みしようしているとか、ファイル名に問題があるとか、パスの区切りに「/」を使用しているとかの問題かもしれません。

変数「l」にファイル名を入れているとのことですが、フルパスでのファイル名を、例えばシート名「成績」のA5セルに、以下のように入力して、検証しやすいものにしてみたらどうなるのでしょう?

C:\User\user\DeskTop\出力ファイル.pdf

※小文字のuserの部分はご自分のユーザー名

上記のようにしたらどうなるか試してみてください。

また、以下のURLも参考になると思います。
https://teratail.com/questions/124283
https://kiraku-space.com/?p=1493
https://oshiete.goo.ne.jp/qa/10033009.html
    • good
    • 0
この回答へのお礼

ありがとうございます。
使用しているPCがシンクライアント端末というのが関係しているのかもしれませんが,デスクトップのパスが回答者様が書かれたような形式ではないのかもしれません。

順次,PDFを印刷していくマクロですが,最初のものしか作成されず,2枚目の作成中に「実行時エラー1004 ドキュメントを保存できませんでした。ドキュメントが開いているか,保存時にエラーが発生した可能性があります。」とエラーメッセージが出て止まってしまいます。

回答者様は,最初のデータだけではなく,変数j,kで指定した範囲のデータがすべてPDFとして出力されますか?

どこがいけないのか,不明です。

お礼日時:2023/02/08 18:07

PDFを作成するマクロといっているだけで、どのように作成したいのかについて説明がありません。


仮に画面上で選択している複数のシートを一つのPDFファイルとして出力したいということなら、以下のように対象シートを配列にいれてから選択してください。
また、コードの中の
ActiveWindow.SelectedSheets.をActiveSheet.に修正してください。
さらに、投稿された内容では正確に判断できませんが、
ExportAsFixedFormatとType:=の間には半角スペースが必要です。
従って、

Dim I As String
............................................

Dim targetsheet1 As String
Dim targetsheet2 As String

targetsheet1 = "Sheet1"
targetsheet2 = "Sheet2"
Sheets(Array(targetsheet1, targetsheet2)).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=I, OpenAfterPublish:=True, IgnorePrintAreas:=False

上記のようなコードになると思います。
    • good
    • 0
この回答へのお礼

丁寧に説明していただき,誠にありがとうございます。
しかし,そのように修正すると,「実行時エラー1004 ドキュメントを保存できませんでした。ドキュメントが開いているか,保存時にエラーが発生した可能性があります。」とエラーメッセージが出てしまいます。(デバック時は,ActiveSheet.ExportAsFixedFormat~の部分が黄色くなっています)

なお,コードは以下のものです。順番にPDFを作成したいと思っています。
どのように修正したらよいか,ご教示いただけると幸いです。

Dim i As Long
Dim j, k As Long
Dim l As String

j = Worksheets("作業").Range("AC100").Value
k = Worksheets("作業").Range("AC101").Value
l = Worksheets("成績").Range("A5").Value

For i = j To k
Worksheets("作業").Range("Z500").Value = Worksheets("元").Cells(i + 1, 1).Offset(, 5).Value
Worksheets("成績").Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:=l, OpenAfterPublish:=True, IgnorePrintAreas:=False
Next i

お礼日時:2023/02/08 15:46

, → _

    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2023/02/08 15:22

SelectedSheetsにはExportAsFixedFormatは存在しません


何がしたいのか分かりませんがActiveWindow.SelectedSheetsを
見直してください
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2023/02/08 15:47

こんばんは



内容は確認していませんけれど・・

>(TypeからIgnore・・まで)が赤字になってしまいます。
1行のセンテンスを改行を入れて記述しているので、連続するという「 _」を各行末に記す必要があります。

ActiveWindow.SelectedSheets.ExportAsFixedFormat _
Type:=xlTypePDF, _
fileName:=L, _
OpenAfterPublish:=True, _
IgnorePrintAreas:=False
    • good
    • 0
この回答へのお礼

ありがとうございます。確かにネットで検索したときは,そのようになっていました。

お礼日時:2023/02/08 15:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A