[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA コピー参照先が変わってしまう』(あんこう)
<作業用>シートの表1〜3を<印刷用>にコピー・ペーストをしたいのですが、ステップインと実際とで挙動が異なってしまいます。
会社のデスクトップPCで作成したものをノートPC(会社のよりは低スペック)で編集しようとしたところ下記の状態になりました。
どちらもWin10 Excel 2013です。スペックの問題でしょうか。ご教示ください。
・ステップインでは正常にペーストされるが実際に動かすと最後の表3が<印刷用>シートで範囲指定がされてしまい別の値がペーストされる。
表3は<作業用>シートのA46:O49にあるが実際動かすと<印刷用>シートのA46:O49がペーストされる。
・コピーの順番を変えて表3・表2・表1の順に指示すると最後の表1で1004「アプリケーション定義またはオブジェクト定義のエラーです。」が出る。
・下記のコードだとステップインでは上手くいく。
・Rangeの前にシート指定を入れると1004「アプリケーション定義またはオブジェクト定義のエラーです。」が出る。
・会社のデスクトップPCではエラーなしで上手くいくが自宅ノートPCでは上記の状態になる。
Sub Print_Setting()
Dim endR, endC As Integer
Application.ScreenUpdating = False
endR = Range("A200").End(xlUp).Row endC = Range("AX2").End(xlToLeft).Column
Set Prt = Worksheets("印刷用") Prt.Range("A1:AJ200").Delete Shift:=xlUp
Range(Cells(2, 1), Cells(endR, endC)).copy '表1 Worksheets("印刷用").Range("A5").PasteSpecial Paste:=xlPasteAll Range(Cells(endR + 6, 1), Cells(endR + 6, endC)).copy '表2 Worksheets("印刷用").Range("A1").PasteSpecial Paste:=xlPasteAll Range(Cells(endR + 2, 1), Cells(endR + 4, endC)).copy '表3 Worksheets("印刷用").Range("A2").PasteSpecial Paste:=xlPasteAll Application.CutCopyMode = False
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
>Rangeの前にシート指定を入れると1004「アプリケーション定義またはオブジェクト定義のエラーです。」が出る。
こういうエラー内容なのか忘れたけど Range には、シートが解るけど、中の Cells 達には、どんなシートか解りませ〜ん。状態では (BJ) 2019/07/18(木) 01:46
(1)
Dim endR, endC As Integer ↑だと↓という意味になってます。(「endR」がVariant型として解釈されている) Dim endR As Variant, endC As Integer
(2)
Application.ScreenUpdating = False ↑意味が分かって入れているなら止めませんが、検証作業の邪魔になるから 試行錯誤している段階ではコメントアウトを推奨します。
また、少なくとも、どこかで↓にしたほうがよくないですか? Application.ScreenUpdating = True
(3)
変数「prt」が定義されていません。
(4)
〜.Copy 〜.PasteSpecial Paste:=xlPasteAll この場合、1行で(Copyメソッドのみで)記述することも可能です。
(5)
標準モジュールに記述している場合。 Range("〜") ↓ ActiveSheet.Range("〜") と解釈されますが、問題はないのでしょうか?
(6)
endR、endR いずれも、なんで中途半端なところから上(左)に見ていくんです? 一番端っこからみるとまずいのですか? endR + 6 なんでやってるので実は、最終行じゃなくて表の開始行?を 求めていたりするのでしょうか?
(7)
とりあえず上記を踏まえて整理してみました。 Sub test() Dim endR As Variant, endC As Integer Dim prt As Worksheet: Set prt = Worksheets("印刷用")
With ActiveSheet
endR = .Range("A200").End(xlUp).Row endC = .Range("AX2").End(xlToLeft).Column
'削除 prt.Range("A1:AJ200").Delete Shift:=xlUp
'表1をコピペ .Range(.Cells(2, 1), .Cells(endR, endC)).Copy prt.Range("A5")
'表2をコピペ .Range(.Cells(endR + 6, 1), .Cells(endR + 6, endC)).Copy prt.Range("A1")
'表3をコピペ .Range(.Cells(endR + 2, 1), .Cells(endR + 4, endC)).Copy prt.Range("A2") End With
End Sub
(もこな2) 2019/07/18(木) 02:33
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.