プロが教えるわが家の防犯対策術!

マクロ初心者です。よろしくお願いいたします。
今スケジュール表をマクロで作成するプログラムを作ってます。
「ある実行項目をいつからいつまでの間にやる」というようなものです。
この「いつからいつまで」というのを矢印で書くようにしたいと思ってます。
日にちを入れれば、そこから矢印の座標を計算し矢印を描画するところまではできました。
しかしスケジュールには変更がつきものです。
日にちを修正して再度「矢印描画プログラム」を走らせると修正後の矢印は書いてくれますが、修正前の矢印は残ったままです(当然ですが)。これを消したいのです。
私としては、プログラムの最初に、まずシート上の図形(矢印)を全て消去して、それからあらためて日程に従って矢印を書き込んでいくというふうにしたいと思ってます。
こんなことってできますか??
よろしくお願いいたします。

A 回答 (5件)

No.3の方とやり方はほとんど同じです。


AutoShapeTypeが-2の場合は直線(矢印を含む)
を削除します。
AutoShapeTypeで削除したい図形を特定できるの
ならばこちらが簡単だと思います。

Private Sub Button1_Click()
Dim s As Shape
For Each s In ActiveSheet.Shapes
If s.AutoShapeType = -2 Then
s.Delete
End If
Next
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
そうですね!わかりやすいですね!
これを使わせていただくことにしたいと思います。
ありがとうございました。

お礼日時:2002/09/29 21:20

No.1です。

 お待たせいたしました。

Private Sub Button1_Click()
  Dim n As Integer
  Dim ZukeiNo As Integer

  ZukeiNo = 1
  For n = 1 To Shapes.Count
    If Left(Shapes(ZukeiNo).Name, 6) = "Button" Then
    ' 6は"Button"の文字数です    "Button"はボタン名と同じにして下さい
        ZukeiNo = ZukeiNo + 1
      Else
        Shapes(ZukeiNo).Delete
    End If
  Next

End Sub
    • good
    • 0
この回答へのお礼

何度もすみません。理解できました。
早速やってみます。ありがとうございました。

お礼日時:2002/09/29 21:19

こんにちは。



aaaは、セルを選択した範囲のシェイプを削除します。
シェイプを選択した時に出る四角形の左上が、選択した
セル内である場合削除します。

Sub aaa()
Dim sh As Shape, r As Range

 If TypeName(Selection) <> "Range" Then Exit Sub
 For Each sh In ActiveSheet.Shapes
  Set r = Application. _
    Intersect(Selection, sh.TopLeftCell)
  If Not r Is Nothing Then sh.Delete
 Next sh
End Sub


bbbはオートシェイプを削除します。
更に矢印だけとかの場合は、AutoShapeType を調べて
判断します。(コメントアウト部分を生かすとオート
シェイプの左向き矢印を削除します)
Arrowだけでも一杯あるので、どのArrowか自分で調べ
てください。

Sub bbb()
Dim sh As Shape

 For Each sh In ActiveSheet.Shapes
  If sh.Type = msoAutoShape Then
   'If sh.AutoShapeType = msoShapeLeftArrow Then
     sh.Delete
   'End If
  End If
 Next sh
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
う~ん…高度ですねぇ(少なくとも私にとっては)。
もっと勉強しなければいけませんね。
参考にさせていただきます。
ありがとうございました。

お礼日時:2002/09/29 21:17

はじめまして。


マクロの自動記録機能を使ってみてはどうでしょうか。操作手順は次のようにします。
1作業をするブックを開き、メニューバーのツール→マクロ→新しいマクロの記録と選択する。
2.マクロの記録というダイアログボックスが表示されるので、そのままOKボタンをクリックする。
3.あなた様のやりたいことを手操作で実行する。
4.作業が終了したら記録と書いてあるダイアログボックスの■ボタンをクリックし、ダイアログボックスを閉じる。

VBE画面を開くとモジュールシートが新規に作成されていますので、その中にあなたがされた作業をするためのコードが書かれています。
もし、モジュールシートが追加されていないときは、標準モジュールシートのどれかにコードが書かれていると思います。

何か解らないことがありましたら、お知らせ下さい。

この回答への補足

ありがとうございます。自動記録機能については最初にやってみました。
矢印がいっぱい引いてあるシート上で、ある範囲を選択しDeleteキーを押しました。
コードは次のとおりでした。

Sub Macro1()
ActiveSheet.Shapes.Range(Array("Line 3", "Line 4")).Select
Selection.Delete
End Sub

これを、作成中のマクロの先頭にそのまま入れても、

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

というメッセージが出て動きませんでした。

対処方法がよくわからなかったので、もっと手っ取り早い方法(範囲指定などせずイッキに消す方法)があるのではないかと思い、投稿した次第です。

補足日時:2002/09/29 18:35
    • good
    • 0

宜しければ、下記をお試しください。



Sub ZukeiClear()

  Worksheets(1).Shapes.SelectAll
  Selection.Delete

End Sub

この回答への補足

ありがとうございます。試してみました。できました!
でも…すみません…全部消すとマクロボタンまで消えてしまうのですね…
ボタンだけ残すことはできませんか?
ある指定の行の中にある図形(矢印)だけを消すなんてことできませんか?

最悪は、ボタンを使わずに、メニューバーからいちいちコマンドを選んで実行するようにすればいいのですが…できればボタンでやりたいのです。

申し訳ありませんがよろしくお願いいたします。

補足日時:2002/09/28 12:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!