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

EXCELマクロに関して初心者です。
***
Dim lp1 As Long, lp2 As Long

'ファイルが選択されているときは
'選択したファイルをWorkbooks.Openメソッドで開きます
Filename = myFileName
If IsArray(myFileName) Then

For Each myGetFileName In myFileName
Workbooks.Open myGetFileName
UpdateLinks = 0
IgnoreReadOnlyRecommended = Ture
Application.ScreenUpdating = False
Set Workbook = ActiveWorkbook
For i = 1 To Sheets.Count
If Sheets(i).Name = "様式-1" Then Sheets(i).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False

Next
****
”様式-1"というシートをPDFで保存繰り返しマクロです。”様式-1”をブック名でPDFに保存繰り返します。Filename:= _ "", ......部分はファイル名と思いますが、
質問です:他のシートも同じ作業させる必要がありますので、Filename:= _ "", この部分改良して
保存されるファイル名を ”ファイル名_様式-1” のようにブック名+シート名を取得して保存することができないでしょうか?
教えてください、宜しくお願いします。

A 回答 (5件)

>エラーになってわからなかったです。



根本はこれだね。多分、vbaはエラーをひとつずつ潰していく
作業なしには成立しません。

エラーがどこで起きているのか、原因は何なのか
それを訊かなきゃ理解なんてできません。

まずエラーでメッセージは表示されるのかされないのか
デバッグに入れるのか入れないのか
ステップ実行の仕方は理解しているか
そこからです。
    • good
    • 0

現在のブックの名前は myGetFileName であり、ActiveWorkbook.Name であり、「Set Workbook = 」の Workbook.Name でとれる。


シート名は Sheets(i).Name がそのまんま。

ブックの拡張子よりも左側を抜き出し、あとは文字列を連結するだけ。(PDF の拡張子は勝手につけてくれる)
Dim pdfFilename = Left(myGetFileName, InStr(myGetFileName, ".") -1) & "_" & Sheets(i).Name
Sheets(i).ExportAsFixedFormat Filename:= pdfFilename ・・・

ただコード全体を見るとすこーし直したくなる。
Workbook という名前はワークブックを表す型で使われているから変数名を "Workbook" としているのはやめておいた方が良い。
それと、Workbooks.Open はブックを開くと同時に、開いたブックを Workbook オブジェクトとして返してくれるから、
Dim 変数 As Workbook
Set 変数 = Workbooks.Open(・・・)
の方が良い。

ブック内のシートをグルグル回すのも For Each が使える。
使わなくてもいいけど、コード入力中のインテリセンスが利用できるので開発が楽。


For Each myGetFileName in myFileName
 Dim currentBook As Workbook
 Set currentBook = Workbooks.Open(myGetFileName・・・)
 ・・・
 
 Dim currentSheet As Worksheet
 For Each currentSheet in currentBook.Worksheets
  If currentSheet.Name = ・・・ Then
   Dim pdfFilename As String
   pdfFilename = Left(currentBook.Name, InStr(currentBook.Name, ".") -1) & "_" & currentSheet.Name
   currentSheet.ExportAsFixedFormat Filename:= pdfFilename, Type:=・・・
  End If
 Next
    • good
    • 0
この回答へのお礼

ありがとうございました。この方法では拡張子無しでできるんですね。
ベストアンサーもう一つ選ぶことができるならこの回答に選べます。
助かれました。本当にありがとうございました。

お礼日時:2018/04/16 15:50

それ以前に myFileNameの構造が理解できてないんだよね。

多分。

GetOpenFilenameの複数ファイル指定とかで
複数ファイルが選ばれる可能性を考慮したんだろうけど
多分記述からそこが理解できてないんだと思います。
一気にそんな高級な所に行っても理解できません。

とりあえずMulltiSelectはやめて単一ファイルを使いこなせてから
考えてください。
    • good
    • 0

回答スルーですか?



ファイル名を 
myGetFileName & Sheets(i).Name
としてみてはと書いているつもりですが?

vba初心者と読むか読まないかは別次元かと。
    • good
    • 0
この回答へのお礼

ありがとうございました。myGetFileName & Sheets(i).Name で解決しました。上でFilename = myFileName Sheets(i).Name = "様式-1"となっているので Filename = myFileName& "様式-1" と指定するばいいのかなと間違った考えでいました。

お礼日時:2018/04/16 15:34

>ブック名+シート名を取得して保存することができないでしょうか?


myGetFileName ブック名
Sheets(i).Name シート名じゃないの?
つなぐだけでは?

それより
If IsArray(
の処理はElseをどうするつもりなの?
気になるわ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
自分はvba初心者です。
ファイル名を myFileName&”_様式-1"としてみましたが、エラーになってわからなかったです。

お礼日時:2018/04/16 14:27

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