У меня есть этот код 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
всегда появился «Переменная объекта или переменная блока не установлена» Что могло случиться и как это исправить?
попытка изменить эту (.Reportname) просто. name – User632716
Что такое 'p_objReportActual'? – user3598756
2 вещи для проверки: 1. убедитесь, что 'p_objReportActual.Reportname' или' p_objReportActual.name' возвращает допустимое значение. 2. Убедитесь, что лист с именем, возвращаемым 'p_objReportActual.Reportname', фактически существует – Zac