Excel VBA: ошибочно перемещает ссылку на существующую формулу в следующую ячейку автоматически - PullRequest
0 голосов
/ 23 января 2020

Я работаю над сценарием VBA для Excel, чтобы выполнить следующие задачи:

  1. Импорт файла данных (лист 1)
  2. Импорт файла счета (лист 2)
  3. В файле счета-фактуры VLOOKUP с файлами данных, добавив столбец «Найдено» с флагом Y / N и удалив несовпадающие записи
  4. На другом листе «Пересчитанные данные» (Лист 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...