Excel VBA Paste Link Loop - PullRequest
       5

Excel VBA Paste Link Loop

0 голосов
/ 12 января 2019

Я хочу переместить данные из нескольких листов в сводный лист. И я хочу переместить его между активным листом (который я выбираю вручную с помощью курсора мыши) и со второго на последний непрерывный лист. Приведенный ниже код прекрасно работает, но у меня есть 2 проблемы, когда код достигает строки вставки ссылки:

  1. Ссылки вставляются только тогда, когда я физически нажимаю на лист «Сводная информация 1819 года». Это проблема, поскольку сводная таблица заполняется данными из таблиц, которые я хочу исключить.

  2. Я использовал Excel 2010 на работе, чтобы собрать этот код, и он не дал мне никаких проблем (кроме проблемы, описанной выше). Однако когда я отправляю файл домой, используя Excel 2016, я получаю ошибки времени выполнения в случайных точках, так как код пытается перебрать строки вставки ссылок. Иногда ошибка гласит: «Нет ссылки для вставки» (даже если она есть), и это устраняется простым нажатием кнопки «Отладка», а затем продолжается, что позволяет коду работать нормально. Но в других случаях он читает «метод вставки класса листа не удался», и я не могу отладить это, и код не продолжает выполняться.

Sub WorkLoop ()

Dim i As Long
Dim DestRow As Long

For i = ActiveSheet.Index To Sheets.Count - 1

    DestRow = Sheets("Summary 1819 paper").Range("B" & Rows.Count).End(xlUp).Row + 1

    Sheets("Summary 1819 paper").Range("B" & DestRow).Value = Sheets(i).Range("C1")
    Sheets("Summary 1819 paper").Range("C" & DestRow).Value = Sheets(i).Range("E1")
    Sheets("Summary 1819 paper").Range("D" & DestRow).Value = Sheets(i).Range("A16")


    Sheets(i).Range("F128").Copy
    Sheets("Summary 1819 paper").Range("E" & DestRow).Select
    Sheets("Summary 1819 paper").Paste Link:=True

    Sheets(i).Range("L7").Copy
    Sheets("Summary 1819 paper").Range("F" & DestRow).Select
    Sheets("Summary 1819 paper").Paste Link:=True

    Sheets(i).Range("M7").Copy
    Sheets("Summary 1819 paper").Range("G" & DestRow).Select
    Sheets("Summary 1819 paper").Paste Link:=True

    Sheets(i).Range("F24").Copy
    Sheets("Summary 1819 paper").Range("L" & DestRow).Select
    Sheets("Summary 1819 paper").Paste Link:=True

    Next i

End Sub

Буду признателен за помощь в решении этих двух проблем и в понимании того, что я делаю неправильно.

1 Ответ

0 голосов
/ 12 января 2019

Дело в том, что ActiveSheet.index делает то, что говорит: он смотрит в сторону индекса активной таблицы. Ваш код работает: он проходит через все листы, вероятно, потому что ваш лист «итоговая статья 1819» является первым листом вашей рабочей книги. Вы хотите просмотреть все листы, кроме первого (вашего сводного листа) вашей рабочей книги? затем примените for i = 2 to sheets.Count вместо вашего текущего For i = ActiveSheet.Index To Sheets.Count - 1.

Для вашего второго выпуска. Шаг за шагом бегите по коду, используя F8. Посмотрите, где именно ошибки, и попробуйте решить это так. Не можете понять это? Добавьте «debug.print i», чтобы увидеть, на каком листе ошибка возникает в прямом окне. Вы также можете попробовать изменить ваш

Sheets(i).Range("F24").Copy
Sheets("Summary 1819 paper").Range("L" & DestRow).Select
Sheets("Summary 1819 paper").Paste Link:=True

до

Sheets("Summary 1819 paper").Range("L' & DestRow).Formula = "Sheet"&i&"!F24"

Обязательное непроверенное. С уважением,

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