Метод VBA .range для копирования / вставки, приводящий к # N / A - PullRequest
0 голосов
/ 17 октября 2018

В настоящее время у меня есть макрос, который, используя контрольный файл, циклически перебирает список внешних файлов, выполняя следующие процессы:

  • открывает файл
  • вставляет две переменные из элемента управленияfile
  • позволяет внешнему, только что открытому файлу рассчитывать на основе вставленных переменных
  • извлекает несколько диапазонов данных из открытых файлов, возвращая их к указанным диапазонам в контрольном файле

Из-за количества открываемых файлов (30) и несколько большого размера указанных файлов (в среднем 15 КБ) я пытался оптимизировать сценарий.

В настоящее времяЯ заменяю все использование буфера обмена (копирование / вставка) методом .range, в котором исходный диапазон приравнивается к целевому диапазону.Это работает над несколькими элементами, но у меня возникла проблема с конкретным диапазоном, который необходимо переместить в контрольный файл.

Диапазон правильно перемещается от источника к месту назначения, но четвертый столбецданные в диапазоне, который движется, приводят к # N / A после прибытия в пункт назначения.Все исходные данные основаны на формуле (по сравнению с жестко закодированными данными), поэтому кажется странным, что проблема возникает только в 4-м столбце.Единственное, что отличается от этого 4-го столбца, это то, что он не является смежным с первыми тремя столбцами, но является 4-м столбцом именованного диапазона.

Это конкретный фрагмент кода, который приводит к# N / A:

**Workbooks(Control_File).Sheets(Project).Range(ProjRange).Value = 
Workbooks(Open_ES).Sheets("Sale Refi Dist. Template").Range(Project & 
"_Tranche_1").Value**

Ниже приведен полный сценарий:

Sub NAV_Waterfalls()
Application.ScreenUpdating = False
Application.DisplayAlerts = False

As_Of_Date = Range("As_Of_Date")
Control_File = Range("Control_File_Name")


Set Project_Rng = Range("Project_Range")
Dim cell As Range
Dim FPath As String


Z = Range("Project_Range").Rows.Count

For Each cell In Project_Rng

Workbooks(Control_File).Sheets("Asset Control - NAV").Activate
Project = cell

FPath = Range(Project & "_FilePath")
Open_ES = Project & " - Equity"
NAV = Range(Project & "_NAV")

Dim book As Workbook
Set book = Workbooks.Open(FPath, 2, ReadOnly:=True)


'Delete last run data
Workbooks(Control_File).Sheets(Project).Activate
Rows("7:500").Select
Selection.ClearContents

'Insert Date
Workbooks(Control_File).Activate
Workbooks(Control_File).Sheets("Asset Control - 
NAV").Range("As_of_Date").Copy Workbooks(Open_ES).Sheets("Sale Refi Dist. 
Template").Range(Project & "_Date_Input")


'Insert Project NAV
Workbooks(Control_File).Activate
Workbooks(Control_File).Sheets("Asset Control - NAV").Range(Project & 
"_NAV").Copy Workbooks(Open_ES).Sheets("Sale Refi Dist. 
Template").Range(Project & "_NAV_Input")



'Tranche 1
On Error Resume Next

With Workbooks(Open_ES).Sheets("Sale Refi Dist. Template").Range(Project & 
"_Tranche_1")
Tranche_Rows = .Rows.Count
Tranche_Cols = 4
End With

Workbooks(Control_File).Sheets(Project).Activate
Range("A" & Cells.Rows.Count).End(xlUp).Select
ActiveCell.Offset(1).Select.Activate

StartRow = ActiveCell.Row
Lastrow = Tranche_Rows
Let ProjRange = "A" & StartRow & ":" & "D" & StartRow + Lastrow - 1



**Workbooks(Control_File).Sheets(Project).Range(ProjRange).Value = 
Workbooks(Open_ES).Sheets("Sale Refi Dist. Template").Range(Project & 
"_Tranche_1").Value**

Application.CutCopyMode = False

Workbooks(Open_ES).Close SaveChanges:=False
Workbooks(Control_File).Save

Next
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Фактический сценарий содержит части, которые повторяют раздел, помеченный как «Транш 1» для дополнительных траншей, но, скорее всего,быть переписан в цикле для всех траншей, поэтому я исключил этот кусок.

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