Ошибка поиска цели 1004 при использовании application.run из другой книги - PullRequest
0 голосов
/ 12 января 2019

У меня ошибка во время выполнения, которую я не могу устранить, несмотря на то, что я много раз искал во многих форумах.

Вот проблема: я использую макрос в модели, ища оптимальное распределение с помощью функции поиска цели. Когда я использую его в этой модели (назовем его Модель 1), макрос работает отлично.

Однако мне нужно работать в этой модели и в другой, чтобы получить данные, которые будут заполнять таблицу, расположенную в 3-м файле Excel, который затем является моим «основным файлом» (назовем его Model 3).

Таким образом, мне нужно вызвать этот макрос, расположенный в Model 1, через Application.run из Model 3. И когда я это делаю, я получаю «Ошибка времени выполнения« 1004 »: ссылка недействительна». которая относится к функции поиска цели, которую я использую в модели 1. Более того, если после этого я вернусь к Модели 1 и попытаюсь использовать макрос, то получу точно такое же сообщение об ошибке, пока оно работало до этого.

Вот мои коды: Модель 3 (основная):

Sub Test_Optim()
Dim JFMPath As String
Dim MacroPath As String

JFMPath = Sheets("Inputs").Range("D2")
MacroPath = Sheets("Inputs").Range("A3")

Workbooks.Open JFMPath
Application.Run (MacroPath)

End Sub

Модель 1:

Option Explicit
Option Base 1
Sub Optimization_Alloc()
'Definitions

Dim i As Integer
Dim k As Integer
Dim IRR As Single
Dim IRRDelta As Single
Dim vIRR() As Single
Dim MinIRR As Single

Dim vPPA() As Single
Dim PPALevel As Single
Dim MinPPA As Single

Dim Position As Integer
Dim FlipYearIterations As Integer

Dim IterTF As Boolean
Dim IterStep As Single

Dim FlipYear As Integer
Dim OptFlipYear As Integer
Dim vFlipYear() As Integer

Dim xDistribution As Single
Dim OptxDistribution As Single
Dim vXDistribution() As Single

'enables goal-seek iterations, MaxIterations is the number you would wanna change
IterTF = Application.Iteration = True
IterStep = Application.MaxIterations

With Application
 .Iteration = True
 .MaxIterations = 500
 .MaxChange = 0.0001
End With


FlipYearIterations = 10

ReDim vPPA(FlipYearIterations) As Single
ReDim vFlipYear(FlipYearIterations) As Integer
ReDim vXDistribution(FlipYearIterations) As Single
ReDim vIRR(FlipYearIterations) As Single

For i = 1 To FlipYearIterations
    vFlipYear(i) = 2027 + i - 1
Next i

'Loops through different FlipYears. For every year, optimal allocation of cash/tax is calculated by goalseek.
For k = 1 To FlipYearIterations
    Worksheets("As_Yr").Cells(345, 9) = vFlipYear(k) 'Optimal flip year
    Worksheets("As_Yr").Cells(350, 9).GoalSeek Goal:=0, ChangingCell:=Worksheets("As_Yr").Cells(346, 9)
    'Here is the Goalseek function from which I get the run-time error

    xDistribution = Worksheets("As_Yr").Cells(346, 9)
    PPALevel = Worksheets("Cockpit & As_Gen").Cells(48, 9)

    vXDistribution(k) = xDistribution
    vPPA(k) = PPALevel
    vIRR(k) = Worksheets("As_Yr").Cells(348, 9) 
Next k

'Determines optimal FlipYear
MinIRR = WorksheetFunction.Max(vIRR)
Position = WorksheetFunction.Match(MinIRR, vIRR, False)

OptFlipYear = vFlipYear(Position)
OptxDistribution = vXDistribution(Position)


'Prints optimal setting to Excel
Worksheets("As_Yr").Cells(345, 9) = OptFlipYear 'Optimal flip year
Worksheets("As_Yr").Cells(346, 9) = OptxDistribution 'Optimal CF distrib


'restores to the original goal-seek iterations setting
IterTF = Application.Iteration = True
IterStep = Application.MaxIterations

With Application
 .MaxIterations = IterStep
 .Iteration = IterTF
 .MaxChange = 0.001
End With

End Sub

Может ли это один из вас помочь мне? Я предполагаю, что это фиктивная ошибка, но я не могу понять это.

Большое спасибо, Alice

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...