Excel VBA вставляет специальный непересекающийся диапазон от одной книги к другой

это мой первый пост для переполнения стека, который уже мне очень помог – надеюсь, на этот раз тоже. Я абсолютно застрял на макросе макросов копирования. Я пытаюсь пропустить все файлы xlsx в определенной папке, открывать их один за другим и всегда копировать одно и то же содержимое ячейки. Эти 4 значения должны быть вставлены в оригинальную книгу, из которой выполняется макрос, но транспонированный.

Из того, что я понял, мне нужно использовать команды .copy .pastespecial, потому что я хочу транспонировать и поэтому не могу работать с диапазонами. Я также понял, что вставка должна произойти до закрытия книги, потому что иначе буфер обмена будет опустошен после закрытия файла.

Макрос корректно перебирает все файлы (открывать и закрывать их в соответствующее время), а также корректно оценивает оператор if. Однако .Copy на самом деле ничего не копирует в буфер обмена, следовательно, ничего не вставлено. Однако у меня также нет сообщений об ошибках с кодом ниже.

Sub Copypaste() Dim i As Integer Dim path As String Dim fname As String Dim ws1 As Worksheet: Set ws1 = ActiveWorkbook.Worksheets("Sheet name") 'Define path of active excel workbook path = ActiveWorkbook.path 'Get list of all templates (xlsx) templates = GetFiles(path & "\Output", "*.xlsx") 'Loop through all templates On Error GoTo 0 For i = LBound(templates) To UBound(templates) 'First filename from list of all files in Output folder taken and opened fname = CStr(templates(i)) Workbooks.Open Filename:=path & "\Output\" & fname If ActiveWorkbook.Worksheets("Copy worksheet").Range("M40") <> 0 Or _ ActiveWorkbook.Worksheets("Copy worksheet").Range("M45") <> 0 Or _ ActiveWorkbook.Worksheets("Copy worksheet").Range("M73") <> 0 Then ActiveWorkbook.Worksheets("Copy worksheet").Range("F4", "M40", "M45", "M73").Copy ws1.Range("B5").PasteSpecial Paste:=xlPasteValues, Transpose:=True End If Workbooks(fname).Activate ActiveWorkbook.Close savechanges:=False Next i End Sub 

Из того, что я прочитал до сих пор, я могу только вставлять значения как непрерывный диапазон, не так ли? В идеальном случае я бы вставлял первые 3 значения ячейки в 3 смежные ячейки, а затем последнее значение (от «M73») в другую ячейку.

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

Большое спасибо!

Я не думаю, что вы можете копировать несвязанные диапазоны, которые не находятся в одной строке или столбце. Попробуйте скопировать диапазон F4,M40,M45,M73 в Excel, чтобы узнать, есть ли у вас ошибка. Я предполагаю, что он будет работать для M40,M45,M73 но не для F4,M40

Если вы копируете только эти 4 ячейки, вы можете сделать что-то вроде

 Set rngFrom = ActiveWorkbook.Worksheets("Copy worksheet").Range("F4,M40,M45,M73") Set rngTo = ActiveWorkbook.Worksheets("Sheet name").Range("B5:B8") For i = 1 To 4 rngTo(i).Value = rngFrom.Areas(i).Value ' rngTo(i) is short for rngTo.Cells(i, 1) Next 
Interesting Posts

Поиск события Excel перед BOOK OPEN или другим решением

Как назначить значение одной ячейке в именованном диапазоне с помощью xlwings?

Как обрабатывать более 255 символов в ячейке в Excel?

Как проверить конкретные данные одного кадра данных в каком-либо другом кадре данных с помощью R

Создание пользовательской надстройки Excel

Многократная группировка Excel в таблице для разных сводных таблиц?

Отображение листа Excel на веб-странице с использованием JSP / Servlets?

как я буду считать дубликаты, суммировать строки дубликатов и выводить эти данные в MS Excel?

Excel как интерфейс для доступа – лучший способ запуска запросов

EXCEL 2013: задайте имя переменной из значения ячеек

Первое появление нечеткой ячейки vba

Как изменить несколько комбинированных ячеек в excel

Импортируйте лист excel с помощью jet.oledb.4.0, установив первую строку как имя столбца

Как экспортировать datatable в excel в приложение c # windows

Как я могу проверить программно, если Microsoft.Office.Interop.Excel доступен для использования с VB?

Давайте будем гением компьютера.