2017-10-26 3 views
0

Ich verwende ziemlich einfache VBA, aber versuche, den Code von jemand anderem nach einem SP-Upgrade zu reparieren, das wir gerade auf SAP \ BPC, dem EPM-Add-In, hatten . Bitte den Code zu finden unter:Laufzeitfehler '1004': Methodenbereich des Objekts _Arbeitsblatt fehlgeschlagen EPM BPC VBA

Fehler Abschnitt:

For Each CurCell In Input_Sheet.Range(Input_Sheet.Range("SPREAD_COLUMN"), Input_Sheet.Range("SPREAD_COLUMN").Offset(Input_Sheet.Cells.SpecialCells(xlCellTypeLastCell).Row, 0)) 

Code:

Private Function AFTER_REFRESH() 
    ' Apply the in-cell drop-downs (validations) for the spreads 

    Dim CurCell As Range 

    Application.EnableEvents = False 
    Application.ScreenUpdating = False 

    UnProtect_Sheet 

    For Each CurCell In Input_Sheet.Range(Input_Sheet.Range("SPREAD_COLUMN"), Input_Sheet.Range("SPREAD_COLUMN").Offset(Input_Sheet.Cells.SpecialCells(xlCellTypeLastCell).Row, 0)) 
     If Not CurCell.Font.Bold Then 
      With CurCell.Validation ' apply validation (drop-down) to spread column 
       .Delete 
       .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=SPREAD_METHODS" 
       .InCellDropdown = True 
      End With 

     End If 
    Next 


    If LockWorkbook Then 
     Protect_Sheet 
    End If 

    Application.EnableEvents = True 
    Application.ScreenUpdating = True 

End Function 

Vielen Dank und freundlichen Grüßen für Ihre Hilfe.

Antwort

0

Trennen Sie die Input_Sheet.Range(Input_Sheet.Range("SPREAD_COLUMN"), Input_Sheet.Range("SPREAD_COLUMN").Offset(Input_Sheet.Cells.SpecialCells(xlCellTypeLastCell).Row, 0)) Zeile aus dem Direktfenster (Strg + G) in ihre Komponenten und sehen Sie, wo der Fehler auftritt. Haben

?Input_Sheet.Range("SPREAD_COLUMN").Address 

und dann

?Input_Sheet.Cells.SpecialCells(xlCellTypeLastCell).Row 

und dann

Input_Sheet.Range("SPREAD_COLUMN").Offset(Input_Sheet.Cells.SpecialCells(xlCellTypeLastCell).Row, 0) 

Einer der oben wird scheitern und setzen Sie auf dem richtigen Weg, das Problem zu lösen. Zum Beispiel gibt es vielleicht keinen Bereich "SPREAD_COLUMN" auf Input_Sheet; vielleicht ist die letzte verwendete Zeile groß genug, um den Versatz über das Limit von 1'048'576 Zeilen hinaus zu verschieben; vielleicht ist Input_Sheet.Range ("SPREAD_COLUMN") eine ganze Spalte, die nicht vertikal versetzt werden kann; usw.

0

Es könnte besser sein, den Code in eine Sub-Funktion als Funktion zu ändern, da er eine Prozedur ausführt und keinen Wert zurückgibt.

Haben Sie input_sheet außerhalb der Prozedur deklariert?

Option explicit 

Private Sub AFTER_REFRESH() 
'Apply the in-cell drop-downs (validations) for the spreads 

Application.EnableEvents = False 
Application.ScreenUpdating = False 

UnProtect_Sheet 

If not (Input_Sheet is nothing) then 

Dim CurCell As Range 

On error resume next 
Set CurCell = input_sheet.range("SPREAD_COLUMN") 
ON error GOTO 0 

If not (curcell is nothing) then 

For Each CurCell In Input_sheet.Range(Input_sheet.range("SPREAD_COLUMN"), Input_sheet.Range("SPREAD_COLUMN").Offset(Input_Sheet.Cells.SpecialCells(xlCellTypeLastCell).Row, 0) 

If Not CurCell.Font.Bold Then 

With CurCell.Validation ' apply validation (drop-down) to spread column 
.Delete 
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=SPREAD_METHODS" 
.InCellDropdown = True 
End With 

End If 
Next cell 
Else 
Msgbox("Input_Sheet exists, but does not contain the range SPREAD_COLUMN.") 
End if 

    Else 
    Msgbox("Input_Sheet does not exist") 
    End if 

If LockWorkbook Then 
Protect_Sheet 
End If 

Application.EnableEvents = True 
Application.ScreenUpdating= True 

End Function 
Verwandte Themen