Как правило, следует избегать использования объекта ActiveWorkbook, если вы не уверены, что рабочая книга, на которую вы хотите сослаться, будет всегда активной, когда ваш код выполняется. Вместо этого вы должны установить рабочую книгу, с которой вы работаете, в переменную. Теоретически, вы должны иметь возможность использовать метод OpenText для этого, но VBA это не нравится. (Я почти уверен, что это ошибка.) Так что сразу после того, как вы откроете текстовый файл, я сделаю следующее:
Workbooks.OpenText Filename:=Forecastfile, StartRow:=1,
DataType:=xlDelimited, Space:=True
Dim ForecastWorkbook As Workbook, book As Workbook
Dim ForecastFileName As String
ForecastFileName = "YourFileNameHere.txt"
For Each book In Application.Workbooks
If book.Name = ForecastFileName Then
Set ForecastWorkbook = book
Exit For
End If
Next book
Тогда вместо этого ...
cell_value = activeSheet.Cells(row, col)
... сделать это ...
cell_value = ForecastWorkbook.Sheets(1).Cells(row, col).Value