Скопируйте и вставьте после последнего выпуска VBA строки - PullRequest
0 голосов
/ 19 февраля 2020

У меня проблема с моим кодом. Это делает трюк копирования / вставки правильно. Тем не менее, я думаю, что есть что-то хитрое. Когда я пытаюсь обновить свою таблицу Dynami c, отображается сообщение о том, что в ББ, в котором я сейчас работаю, уже есть данные, и если я хочу их заменить. Когда я выбираю «Да / Нет», он немедленно отображает другой столбец в моей таблице, который говорит, что 81 registers are not been used in UTILITY. Когда я делаю все вручную, проблем нет. Итак, я думаю, что-то не так с моим макросом.

Option Explicit

Sub DailyTrans_MDM()

    Call CopyPaste
End Sub

Sub CopyPaste()

    Dim vFile As Variant
    Dim folderPath As String
    Dim wbCopyTo As Workbook
    Dim wsCopyTo As Worksheet
    Dim wbCopyFrom  As Workbook
    Dim wsCopyFrom As Worksheet

    vFile = Dir(folderPath & "*.xl*")
    Set wbCopyTo = ActiveWorkbook
    Set wsCopyTo = ActiveSheet
        Do While vFile <> ""        
            Application.ScreenUpdating = False    
            vFile = Application.GetOpenFilename("Daily Reports (*.xl*)," & "*.xl*", 1, "Select Report", "Open File", False)
            If TypeName(vFile) = "Boolean" Then
                Exit Sub
            Else
                Set wbCopyFrom = Workbooks.Open(vFile)
                Set wsCopyFrom = wbCopyFrom.Worksheets("ReporteCifrasControl")
            End If
    '--------------------------------------------------------------------------------------
            wsCopyFrom.Range("A2:M" & wsCopyFrom.Range("A" & Rows.Count).End(xlUp).row).Copy
            wsCopyTo.Range("A" & wsCopyTo.Range("A" & Rows.Count).End(xlUp).row + 1).PasteSpecial xlPasteValuesAndNumberFormats
            wbCopyFrom.Close SaveChanges:=False

            Dim rngCopy As Range, rngPaste As Range
                With ActiveSheet
                    Set rngCopy = .Range(.Range("A2"), Cells(2, Columns.Count).End(xlToLeft))
                    Set rngPaste = .Range(.Range("A2"), .Cells(Rows.Count, 1).End(xlUp)).Resize(, rngCopy.Columns.Count)
                End With
            rngCopy.Copy
            rngPaste.PasteSpecial xlPasteFormats
            Application.CutCopyMode = False
        Loop

End Sub


1 Ответ

1 голос
/ 19 февраля 2020

Полагаю, вы хотите это сделать

  • Скопировать строку 2 из Column A to Last Used Column (LC)
  • Вставить это в первую Non-Used Row (LR) в Column A

Dim LC As Long
Dim LR As Long

With ActiveSheet
    LC = .Cells(2, .Columns.Count).End(xlToLeft).Column
    LR = .Range("A" & .Rows.Count).End(xlUp).Row

    Set rngCopy = .Range(.Cells(1, 2), .Cells(LC, 2))
    Set rngPaste = .Range("A" & LR)
End With

rngCopy.Copy
rngPaste.PasteSpecial xlPasteFormats

Вы пропустили некоторые объекты, которые должны быть квалифицированы в вашем коде. Нет смысла использовать With Block, если вы не собираетесь использовать With Block


Просто понял, что в вашем коде есть несколько копий / вставок. Если это неправильный формат, используйте формат здесь, чтобы изменить другой.

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