Excel VBA質問箱 IV

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

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


2167 / 13645 ツリー ←次へ | 前へ→

【69573】オブジェクトの選択 VBA初心者 11/8/3(水) 18:17 質問[未読]
【69574】Re:オブジェクトの選択 ichinose 11/8/4(木) 7:21 発言[未読]
【69575】Re:オブジェクトの選択 VBA初心者 11/8/4(木) 9:16 回答[未読]
【69576】Re:オブジェクトの選択 ichinose 11/8/4(木) 10:25 発言[未読]
【69577】Re:オブジェクトの選択 VBA初心者 11/8/4(木) 11:48 回答[未読]
【69580】Re:オブジェクトの選択 ichinose 11/8/4(木) 13:15 発言[未読]
【69583】Re:オブジェクトの選択 VBA初心者 11/8/4(木) 14:54 お礼[未読]

【69573】オブジェクトの選択
質問  VBA初心者  - 11/8/3(水) 18:17 -

引用なし
パスワード
   VBA初心者です。ご教授願います。

今回作成しているのは、複数の人が同じファイルを
各自のローカル環境に保存(コピー)し、実行するファイルです。

マクロの記録を実行すると、以下のように記述されました。

ActiveSheet.Shapes.Range(Array("Rectangle 6")).Select

これを、ほかのパソコンで操作すると、以下のエラーが表示されます。

/////
実行時エラー '1004':
指定したアイテムが見つかりませんでした。
/////

このエラーの対処方法を教えてください。
よろしくお願いします。

【69574】Re:オブジェクトの選択
発言  ichinose  - 11/8/4(木) 7:21 -

引用なし
パスワード
   おはようございます


>
>ActiveSheet.Shapes.Range(Array("Rectangle 6")).Select
この行の直前に
  Dim shp As Shape
  With ActiveSheet
    MsgBox "図形の数 = " & .Shapes.Count
    For Each shp In .Shapes
     MsgBox shp.Name
    Next
  End With

を挿入して実行して見てください。
結果は、どうなりますか?

【69575】Re:オブジェクトの選択
回答  VBA初心者  - 11/8/4(木) 9:16 -

引用なし
パスワード
   おはようございます。
早速のご回答、ありがとうございます。

早速、試してみました。
結果は、「図形の数 = 1」⇒「Rectangle 6」の順に表示されました。

前回記載していなかったのですが、
全体の処理は、以下のような流れになります。
ほかにもエラーになる可能性があるでしょうか?

1.この図形をコピーする
2.別のシートに貼り付ける
3.印刷をする
4.貼り付けた図形を削除する
5.元の図形があるシートを非表示にする

※これらの処理は、私の環境では正常に動作しています。

以上の件、よろしくお願いします。

【69576】Re:オブジェクトの選択
発言  ichinose  - 11/8/4(木) 10:25 -

引用なし
パスワード
   ▼VBA初心者 さん:

>※これらの処理は、私の環境では正常に動作しています。
前回投稿のコードもエラーが発生するPCで試してください

【69577】Re:オブジェクトの選択
回答  VBA初心者  - 11/8/4(木) 11:48 -

引用なし
パスワード
   エラーが発生していたPCでは、
「図形の数 = 1」⇒「正方形/長方形 6」の順に表示されました。

開発環境と実行環境で、Officeのバージョンが違っていたのが
原因では(?)と考え、前回いただいた内容をアレンジして、
以下のように記載を変更してみました。
(環境の違いを記載するのを忘れていました。すみません。)

ちなみに、コピーする図形があるシート(コピー元のシート)には、
この図形のみがあります。

この内容で実行すると、ほかのPCでもエラーが発生しなくなりました。
ほかのエラーが発生する可能性があるかどうかはわかりませんが・・・

/////
Dim shp As Shape
Dim shpnamae As String   '←ここを追加

  With ActiveSheet
    MsgBox "図形の数 = " & .Shapes.count
    For Each shp In .Shapes
     MsgBox shp.Name
    shpnamae = shp.Name '←ここを追加
    Next
  End With

'1.この図形をコピーする

  ActiveSheet.Shapes.Range(Array(shpnamae)).Select
  ActiveSheet.Shapes.Range(Array(shpnamae)).Name = "AAA"
  Selection.Copy

'2.別のシートに貼り付ける

  Sheets(シート名).Select
  ActiveSheet.Paste

'3.印刷をする

  ActiveSheet.PrintOut

'4.貼り付けた図形を削除する

  ActiveSheet.Shapes("AAA").Select
  Selection.Delete

/////

【69580】Re:オブジェクトの選択
発言  ichinose  - 11/8/4(木) 13:15 -

引用なし
パスワード
   元々の図形(Rectangle 6)がどこでどのように作成されたのか
が不明なので何とも言えませんが、図形が一つしかないなら・・・、


  ActiveSheet.Shapes(1).Copy

'2.別のシートに貼り付ける

  Sheets(シート名).Select
  ActiveSheet.Paste

'3.印刷をする

  ActiveSheet.PrintOut

'4.貼り付けた図形を削除する

  ActiveSheet.Shapes(1).Select
  Selection.Delete

このようにインデックスで指定してもよいかもしれませんよ

【69583】Re:オブジェクトの選択
お礼  VBA初心者  - 11/8/4(木) 14:54 -

引用なし
パスワード
   ご回答、ありがとうございました。

図形が1つしかない場合は、「ActiveSheet.Shapes(1).Copy」で
良かったんですね。

情報が後手後手になってしまい、すみませんでした。

今回初めて投稿させていただきましたが、
丁寧に教えていただいたので、とてもわかりやすかったです。
本当に、ありがとうございました。

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