VBA для копирования данных из одной рабочей книги в другую рабочую книгу / рабочий лист не работает - PullRequest
0 голосов
/ 31 октября 2018

У меня много проблем с кодом в шаблоне Excel. Код шаблона не был написан мной, но я использую его для автоматизации отчета для моей команды.

Позвольте мне предвосхитить мою проблему с тем, как я получаю данные в шаблон: первые шаги, которые происходят, - это Access, который выполняет пару запросов и передает данные на листы в шаблоне Excel, и открывает шаблон. Открытие триггеров запускает макрос для запуска форматирования, вычислений и Vlookups. Все работает хорошо, пока я не дохожу до той части, где я копирую данные из одной рабочей книги в рабочую таблицу в другой рабочей книге. Я исследовал здесь, чтобы увидеть, смогу ли я найти ответ, но я довольно потерян (я новичок в кодировании VBA).

Вот код (WB Отрицательного тренда открывается до того, как я попал сюда)

'Copy top ten Data to paste into Negative Trend 2017
    Worksheets("Qry_Total").Range("A2:L11").Copy
'PasteSpecial Values Only
  'Worksheets("Sheet2").Range("A2").PasteSpecial Paste:=xlPasteValues

    Workbooks("Negative Trend 2017.xls").Activate
    Worksheets("Top Ten").Activate


'Finds the last non-blank cell (in Negative Trend column B)and paste top ten data
    Dim LastRow As String

    LastRow = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row + 1
    Range("B" & LastRow).Select
    Selection.PasteSpecial

'Deselect coppied cells
    Application.CutCopyMode = False

    Workbooks("Negative Report Macro Template").Activate
'Disable marching ants around copied range
    Application.CutCopyMode = False

'Rename Tabs
    Sheets("Qry_Summary").Name = "Summary"
    Sheets("Qry_Total").Name = "Detail"

Код ломается здесь Worksheets("Top Ten").Activate с

Run_time Ошибка «9».

скопированные данные из этой строки Worksheets("Qry_Total").Range("A2:L11").Copy здесь не вставляются Range("B" & LastRow).Select

Я что-то упустил.

Просто к вашему сведению, если я вручную сделаю все, начиная с передачи данных доступа в Excel WB и запуска вручную макроса «run report», все работает просто отлично. Я потерялся.

1 Ответ

0 голосов
/ 31 октября 2018

Я пытался сжать это для вас. Чтобы избежать специальной вставки, вы просто назначаете значения одного диапазона другому. Чтобы избежать выбора, вы просто применяете то, что использовали бы для выбора в полностью определенном диапазоне. Поскольку вы знаете свои границы, достаточно легко определить, какой диапазон должен быть на новом листе для размещения всех значений.

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

Dim TopTen As Worksheet
Dim NegTrend As Workbook

Set TopTen = Workbooks("Negative Trend 2017.xls").Worksheets("Top Ten")
Set NegTrend = Workbooks("Negative Trend 2017.xls")

LastRow = TopTen.Cells(Rows.Count, "B").End(xlUp).Row + 1

Переменная теперь является рабочим листом, и вы можете вызывать те же свойства, которые вы обычно вызываете с листом, например Range, Cells и т. Д., Но с меньшим набором текста и сохранением его полного определения.

Вот ваш код, сжатый и реализующий блоки with, о которых я упоминал выше.

Sub test()
    Dim LastRow As Long
    With Workbooks("Negative Trend 2017.xls").Worksheets("Top Ten")
        LastRow = .Cells(Rows.Count, "B").End(xlUp).Row + 1
        .Range("B" & LastRow & ":M" & LastRow + 9).Value = _
        Workbooks("Negative Report Macro Template").Worksheets("Qry_Total").Range("A2:L11").Value
    End With

    With Workbooks("Negative Report Macro Template")
        .Sheets("Qry_Summary").Name = "Summary"
        .Sheets("Qry_Total").Name = "Detail"
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...