2009-06-04 21 views
1

私は私のVBAコードでExcel VBAでエラー70の原因は何ですか?

Error 70: Permission Denied 

を起こし続けていくつかのコードを持っています。ワークシートが保護されていないこと、そしてワークシートに変更を加えることができることがわかっているので、私は理由を理解できません。問題のコードは、それは別のシートからコピーし、シートに貼り付けられた形状の名前を変更しようとし

sh.Name = "square" 

である - 前に、これらのコードに私が持っているので、シートには他の形状は、その名前ではありませんその名前のすべての図形をすでに削除しました。

このアクセス許可エラーの原因は何ですか?

+0

コードの例を挙げることはできますか?どのようにshオブジェクトを定義しますか? –

答えて

5

一般に、同じ名前を2回使用しようとしたために発生します。代わりにこれを試してみてください:

Sub Example() 
    Dim lngIndx As Long 
    Dim ws As Excel.Worksheet 
    Dim shp As Excel.Shape 
    Set ws = Excel.ActiveSheet 
    Set shp = ws.Shapes.AddShape(msoShapeOval, 174#, 94.5, 207#, 191.25) 
    If NameUsed(ws, "Foo") Then 
     lngIndx = 2 
     Do While NameUsed(ws, "Foo" & CStr(lngIndx)) 
      lngIndx = lngIndx + 1 
     Loop 
     shp.name = "Foo" & CStr(lngIndx) 
    Else 
     shp.name = "Foo" 
    End If 
End Sub 

Private Function NameUsed(ByVal parent As Excel.Worksheet, ByVal name As String) As Boolean 
    Dim shp As Excel.Shape 
    Dim blnRtnVal As Boolean 
    name = LCase$(name) 
    For Each shp In parent.Shapes 
     If LCase$(shp.name) = name Then 
      blnRtnVal = True 
      Exit For 
     End If 
    Next 
    NameUsed = blnRtnVal 
End Function 
+0

これは役に立ちました - 私はあなたのNameUsed関数を(いくつかの変更を加えて)使用し、その名前の他の図形が常に削除されないことを発見しましたその形のsh.Cutを呼んでください) –

+0

あなたの質問に答えますか? – Oorang

+0

ええ、それはなぜ私が図形の名前を変更できなかったかを説明する - ありがとう。 –

0

"Permission Denied"は、保護されたワークシートではなく、プロパティまたは変数への誤ったアクセスです。

"sh"は、アクセスしようとしているポイントでnullで、 "Name"プロパティを設定していると思います。そのプロパティを設定する前に正しく初期化したかどうかを確認してください。

+0

これをチェックして、shは間違いなく有効な形状です –

2

あなたはきれいにしてください。オブジェクトには何も設定せず、文字列を使用した後にnullstringに設定し、関数とサブルーチンの間で同じ名前を使用しないでください。

関連する問題