Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4794 / 13644 ツリー ←次へ | 前へ→

【54411】ExcelデータをWordに貼り付け MJ12 08/3/12(水) 8:27 質問[未読]
【54416】Re:ExcelデータをWordに貼り付け りん 08/3/12(水) 13:36 回答[未読]
【54432】Re:ExcelデータをWordに貼り付け MJ12 08/3/12(水) 17:47 質問[未読]
【54433】Re:ExcelデータをWordに貼り付け りん 08/3/12(水) 18:59 発言[未読]
【54434】Re:ExcelデータをWordに貼り付け MJ12 08/3/12(水) 19:12 お礼[未読]

【54411】ExcelデータをWordに貼り付け
質問  MJ12  - 08/3/12(水) 8:27 -

引用なし
パスワード
   Excel2000 から Word 2000 への貼り付けに関しては問題なく作動するのですが、Word 2003 へ貼り付けようとしたところ、エラーが発生します。
エラーは「実行時エラー '5930': オブジェクトが正しくありません。」です。
貼り付ける段階までは作動するのですが、位置及びサイズの変更で現状のコードのままでは問題が発生するようです。
どなたかお助けください。

Sub Excel→Word貼り付け()
  Dim ObjWord As Object
  Dim ObjWordDoc As Object
  Dim OpenWord As String
  OpenWord = ThisWorkbook.Path & "\文書1.doc"
  On Error Resume Next
  Set objWord = GetObject(, "Word.Application")
  If objWord Is Nothing Then Set objWord = CreateObject("Word.Application")
  On Error GoTo 0
  Set objWordDoc = objWord.Documents.Open(OpenWord)
  With objWord
    .Visible = True
    .WindowState = wdWindowStateNormal
  End With
  Workbooks("Book1.xls").Sheets("Sheet1").Range("b3:f7").Copy
  objWord.Documents(OpenWord).Activate
  With objWord.Selection
    .PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
              Placement:=wdFloatOverText, DisplayAsIcon:=False
    With .ShapeRange
      .RelativeHorizontalPosition = wdRelativeHorizontalPositionMargin 'ここでエラー
      .RelativeVerticalPosition = wdRelativeVerticalPositionMargin
      .ScaleWidth 1#, True
      .ScaleHeight 1#, True
      .Left = wdShapeCenter
      .Top = objWord.MillimetersToPoints(0)
    End With
    Application.CutCopyMode = False
  End With  
  Set objWord = Nothing
  Set objWordDoc = Nothing  
End Sub

なお、同様の質問を他のサイトで行ったのですが、解決に至らず、
こちらで再度質問しました。
マルチにあたるようでしたらご指摘ください。
park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200803/08030041.txt

【54416】Re:ExcelデータをWordに貼り付け
回答  りん E-MAIL  - 08/3/12(水) 13:36 -

引用なし
パスワード
   MJ12 さん、こんにちわ。
>Excel2000 から Word 2000 への貼り付けに関しては問題なく作動するのですが、Word 2003 へ貼り付けようとしたところ、エラーが発生します。
>エラーは「実行時エラー '5930': オブジェクトが正しくありません。」です。
>貼り付ける段階までは作動するのですが、位置及びサイズの変更で現状のコードのままでは問題が発生するようです。

参照設定で「Word」を追加してありますか?
追加していない場合は「wdPasteEnhancedMetafile」等のwdで始まる列挙型変数が全部「0」になるので正しく動作しません。

で。
それが入っていても、

>    .PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
>              Placement:=wdFloatOverText, DisplayAsIcon:=False
ここで貼りつけられた図が選択されないために、
>    With .ShapeRange
これがエラーになっています。

なので、対象の図を明確にしてあげれば正しく動作するようです。

(略)

  With ObjWord
   .Documents(OpenWord).Activate
   '
   .Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
              Placement:=wdFloatOverText, DisplayAsIcon:=False
   '図形が1個しかないとして。
   With .ActiveDocument.Shapes(1)
     .RelativeHorizontalPosition = wdRelativeHorizontalPositionMargin 'ここでエラー
     .RelativeVerticalPosition = wdRelativeVerticalPositionMargin
     .ScaleWidth 1#, True
     .ScaleHeight 1#, True
     .Left = wdShapeCenter
     .Top = ObjWord.MillimetersToPoints(0)
   End With
   Application.CutCopyMode = False
  End With

(略)

こんな感じです。

【54432】Re:ExcelデータをWordに貼り付け
質問  MJ12  - 08/3/12(水) 17:47 -

引用なし
パスワード
   ▼りん さん:
\(^o^)/
大変ありがとうございます。
希望通りの動作確認ができました。

図形が複数ある場合もあるので
.ActiveDocument.Shapes(.ActiveDocument.Shapes.Count)
とすることで対応できました。
が・・・ 少々疑問が・・・
複数の場合、Shapes(1), Shapes(2), Shapes(3), ・・・ となると思います。
Shapes(2) を削除した場合、内部的に連番が繰り下がると確認(試しにそのような状況でマクロを実行した結果です)したのですが、あっているでしょうか?
問題なければ、
.ActiveDocument.Shapes(.ActiveDocument.Shapes.Count)
で大丈夫だと思っているのですが・・・

お手数ですがアドバイス頂けないでしょうか?

【54433】Re:ExcelデータをWordに貼り付け
発言  りん E-MAIL  - 08/3/12(水) 18:59 -

引用なし
パスワード
   MJ12 さん、こんばんわ。

>複数の場合、Shapes(1), Shapes(2), Shapes(3), ・・・ となると思います。
>Shapes(2) を削除した場合、内部的に連番が繰り下がると確認(試しにそのような状況でマクロを実行した結果です)したのですが、あっているでしょうか?
>問題なければ、
>.ActiveDocument.Shapes(.ActiveDocument.Shapes.Count)
>で大丈夫だと思っているのですが・・・
大丈夫だと思います。

(略)

  With ObjWord
   .Documents(OpenWord).Activate
   '
   .Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _
              Placement:=wdFloatOverText, DisplayAsIcon:=False
   'アクティブな文書に「最後に追加された図形」
   With .ActiveDocument
     With.Shapes(.Shapes.Count)
       .RelativeHorizontalPosition = wdRelativeHorizontalPositionMargin
       .RelativeVerticalPosition = wdRelativeVerticalPositionMargin
       .Left = wdShapeCenter
       .Top = ObjWord.MillimetersToPoints(0)
     End With
   End With
   Application.CutCopyMode = False

(略)

気になるようでしたら、既存のShape一覧をコピペ前に取得して、それと比較する方がいいかもしれませんね。

それから、
  .ScaleWidth 1#, True
  .ScaleHeight 1#, True
この2行は等倍なので不要だと思います。

【54434】Re:ExcelデータをWordに貼り付け
お礼  MJ12  - 08/3/12(水) 19:12 -

引用なし
パスワード
   ▼りん さん:
こんばんは

>気になるようでしたら、既存のShape一覧をコピペ前に取得して、それと比較する>方がいいかもしれませんね。
はい。確認してみます。

大変助かりました。
本当にありがとうございました。

4794 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free