2017-08-07 38 views
0

我正在嘗試在受保護的文檔中添加下拉列表。添加數據驗證時的運行時錯誤1004

我使用的代碼是:

Private Sub AddDropDown_Click() 
    ActiveSheet.Unprotect 

    Dim currCell As Range 
    Dim lastRow As Long 
    With ActiveSheet 
     lastRow = ActiveSheet.Cells(1048576, 1).End(xlUp).Row 
    End With 
    For Each currCell In Range("K4:K" & lastRow) 
     With currCell.Validation 
      .Delete 
      .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=INDIREKT(J" & currCell.Row & ")" 
      .IgnoreBlank = True 
      .InCellDropdown = True 
      .InputTitle = "" 
      .ErrorTitle = "" 
      .InputMessage = "" 
      .ErrorMessage = "" 
      .ShowInput = True 
      .ShowError = True 
     End With 
    Next currCell 
    ActiveSheet.Protect 
End Sub 

但是當我嘗試運行它拋出Error 1004。新增的excecuted該行的代碼。

大多數參數拋出當我嘗試whatching他們在調試時相同的錯誤:

Debug Screenshot Validation

有沒有人有一個想法是什麼原因造成的?

+1

首先,你需要用範圍限定你的'formula',所以它需要是'cell.formula <>「」''。第二,什麼是INDIREKt?你在使用Excel的德語設置嗎? –

+0

你的'公式'變量集在哪裏? ('如果公式<>「」Then')你是不是指'Cell.Formula'?其次,您在代碼中使用德語版的「間接」公式 - 試試英語。 –

+0

@ShaiRado是的,我有德語的Excel版本,你也可以在屏幕截圖中看到。在改變一些事情之前,公式是我在那裏的一部分。從問題中刪除它。 – lightlike

回答

0

德國配方是好的。但嘗試以下這些要點進行調試:

  1. 上的錯誤恢復刪除下一
  2. 重命名cell其他任何事情。例如。 myCellrngCell
  3. debug.print lastRow放在For Each cell In Range("K4:K" & lastRow)之前。
  4. Option Explicit放在頂部並嘗試編譯代碼。
+0

做了這一切,並改變了它的問題。仍然不起作用。 「On Error」也不起作用。我仍然收到錯誤消息。 「lastRow」是2214,這是正確的。 – lightlike