В настоящее время у меня есть макрос, который, используя контрольный файл, циклически перебирает список внешних файлов, выполняя следующие процессы:
- открывает файл
- вставляет две переменные из элемента управления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» для дополнительных траншей, но, скорее всего,быть переписан в цикле для всех траншей, поэтому я исключил этот кусок.