| 
    
     |  | >弾が自機の場所に関わらず同じ場所しか出ない >スペースキーを押している間、大量の色指定のない小さな円が生成される
 
 いずれも弾にcircle1という名前を付けて、それをもってコントロールしようとしているせいだと思われます。
 スペースキーを押している間、
 ActiveSheet.Shapes.AddShape(msoShapeOval, p3, p4, s3, s4).Name = "circle1"
 で新しい弾を生成し続けますが、それ以降に
 ActiveSheet.Shapes("circle1")
 を使って参照するのは、最初に生成したcircle1だけなので、それ以降に色の設定をされない弾が生成される上、それらは移動しないということになるのでしょう。
 
 
 >途中で止まる
 
 これは
 If crc1.Top < 100 Then
 crc1.Delete
 End If
 でそのように設定してるからではないですか?
 
 
 対応方法ですが、弾を生成するたびにコレクションに追加し、弾の移動はFor Eachで回すようにすればいいでしょう。
 最初に弾に色を付けるときだけは、コレクションの最大番号を取得して、それで指定するとか、コレクションに追加するときにキーを設定してそれで指定するとか。
 
 
 あと、質問とは関係ないですが、インデントが揃ってないので非常に読みにくいです。階層構造に応じたインデントを設定するようにしましょう。
 p1とかp2とかの変数名が何のことを指しているのかわかりにくいのも課題ですね。
 
 |  |