Ошибка после Application.DisplayAlerts = False - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь скопировать указанные c ячейки из файла предыдущего дня и вставить их в то же место в моей текущей книге в виде текста.

Я хочу, чтобы это было сделано только в четверг.

Sub OpenFile()

If Weekday(Now()) = vbThursday Then

    FileYear = Year(Date)
    FileDate = Format(Date, "yymmdd")
    FilePath = "I:\Example\2020\" & Format(Now() - 1, "yymmdd") & " " & _
      "Sequentieanalyse werkblad.xlsm"

    Workbooks.Open (FilePath)

    Range("P48:Z57").Select
    Selection.Copy
    ActiveWorkbook.Close False

    Sheets("Monsterlijst").Select
    Range("P48:Z57").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False

End If

End Sub

Когда я запускаю свой код, я получаю сообщение, в котором содержится много информации в буфере обмена, и мне нужно выбрать «да», «нет» или «прервать», после чего следует ошибка 1004 времени выполнения с любым из параметров. .
Когда я использую Application.DisplayAlerts = False, я также получаю ошибку времени выполнения 1004.

При удалении ActiveWorkbook.Close False сообщений об ошибках нет, но моя информация будет вставлена ​​обратно в книгу, из которой я копирую из моей текущей рабочей книги.
Я также хочу, чтобы файл предыдущего дня был закрыт для предотвращения путаницы.

Копирование работает, потому что если я отменю сообщение об ошибке, я могу вставить его вручную.

Как мне адаптировать код для запуска в пятницу вместо четверга, если четверг является выходным днем?

1 Ответ

0 голосов
/ 16 января 2020

Ваш код крайне неэффективен. Пожалуйста, принимайте @GSerg комментарий близко к сердцу и читайте о том, как избежать использования select.

Проблема, с которой вы сталкиваетесь, в частности, заключается в том, что вы закрываете книгу перед тем, как вставить скопированные ячейки в любом месте, что приведет к вашей ошибке. Этого можно полностью избежать, переместив действие Paste над действием Close:

Option Explicit

Sub OpenFile()
Dim ref As Workbook
Dim filepath As String

If Weekday(Now()) = vbThursday Then

filepath = "I:\Example\2020\" & Format(Now() - 1, "yymmdd") & " " & "Sequentieanalyse werkblad.xlsm"

Set ref = Workbooks.Open(filepath)

Range("P48:Z57").Copy
ThisWorkbook.Sheets("Monsterlijst").Range("P48:Z57").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

ref.Close False
End If

End Sub

(код также оптимизирован, чтобы избежать использования select)

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