意の中のカワズ(35歳の壁 別館)

35歳の壁の別館ブログです。コード中心になるようにしたいので、技術雑記はできるだけ本館に書きます。

VBA:「シェイプの存在確認」

シェイプに何かする前。
つまり、シェイプを指定する場合には当然、
シェイプが存在している必要があるわけで
それを関数にするとなると色んなやり方がうまれます。


都度書くのが面倒なので、以下に残します。



' 指定したシェイプが存在すればTrueを返します。
' ただしこれは全検索タイプなので遅い
Public Function srchShape(srchName As String) As Boolean

Dim objShp As Shape

For Each objShp In ActiveSheet.Shapes
If StrComp(objShp.Name, srchName) = 0 Then
srchShape = True
Exit For
End If
Next

End Function

個人的には、こういう処理の仕方は嫌いなのですが、
速度のためには仕方ないってことで、速くしたいときはこっち。


' 指定したシェイプが存在すればTrueを返します。
' エラーで回避するのは好きじゃないが・・。
Public Function srchShape2(strSrchName As String) As Boolean

Dim objShp As Shape

On Error GoTo NO_OBJECT
If IsObject(ActiveSheet.Shapes(strSrchName)) Then
srchShape2 = True
End If

Exit Function

NO_OBJECT:
srchShape2 = False
Err.Clear
End Function


実は、どちらの処理も好きじゃありませんが、
今急いでるんでこれで。