Я работаю над сценарием VBA для Excel, чтобы выполнить следующие задачи:
- Импорт файла данных (лист 1)
- Импорт файла счета (лист 2)
- В файле счета-фактуры VLOOKUP с файлами данных, добавив столбец «Найдено» с флагом Y / N и удалив несовпадающие записи
- На другом листе «Пересчитанные данные» (Лист 3) я иметь A: A C, состоящий из заголовков 1-й строки и 2-й строки с формулой, которая будет извлекать данные из листа 2 и заполнять до подсчета последней строки. Количество последней строки из сообщения листа 2, удаляющего несоответствующие записи
До шага 3, работает абсолютно нормально. На шаге 4 по какой-то причине формулы, сохраненные во 2-й строке, увеличиваются на 1 для всех ячеек. Например: если A2 = 'Экспорт счета-фактуры'! C2, то каким-то образом он ошибочно изменяет формулу на следующую ссылку на ячейку, так как A2 = 'Экспорт счета-фактуры'! D2 и все остальные ячейки также.
Я пытался многократно анализировать точки останова и все такое, но не мог понять, почему это происходит! Пожалуйста, помогите!
Sub InvoiceProcessor()
'Variables and objects
Dim InvoiceImportFile As Variant
Dim wsDestination As Worksheet
Dim lastCell As Long
Dim rng As Range
Dim InvoiceImportRng As Range
Dim FileName As String
Dim FilePath As String
Dim startrow As Long
'Optimize Code sub
Call OptimizeCode_Begin
'----------------------- Importing the Invoice Export file-----------------------------
'Open the invoice export file
InvoiceImportFile = Application.GetOpenFilename("Text Files, *.txt*")
'Get the file path and name of the selected file
ary = Split(InvoiceImportFile, "\")
bry = Split(ary(UBound(ary)), ".")
ary(UBound(ary)) = ""
FilePath = Join(ary, "\")
FileName = bry(0) & "_Processed_" & Format(Date, "dd-mm-yy")
'Check if any file was selected
If InvoiceImportFile = False Then
MsgBox "No file imported, try again!", vbExclamation, "Invoice Processor"
Exit Sub
End If
Set wsDestination = ActiveWorkbook.Sheets(3)
' ------------ Clear the sheet contents ---------------------------
'Clear the contents from all sheets before data processing
Sheets("Invoice Export").UsedRange.ClearContents
If Sheets("Recalculated Data").FilterMode Then
Sheets("Recalculated Data").ShowAllData
End If
Sheets("Recalculated Data").Range("A3:AA10000").ClearContents
Sheets("Final Data").UsedRange.ClearContents
'Copy the contents from
'Application.ScreenUpdating = False
On Error Resume Next
'On Error GoTo ErrorHandler
' ----------- Invoice Export file ----------------------------
With Workbooks.Open(InvoiceImportFile)
.Sheets(1).UsedRange.Copy wsDestination.Range("A1")
Columns("A:AC").Select
Selection.EntireColumn.AutoFit
.Close False
End With
'Counting Invoice Export file rows
lRowCount_InvoiceExport = Worksheets("Invoice Export").UsedRange.Rows.Count
'MsgBox (lRowCount_InvoiceExport)
'Doing IF COUNTIF function
Sheets("Invoice Export").Activate
Columns("B:B").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B1").Select
ActiveCell.FormulaR1C1 = "Found?"
Range("B2").Select
Selection.FormulaR1C1 = _
"=IF(COUNTIF('ID Data'!C[2],'Invoice Export'!RC[-1])>0, ""Y"", ""N"")"
Selection.AutoFill Destination:=Range("B2:B" & lRowCount_InvoiceExport)
Range(Selection, Selection.End(xlDown)).Select
'Filtering and deleting the unmatched records
Range("A2:" & "AD" & lRowCount_InvoiceExport).Select
ActiveSheet.Range("A1:AD" & lRowCount_InvoiceExport).AutoFilter Field:=2, Criteria1:="N"
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
Sheets("Invoice Export").ShowAllData
'---------------------------------- Recalculated Data Sheet ----------------------------------
lRowCount_InvoiceExportPost = Worksheets("Invoice Export").UsedRange.Rows.Count
'<<<<<<<<<<<<<<<<<<<<< PROBLEM IS HERE >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'Application.ScreenUpdating = False
Sheets("Recalculated Data").Select
Range("A2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range("A2:" & "AA" & lRowCount_InvoiceExportPost).Select
Selection.FillDown
Columns("A:AA").Select
Selection.EntireColumn.AutoFit
End Sub