[[20220325112232]] 『ブック内のすべてのシートの書式を整えてPDF化』(マレーグマ) ページの最後に飛ぶ

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

 

『ブック内のすべてのシートの書式を整えてPDF化』(マレーグマ)

ブック内のすべてのシートで5行目から値が入っているものをK列の削除とB列とH列を昇順で並び替えて、pdfにシートごとに保存するようにするため、以下のようにコードを記載したのですが、r = ThisWorkbook.Worksheets.Cells(Rows.Count, 1).End(xlUp).Row
のCellsの箇所でメソッドまたはデータメンバがありませんとエラーがでてしまいます。VBA初心者で初歩的な質問で恐縮ですが、、どのように修正したら良いかご教授いただましたら幸いです。よろしくお願いします。

Sub sample()

    Dim objSheet As Worksheet
    Dim r As Long

    '全シートループ
    For Each objSheet In ThisWorkbook.Worksheets

    r = ThisWorkbook.Worksheets.Cells(Rows.Count, 1).End(xlUp).Row

    Sht.Columns(11).Delete 'K列削除
    Rows(r).Clear '最終行に記載されている文字を削除

    'B5=キー1、H5=キー2
    Call Range("B5:J" & r).Sort( _
        Key1:=Range("B5"), Order1:=xlAscending, _
        Key2:=Range("H5"), Order2:=xlAscending)

        objSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ActiveWorkbook.Path & "\" & objSheet.Name & ".pdf"

    Next

End Sub

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


 参考にしてください。
 Sub sample()
     Dim ws As Worksheet
     Dim r As Long

     For Each ws In ThisWorkbook.Worksheets
         r = ws.Cells(Rows.Count, 1).End(xlUp).Row
         ws.Columns(11).Delete    'K列削除
         ws.Rows(r).Clear         '最終行に記載されている文字を削除
         'B5=キー1、H5=キー2
         ws.Range("B5:J" & r).Sort _
             Key1:=ws.Range("B5"), Order1:=xlAscending, _
             Key2:=ws.Range("H5"), Order2:=xlAscending

         ws.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=ActiveWorkbook.Path & "\" & ws.Name & ".pdf"
     Next
 End Sub

(γ) 2022/03/25(金) 12:14


(γ)さん

早速ありがとうございます。オブジェクトを指定していなかったため、エラーになっていたことが分かりました!初歩的なミスでご迷惑をお掛けしました。また機会がありましたらよろしくお願いします。
(マレーグマ) 2022/03/25(金) 13:42


もう一つ新たな問題があったのですが、以下のように少し微調整したところ、行の削除やソートが開いているシートでしか実行されていないようです。フォルダをみるとpdfファイルはシートごとに作成されているので、すべてのシートでVBAは実行されているようなのですが、原因が分かりません。教えていただけないでしょうか。

Sub sample()

     Dim ws As Worksheet
     Dim r As Long
     For Each ws In ThisWorkbook.Worksheets
         r = ws.Cells(Rows.Count, 2).End(xlUp).Row

        Rows(r).Delete
        Rows(r - 1).Delete

         ws.Columns(11).Delete    'K列削除

         'B5=キー1、H5=キー2
         ws.Range("B6:J" & r - 2).Sort _
             Key1:=ws.Range("B5"), Order1:=xlAscending
        ws.Range("B6:J" & r - 2).Sort _
             Key1:=ws.Range("G5"), Order1:=xlAscending

         ws.ExportAsFixedFormat Type:=xlTypePDF, _
            Filename:=ActiveWorkbook.Path & "\" & ws.Name & ".pdf"

     Next
 End Sub
(マレーグマ) 2022/03/25(金) 14:30

学習してみましょう。
https://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200_070.html
(tkit) 2022/03/25(金) 15:25

>行の削除やソートが開いているシートでしか実行されていないようです。
原因はご自身で言及しているように「オブジェクトを指定していなかったため」ですよ。

【標準モジュール】でシートの指定を省略した場合、ActiveSheetを指定したと見なされるため、こうなってます。

    Sub sample()
         Dim ws As Worksheet
         Dim r As Long
         For Each ws In ThisWorkbook.Worksheets
             r = ws.Cells(ActiveSheet.Rows.Count, 2).End(xlUp).Row
            ActiveSheet.Rows(r).Delete      '★ココ
            ActiveSheet.Rows(r - 1).Delete  '★ココ

            ws.Columns(11).Delete    'K列削除

            ws.Range("B6:J" & r - 2).Sort Key1:=ws.Range("B5"), Order1:=xlAscending
            ws.Range("B6:J" & r - 2).Sort Key1:=ws.Range("G5"), Order1:=xlAscending

            ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ActiveWorkbook.Path & "\" & ws.Name & ".pdf"
         Next
     End Sub

>すべてのシートでVBAは実行されているようなのですが
結果だけみて推測するんじゃなく、【ステップ実行】してちゃんと検証されることをオススメします。

ついでに。

 こんな感じにすればいいんじゃないでしょうか?

    Sub 修正案()
         Dim ws As Worksheet
         Dim r As Long

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

         For Each ws In ThisWorkbook.Worksheets
            With ws
                r = .Cells(.Rows.Count, "B").End(xlUp).Row

                .Rows(r - 1 & ":" & r).Delete
                .Range("K:K").Delete

                .Range("B5:J" & r - 2).Sort _
                    Key1:=ws.Range("B5"), Order1:=xlAscending, _
                    Key2:=ws.Range("H5"), Order2:=xlAscending

                .ExportAsFixedFormat Type:=xlTypePDF, Filename:=ActiveWorkbook.Path & "\" & .Name
            End With
         Next
     End Sub

(もこな2 ) 2022/03/25(金) 15:42


そうか、殆ど通じていなかったのですね。言葉を端折るといけないな。

(γ) 2022/03/25(金) 16:54


(tkit)さん
学習サイトのご紹介ありがとうございます。まさに私の理解が不足している点が紹介されておりました。
基礎から身につけるために是非活用させていただきます。

(もこな2 )さん
結果を重視してしまっていて基礎ができていない箇所が多分にありますので、学習していきたいと思います。また、ブレークポイントの有効的な活用方法を知れて助かりました。

(γ)さん
折角教えていただいたのに、私の理解が不足していたのが原因で申し訳ございませんでした。

今回は大変勉強になりました。色々と学んできてから出直してきたいと思います。
今後も機会がありましたらどうぞよろしくお願いします。
(マレーグマ) 2022/03/25(金) 17:13


コメント返信:

[ 一覧(最新更新順) ]


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