Как уже упоминалось в комментариях, Range("G2.G101").Value = "=E2-B2"
должно быть Range(G2:G101).Value
. Это легко увидеть, если использовать макрорегистратор , просто чтобы посмотреть, как определить диапазоны - там он работает без нареканий.
В любом случае, еще несколько моментов:
Когда переменные определены следующим образом:
Dim MainWkbk, NextWkbk As Workbook
, тогда первый (MainWkbk
) определяется как Variant
, а только последний (NextWkbk
) - как рабочая книга. Таким образом, попытайтесь определить явно - Dim MainWkbk as Workbook, NextWkbk As Workbook
.
Хорошая идея - избегать любой ценой ActiveWorkbook
, ActiveCell
и т. Д. - Как избежать использования Select в ExcelVBA . Таким образом, рассмотрим:
Set NextWkbk = Workbooks.Open( Filename:="f:\downloads\daily_" & symbol & ".csv")
Избегание Range()
без Worksheet
. Вместо:
Range("G1").Value = "Net Ch fr Open"
Range("G2:G101").Value = "=E2-B2"
рассмотрим:
With NextWkbk.Worksheets(1)
.Range("G1").Value = "Net Ch fr Open"
.Range("G2:G101").Formula = "=E2-B2"
End With
, поскольку .
перед диапазоном указывает диапазон для первого рабочего листа открытой книги.
Изменение .Value
на .Formula
является последним пунктом, поскольку =E2-B2
является формулой, и в этом случае она немного лучше, поскольку улучшает читабельность.