2016-10-14 1 views
0

У меня есть этот код VBA, который может сделать прогноз с заданным набором данных.Отладка переменной Object или с переменной блока не установлена ​​ошибка

Sub EIDOpredsub() 
modDeclarations.initDemo               'DEMO initialisieren 
Dim objEachAnalysis As clsAnalysis             'Zähler für jede Analyse in Sammlung 
Dim rngOutput As Range                'Zellbereich der Ausgabe 
Dim rngInputParameter As Range              'Zellbereich des unabhängigen Parameterspalte 
Dim varInput() As Variant               'Array für die Input-Datei 
Dim varOutput() As Variant               'Array für die Output-Datei 
Dim varInputParameter As Variant             'Array für die unabhängige Parameterspalte 
Dim intEachIndepParameter As Integer            'Zähler für jeden unabhängigen Parameter 
Dim lngEachRow As Long                'Zähler für jede Zeile 
Dim lngCountRows As Long               'Alle Datensätze des Reports 
Dim resultCall As Boolean 


On Error GoTo ErrorHandler               'Abbruch, falls ein unvorgesehener Fehler auftritt 

lngCountRows = ActiveWorkbook.Sheets(p_objReportActual.Reportname) _ 
    .Range("A1").End(xlDown).Row - 2            'Alle Datensätze abzüglich zwei Zeilen für die Überschrift 

For Each objEachAnalysis In p_objReportActual.Analyses        'Für jede Analyse in Sammlung 
    If objEachAnalysis.Aktiv = True Then           'Wenn Analyse aktiviert 
     ReDim varInput(UBound(objEachAnalysis.IndepParameters, 2) + 1, lngCountRows) 'Dann dimensioniere das Inputarray 
     ReDim varInputParameter(1, 1)            'Leere das Array der Parameterspalte 

     For intEachIndepParameter = 0 To UBound(objEachAnalysis.IndepParameters, 2) 'Für jeden unabhängigen Parameter der Analyse 
      Set rngInputParameter = ActiveWorkbook.Sheets(p_objReportActual.Reportname) _ 
       .Range(Cells(2, 1), Cells(2, UBound(p_objReportActual.Parameters, 2) + 1)) _ 
       .Find(objEachAnalysis.IndepParameters(0, intEachIndepParameter), , , xlWhole) 'Finde den Parameter im ersten Block 
      Set rngInputParameter = Range(rngInputParameter, _ 
       rngInputParameter.End(xlDown))          'Dimensioniere den Zellbereich für alle Datensätze 
      varInputParameter = rngInputParameter         'Übergebe den Zellbereich ans Array 

      For lngEachRow = 2 To lngCountRows + 1         'Für jede Zeile 
       If varInputParameter(lngEachRow, 1) = "" Or varInputParameter(lngEachRow, 1) = "-" Then   'Wenn Parameter leer oder "-" sein sollte 
        MsgBox "Zur Analyse " & objEachAnalysis.Analysis & " sind nicht alle Daten vorhanden."  'Dann Warnhinweis 
        GoTo NextAnalysis                   'Springe zur nächsten Analyse 
       End If 

       varInput(intEachIndepParameter, lngEachRow - 2) = varInputParameter(lngEachRow, 1)    'Fülle Input-Array mit Spalten-Array 
      Next lngEachRow 
     Next intEachIndepParameter 

     Set rngOutput = ActiveWorkbook.Sheets(p_objReportActual.Reportname) _ 
      .Range(Range("A2"), Range("A2").End(xlToRight)).Offset(-1, 0) _ 
      .Find(objEachAnalysis.Analysis, , , xlWhole).Offset(2, 0)    'Finde Zellbereich für die Ausgabe der Ergebnisse 
     Set rngOutput = rngOutput.Resize(lngCountRows, UBound(objEachAnalysis.DepParameters, 2) + 1) 'Dimensioniere Zellbereich für alle Datensätze 

     resultCall = callEIDOminerConsole(objEachAnalysis, varInput, varOutput)     'Übertragung an EIDOminerConsole 

     If resultCall Then 
      rngOutput = varOutput              'Fülle Zellbereich mit Array 
     End If 
    End If 
NextAnalysis: 
    Next objEachAnalysis 
    Exit Sub 
ErrorHandler: 
    MsgBox "Die Berechnung wurde abgebrochen. Anscheinend ist die Analyse " & objEachAnalysis.Analysis & " beschädigt." 
End Sub 

, когда я отладки до

lngCountRows = ActiveWorkbook.Sheets(p_objReportActual.Reportname).Range("A1").End(xlDown).Row - 2

всегда появился «Переменная объекта или переменная блока не установлена» Что могло случиться и как это исправить?

+0

попытка изменить эту (.Reportname) просто. name – User632716

+1

Что такое 'p_objReportActual'? – user3598756

+0

2 вещи для проверки: 1. убедитесь, что 'p_objReportActual.Reportname' или' p_objReportActual.name' возвращает допустимое значение. 2. Убедитесь, что лист с именем, возвращаемым 'p_objReportActual.Reportname', фактически существует – Zac

ответ

0

Вы пытались добавить «набор» перед переменной? Как и ...

"Установить lngCountRows = ActiveWorkbook ..."

Смежные вопросы