Проблема при копировании диапазона из рабочей книги в другую: в формуле появляется ссылка на старую рабочую книгу - PullRequest
0 голосов
/ 17 октября 2018

У меня есть исходная рабочая книга только с одним листом Sheet1 с:

  • Ячейка C2 называется "DEUX" (имя относительно листа Sheet1) и содержит число 2
  • Ячейка D2 содержит число 3
  • Ячейка C3 называется «РЕЗУЛЬТАТ» (имя относительно листа Sheet1) и содержит формулу «= DEUX + Sheet1! D2» (который дает 5)

Эта исходная рабочая книга находится в path1.У меня есть копия исходного woorkbook на path2, целевая книга.В него я добавил следующий макрос:

Public Sub CpyRange()

    Dim pathToSource As String
    pathToSource = "path1" 'the aforementionned path to source workbook
    Dim wkbSource As Workbook
    Set wkbSource = Workbooks.Open(pathToSource & "Source.xlsx")
    Dim wksSource As Worksheet
    Set wksSource = wkbSource.Sheets("Sheet1")
    Dim rangeToCopy As Range
    Application.DisplayAlerts = False
    Set rangeToCopy = wksSource.Range("RangeToCopy")
    rangeToCopy.Copy
    ThisWorkbook.Sheets("Sheet1").Range("RangeToCopy").PasteSpecial xlPasteFormulas
    Application.DisplayAlerts = True
    wkbSource.Close

End Sub

(Без бита Application.DisplayAlerts = False при запуске макроса у меня появлялись всплывающие окна "Формула или лист, который вы хотите переместить или скопировать, содержитимя DEUX "и т. д. Теперь у меня их нет, что я и хочу.)

Но у меня возникла проблема после запуска макроса: в ячейке C3 листа Sheet1 целевой книги Iимеют формулу: "= DEUX + 'path1 [Source.xlsx] Sheet1'! D2", где path1 - это путь к исходному wokbook для окон.

Я хотел бы иметь ту же формулу, что и в источнике.Рабочая книга, то есть: "= DEUX + Sheet1! D2".

Это пример, изолирующий проблему, с которой я столкнулся в реальной установке, где диапазон RangeToCopy огромен, миллионы ячеек снесколько сотен тысяч формул. Итак, как бы мне этого добиться?

Замечание. У меня есть Sheet1!D2, а не D2 только для того, чтобы смоделировать это вРеальная настройка ячейки находится на другом листе из той же книги.

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете попробовать:

Sub test5()

Dim Total As Long

Total = Application.Sum(Range("DEUX").Value, Sheet1.Range("D2").Value)

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