[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ブック内のすべてのシートの書式を整えて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
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
【標準モジュール】でシートの指定を省略した場合、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
(もこな2 )さん
結果を重視してしまっていて基礎ができていない箇所が多分にありますので、学習していきたいと思います。また、ブレークポイントの有効的な活用方法を知れて助かりました。
(γ)さん
折角教えていただいたのに、私の理解が不足していたのが原因で申し訳ございませんでした。
今回は大変勉強になりました。色々と学んできてから出直してきたいと思います。
今後も機会がありましたらどうぞよろしくお願いします。
(マレーグマ) 2022/03/25(金) 17:13
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.