• ベストアンサー

エクセル2007でアクティブコントロールのボタンを使って

エクセル2007でアクティブコントロールのボタンを使って 挿入した写真を削除する場合のマクロ プログラムを教えてください。 マクロ初心者です

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.6

【回答】 ○作成方針 1.上のセルに写真を入れるコマンドボタン1, 中の場所に写真を入れるコマンドボタン2, 下の場所に写真を入れるコマンドボタン3 をそれぞれ作成する。 2.上のセルの写真を削除するコマンドボタン4 中の写真を削除するコマンドボタン5 下の写真を削除するコマンドボタン6 をそれぞれ作成する。 サンプル: いまのシートのマクロを全て消します。 次のマクロに差し替えます。 セル番地等は漏れなく正しく間違い無いよう気を付けて修正します。 Private Sub CommandButton1_Click() fname = Application.GetOpenFilename ActiveSheet.Pictures.Insert(fname).Select Selection.ShapeRange.LockAspectRatio = msoFalse Call CommandButton4_Click Selection.ShapeRange.Height = Range("C12:U24").Height Selection.ShapeRange.Width = Range("C12:U24").Width Selection.ShapeRange.Left = Range("C12:U24").Left Selection.ShapeRange.Top = Range("C12:U24").Top Selection.ShapeRange.Name = "Pict_Top" End Sub Private Sub CommandButton2_Click() fname = Application.GetOpenFilename ActiveSheet.Pictures.Insert(fname).Select Selection.ShapeRange.LockAspectRatio = msoFalse Call CommandButton5_Click Selection.ShapeRange.Height = Range("C32:U44").Height Selection.ShapeRange.Width = Range("C32:U44").Width Selection.ShapeRange.Left = Range("C32:U44").Left Selection.ShapeRange.Top = Range("C32:U44").Top Selection.ShapeRange.Name = "Pict_Mid" End Sub Private Sub CommandButton3_Click() fname = Application.GetOpenFilename ActiveSheet.Pictures.Insert(fname).Select Selection.ShapeRange.LockAspectRatio = msoFalse Call CommandButton6_Click Selection.ShapeRange.Height = Range("C42:U54").Height Selection.ShapeRange.Width = Range("C42:U54").Width Selection.ShapeRange.Left = Range("C42:U54").Left Selection.ShapeRange.Top = Range("C42:U54").Top Selection.ShapeRange.Name = "Pict_Low" End Sub Private Sub CommandButton4_Click() On Error Resume Next Me.Shapes("Pict_Top").Delete End Sub Private Sub CommandButton5_Click() On Error Resume Next Me.Shapes("Pict_Top").Delete End Sub Private Sub CommandButton6_Click() On Error Resume Next Me.Shapes("Pict_Top").Delete End Sub それで。 >写真記録を作成していて縦に写真が3枚並んでいて >その中の一枚だけ(上・中・下どれでもいいです)消したいのですが・・? それはもはや,全く別のご質問です。 しかも情報を小出し後出しにして,しかも補足毎に仰有ってる事が違ってるので,お互いに手間と時間が無駄になるばかりです。

bcxsk381
質問者

お礼

マクロが分からない為に自分の中でこの回答をもらえば別を補えるだろうと 勝手に思い込んでしまいました。 以後気をつけたいと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.7

>Selection.ShapeRange.Left = Range("C12:U24").Left >Selection.ShapeRange.Top = Range("C12:U24").Top このコードを見る限りでは図形の左上ははC12セルに張り付けているので 左上が セルC12の図形を削除 Private Sub CommandButton2_Click()   Dim c As Shape   For Each c In ActiveSheet.Shapes     If c.TopLeftCell.Address(0, 0) = "C12" Then       c.Delete     End If   Next End Sub こちらは参考に Private Sub CommandButton1_Click()   Dim fname As String   fname = Application.GetOpenFilename   'キャンセルを選択したときはExit   If fname = "False" Then Exit Sub   With ActiveSheet.Pictures.Insert(fname).ShapeRange     .LockAspectRatio = msoFalse     .Height = Range("C12:U24").Height     .Width = Range("C12:U24").Width     .Left = Range("C12:U24").Left     .Top = Range("C12:U24").Top   End With End Sub

bcxsk381
質問者

お礼

早速ためしてみます。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.5

訂正です >ActiveSheet.Shapes(1).Delete ↑これだとボタンも削除されますので For Each c In ActiveSheet.Shapes   If c.Type = msoPicture Then     c.Delete     Exit For   End If Next

すると、全ての回答が全文表示されます。
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

>その中の一枚だけ(上・中・下どれでもいいです)消したいのですが・・? どれでもよいのなら 一枚目の写真 ActiveSheet.Shapes(1).Delete

すると、全ての回答が全文表示されます。
  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.3

あすみません 一括削除なら ActiveSheet.DrawingObjects.Delete これで出来ました、前記回答は無視でお願いします

bcxsk381
質問者

補足

ことば足らずでした。 写真記録を作成していて縦に写真が3枚並んでいて その中の一枚だけ(上・中・下どれでもいいです)消したいのですが・・? 回答いただいた方法を試した結果3枚の写真すべてとマクロのボタンも消えてしまいました。

すると、全ての回答が全文表示されます。
  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.2

何点か確認があります 1.挿入した写真には名前が付けられていますか?  1-1.意図的に名前が付けられていない場合、写真の挿入や切り取りなどの動作を繰り返していませんか?  1-2.意図的に名前を付けている場合は名前に規則性はありますか? 2.sheetには複数の写真が張り付けられていますか?  2-1.複数の写真がある場合はそのすべてを削除する?  2-2.選択した写真のみの削除? 条件によって動作が異なってきます ※基本的に挿入した写真の削除は Shapes("写真の名前").Delete で可能です 選択した図形の削除であれば Selection.Delete で可能 図形の挿入を行うと挿入した順番に Picture 1~ 連番で名前が付けられます、複数の写真の一括削除を行うのであれば連番の部分を増やしながら写真の数だけDeleteをループさせれば可能 ただし一度切り取って貼り付けし直した場合には、切り取った写真の番号が欠番になり、貼り付けた写真の名前は新しい連番が割り付けられます 例:写真が2枚挿入された状態でPicture 1を切り取り、貼り付けし直すとPicture 1は無くなりPicture 3が新しく作成されます 意図的に図形に名前を付けている場合は、名前に規則性(連番など)がない場合は複数の写真を一括削除するのは難しい可能性があります

bcxsk381
質問者

お礼

すいません。 ありがとうございました。

bcxsk381
質問者

補足

下記のプログラムでボタンを使って写真を挿入しています。 この挿入した写真をべつのボタンを作成して消したいのですが・・? Private Sub CommandButton1_Click() fname = Application.GetOpenFilename ActiveSheet.Pictures.Insert(fname).Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = Range("C12:U24").Height Selection.ShapeRange.Width = Range("C12:U24").Width Selection.ShapeRange.Left = Range("C12:U24").Left Selection.ShapeRange.Top = Range("C12:U24").Top

すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

サンプル: Private Sub CommandButton1_Click()  Dim s As Shape  For Each s In ActiveSheet.Shapes   If s.Type = msoPicture Then s.Delete  Next End Sub >挿入した写真 とは違う方法でシートに貼り付けたりしていたモノについては,ダメな場合もあります。 >アクティブコントロールのボタンを使って を使わず,もっと簡易なフォームやそれこそ図形等にマクロを登録して使えば,単純に activesheet.pictrures.delete 等でも済ませられます。

bcxsk381
質問者

補足

ことば足らずでした。 写真記録を作成していて縦に写真が3枚並んでいて その中の一枚だけ(上・中・下どれでもいいです)消したいのですが・・? 回答いただいた方法を試した結果3枚の写真すべて消えてしまいました。

すると、全ての回答が全文表示されます。

関連するQ&A