[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『アプリケーション定義またはオブジェクト定義のエラー?』(赤とんぼ)
ダイアログで指定したブックSheet(1)A列をマクロを実行したブックのA列へ貼り付けるため、下記コードを実行しました。しかし「アプリケーション定義またはオブジェクト定義のエラー」?となりデバックすると「pWs.Columns("1").Select」で止まっています?VBAを始めたばかりでどう変更したら良いかわかりません?教えてくださいよろしくお願いします。
Sub コード列転記2()
Dim FName, i As Integer
Dim wb As Workbook, pWs As Worksheet
Set pWs = ThisWorkbook.ActiveSheet FName = Application.GetOpenFilename("Excelマクロ,*.xlsm") If FName = False Then Exit Sub Workbooks.Open (FName) Set wb = ActiveWorkbook pWs.Columns("1").Select Selection.Copy wb.ActiveSheet.Columns("1").Select ActiveSheet.Paste wb.Close End Sub
< 使用 Excel:Office365、使用 OS:Windows11 >
pWs.Columns(1).Select とするか pWs.Columns("A").Select としてください。 (hatena) 2022/09/04(日) 16:52
Sub コード列転記2() Dim FName, i As Integer Dim wb As Workbook, pWs As Worksheet Set pWs = ThisWorkbook.ActiveSheet FName = Application.GetOpenFilename("Excelマクロ,*.xlsm") If FName = False Then Exit Sub
Set wb = Workbooks.Open(FName) pWs.Columns(1).Copy wb.ActiveSheet.Columns(1) wb.Close End Sub
(hatena) 2022/09/04(日) 16:59
■1
>どう変更したら良いかわかりません?
なんか疑問形で質問するのが流行っているようですが、↓でエラーになるのは【1】という列文字の列がないからですね。
Columns("1").Select
なのでAという【文字列】を指定するか、1列目という【数値】を指定するとよいでしょう。
■2
VBAの世界では基本的にブックやシート(オブジェクトといいます)は、きちんと明示すればいちいちアクティブにしたり選択したりする必要はありません、
また、【標準モジュール】でシートの指定を省略した場合、ActiveSheetが指定したとみなされるルールです。
したがって、複数の(ブックや)シートを相手にした処理を考えるならば、対象のオブジェクトを明示するようにすることをお勧めします。
■3
Pasteメソッドを使用している部分ですが、これはこれで間違いではないのですが、直前のCopyメソッドの特徴として、引数に貼り付け先を指定するとPasteメソッドの代わりができてしまうという特徴があります。
割とよく使われるテクニックなので覚えておいて損は無いでしょう。
■4
提示のコードだと、(開いて)Activeになっているブックのアクティブシートに対して操作をすることになってますが、ブックに複数のシートがある場合、目的のシートがアクティブになっているか保証されませんが大丈夫なんですか?
仮に、ブックに1枚しかシートが無いならばその心配はありませんが、それならそれで1番目のシートと指定してしまったほうが安牌だと思います。
■5
ということを踏まえて、コードを整理してみるとこんな感じになります。
興味があればステップ実行して研究の上、必要な部分をご自身のコードに組み込んでください。
Sub 研究用() Stop 'ブレークポイントの代わり
Dim ふぁいるぱす As String Dim pWs As Worksheet Set pWs = ThisWorkbook.ActiveSheet
ふぁいるぱす = Application.GetOpenFilename("Excelマクロ,*.xlsm") If FName = False Then Exit Sub
With Workbooks.Open(FName) pWs.Columns(1).Copy .Worksheets(1).Range("A1") '.Save .Close End With End Sub
(もこな2) 2022/09/04(日) 17:10
Sub コード列転記3()
Dim FName, i As Integer Dim wb As Workbook, pWs As Worksheet Set pWs = ThisWorkbook.ActiveSheet FName = Application.GetOpenFilename("Excelマクロ,*.xlsm") If FName = False Then Exit Sub Set wb = Workbooks.Open(FName) pWs.Columns(1).Copy wb.ActiveSheet.Columns(1) wb.Close End Sub
(赤とんぼ) 2022/09/04(日) 17:42
それでもわからなければ↓をよ〜〜〜〜〜〜〜〜〜く考えてみてください
【どこを】コピーして【どこへ】貼り付けるのか
(もこな2) 2022/09/04(日) 18:12
Dim ふぁいるぱす As String
Dim pWs As Worksheet Set pWs = ThisWorkbook.ActiveSheet ふぁいるぱす = Application.GetOpenFilename("Excelマクロ,*.xlsm") If FName = False Then Exit Sub With Workbooks.Open(FName) pWs.Columns(1).Copy .Worksheets(1).Range("A1") .Save .Close End With wb.Close
(赤とんぼ) 2022/09/04(日) 19:00
(赤とんぼ) 2022/09/04(日) 19:35
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.