[[20180705131537]] 『cad VBAでExcelの操作』(ka) ページの最後に飛ぶ

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

 

『cad VBAでExcelの操作』(ka)

いつもお世話になっております。

CADで取得したデータ(配列に保存済み)を開いている既存のエクセルファイルに貼り付けるコードを作成したいのですが、
Rangeプロパティを用いた貼付け時に「実行時エラー'1004''selection'メソッドは失敗しました:'−Grobal'オブジェクト」と出ます。

ローカルウィンドウで見ているとExcelApp、objExcelWorkbook、objExcelSheetのオブジェクト変数にはそれぞれ値?が入っており、原因がよくわかりません。
エラーの原因はなんでしょうか。  

すみませんがご回答よろしくお願い致します。
 
以下コードです。(不要な部分は除いています)  
 
  
  
Dim ExcelApp As Excel.Application
Dim objExcelWorkbook As Excel.Workbook
Dim objExcelSheet As Excel.Worksheet
  
 
 Set ExcelApp = GetObject(, "Excel.Application")
  
 Set objExcelWorkbook = ExcelApp.Workbooks("ファイル名")
  
 Set objExcelSheet = objExcelWorkbook.Worksheets("シート名")
  

         With objExcelSheet
       
              .Activate
             
              .Range("B12", Cells(変数1 + 11, 7)) = 配列1
              .Range("L12", Cells(変数2 + 11, 17)) = 配列2
                    
         End With
 
 
  

(参考)閉じている既存ファイルへの書き込みは以下のコードで動作しました。
 
 Set ExcelApp = CreateObject("Excel.Application")
 
 ExcelApp.Visible = True
 
 Set objExcelWorkbook = ExcelApp.Workbooks.Open(パス名)
 
 Set objExcelSheet = objExcelWorkbook.Worksheets("シート名")
 

         With objExcelSheet
       
              .Activate
               
              .Range("B12", Cells(変数1 + 11, 7)) = 配列1
              .Range("L12", Cells(変数2 + 11, 17)) = 配列2
            
         End With
 

< 使用 Excel:Excel2003、使用 OS:Windows7 >


【追記】

エラーはシートがアクティブになっていないことが原因のような気がするのですが、
以下を入れてもうまくいきませんでした。

VBA.AppActivate Excel.Application.Caption
objExcelWorkbook.Activate
(ka) 2018/07/05(木) 14:54


原因であるかわかりませんが、少なくとも↓のように直した方がいいんじゃないでしょうか

         With objExcelSheet

              .Activate

              .Range(.Range("B12"), .Cells(変数1 + 11, 7)) = 配列1
              .Range(.Range("L12"), .Cells(変数2 + 11, 17)) = 配列2
         End With

(もこな2) 2018/07/05(木) 15:04


Excelは、外部オブジェクトとして操作される側のようですね。

シートをActivateしているようですが、マクロの自動記録でもあるまいし、いちいちアクティブにしなくて良いですよ。無駄です。
逆に、以下のコードで、Rangeにはドットを付けて、親シートの子である事を明示していますが、Cellsには付いていないので、親が不明です。 Cellsにもドットを付けてみてください。

 >             .Range("B12", Cells(変数1 + 11, 7)) = 配列1
 >             .Range("L12", Cells(変数2 + 11, 17)) = 配列2
(???) 2018/07/05(木) 15:08

もこな2様
???様

うまくいきました!!
すっかり見落としていたので大変助かりました。
アドバイスありがとうございました!
(ka) 2018/07/05(木) 15:21


コメント返信:

[ 一覧(最新更新順) ]


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