2009-06-04 31 views
1

我有一些代碼,這使我的VBA代碼引起是什麼導致Excel VBA中的錯誤70?

Error 70: Permission Denied 

。我無法弄清楚爲什麼,因爲我知道工作表是不受保護的,我可以對其進行更改。有問題的代碼是

sh.Name = "square" 

它試圖重命名已經從另一片複製並粘貼到片材的形狀 - 有在片材具有該名稱的其它形狀,因爲這些代碼我有前已經刪除了具有該名稱的所有形狀。

任何有關可能導致此權限錯誤的建議?

+0

你能提供一個你的代碼的例子嗎?你如何定義sh對象? – 2009-06-04 07:00:31

回答

5

通常,這是由於試圖使用相同的名稱兩次造成的。嘗試這樣做,而不是:

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在那個形狀上) – 2009-06-04 08:18:16

0

「權限被拒絕」不是用於受保護的工作表,而是用於錯誤地訪問屬性或變量。

我相信在您嘗試訪問它並設置其「名稱」屬性時,「sh」爲空。嘗試查看是否在設置其屬性之前正確初始化了它。

+0

檢查了這一點,而sh是絕對有效的形狀 – 2009-06-04 08:12:37

2

清潔,當您去。將對象設置爲空,字符串在使用後爲空值,並且不在函數和子例程之間使用相同的名稱。

相關問題