質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

613閲覧

プロシージャ中のワークシート再指定が出来ない。

ice930

総合スコア99

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/01/22 13:01

ワークシート名 sename(変数)の指定の範囲に罫線(格子と外周太字)を設定したいのですが、ワークシートとRangeを指定すると「ワークシート定義またはオブジェクト定義のエラーです」と表示され、この罫線を引く前に「Worksheets(sename).Activate」又は「Worksheets(sename).Select」を指定しても先頭のワークシート「インデックス」の範囲に罫線を引いてしまいます。(分かりずらかったらすいません・・・。)

同じような事が起きたことがなく困惑しています。
解決策と今後の為に原因を知りたく質問させていただきました。

以下がそのコードです。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim EROW As Long Dim Row As Long Dim col As Long Dim log As String Dim Run As Integer EROW = Cells(Rows.Count, 2).End(xlUp).Row Row = Target.Row col = Target.Column If Row <= EROW And Row > 5 And col = 2 And Cells(Row, 2).Interior.ColorIndex = 34 Then If Cells(Row, 5) = "" Then MsgBox "記録日が記載されていません。" Exit Sub End If Run = MsgBox("この書籍を書籍一覧へ移動しますか?", vbYesNo + vbQuestion, "確認") If Run = vbYes Then Dim WB As String Dim path As String Dim cate As String Dim rowcate As Long Dim colcate As Long Dim Bcate As Long Dim Bname As String Dim sename As String Dim zyaname As String Dim tgtsheet As String Dim PRow As Long path = ThisWorkbook.path WB = ThisWorkbook.name cate = Cells(Row, 2) tgtsheet = Cells(Row, 4) i = 1 Do While Cells(i, 9) <> "規  則" i = i + 1 Loop rowcate = i - 1 colcate = Cells(6, Columns.Count).End(xlToLeft).Column Bcate = Range(Cells(9, 9), Cells(rowcate, colcate)).Find(cate).Column zyaname = Cells(6, Bcate) sename = "書籍一覧(" & zyaname & ")" Bname = "書籍記録(" & Cells(6, Bcate) & ").xlsx" Workbooks.Open path & "\" & "書籍記録" & "\" & Bname '指定のワークブックを開く Workbooks(WB).Worksheets(tgtsheet).Tab.ColorIndex = xlNone Workbooks(WB).Worksheets(tgtsheet).Move After:=Workbooks(Bname).Sheets(Worksheets.Count) '読書データのブックを移動 Workbooks(Bname).Close savechanges:=True '変更を保存して閉じる PRow = Workbooks(WB).Worksheets(sename).Cells(Rows.Count, 2).End(xlUp).Row '貼り付け先のリスト最終行 Worksheets("インデックス").Range(Cells(Row, 2), Cells(Row, 7)).Cut Destination:=Worksheets(sename).Cells(PRow + 1, 2) 'インデックスからコピペ Worksheets("インデックス").Range(Cells(Row, 2), Cells(Row, 8)).Delete shift:=xlShiftUp '切り取った部分を削除して上にシフト Range(Cells(4, 1), Cells(105, 8)).Borders.LineStyle = xlContinuous '格子作成 Range(Cells(4, 1), Cells(105, 8)).BorderAround Weight:=xlThick '周囲太枠 Worksheets(sename).Select '''''''''ここです! Worksheets(sename).Range(Cells(3, 1), Cells(102, 7)).Borders.LineStyle = xlContinuous '格子作成 Worksheets(sename).SelectRange(Cells(102, 1), Cells(102, 7)).BorderAround Weight:=xlThick '周囲太枠 Else MsgBox "移動を中止しました。" End If End If End Sub

該当箇所に「ここです!」とコメントを入れさせていただきました!
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Selectした直後を修正してみました。

VBA

1Worksheets(sename).Range(Worksheets(sename).Cells(3, 1), Worksheets(sename).Cells(102, 7)).Borders.LineStyle = xlContinuous '格子作成 2Worksheets(sename).Range(Worksheets(sename).Cells(102, 1), Worksheets(sename).Cells(102, 7)).BorderAround Weight:=xlThick '周囲太枠

投稿2021/01/23 03:02

編集2021/01/23 09:34
TanakaHiroaki

総合スコア1063

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ice930

2021/01/23 09:15

アドバイスいただいた内容で実行しましたが、「オブジェクトは、プロパティ又はメソッドをサポートしていません」とのエラーが表示されてしまいます・・・。 変数「sename」には問題なくシート名が入っていました。
TanakaHiroaki

2021/01/23 09:35

すみません。構文エラーを修正しました。
ice930

2021/01/23 10:56

ありがとうございます!正常に処理されました!! 原因はなんでしょうか? 複数のシートを編集した時は、Range内のCellsに対しても全てワークシート名を記載しなくてはならないでしょうか。
TanakaHiroaki

2021/01/23 11:01

sheetモジュールのコードは、RangeやCellsが当該sheetを意味するため、わざわざワークシートを指定する必要があります。
ice930

2021/01/23 11:05

今回のコードでの不具合すべてに納得がいきました!! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問