Скопируйте несмежный диапазон из Excel в Word

У меня есть следующий код, и мне нужны только заданные диапазоны, но каждый раз, когда я использую свой макрос, диапазон от C28 до H28 также копируется и вставляется в файл слова.

Это код, который выбирает диапазоны:

Dim rangeSP As Range 
Set rangeSP = Sheets("Details").Range("C27:H27") 

Dim rangeSP2 As Range 
Set rangeSP2 = Sheets("Details").Range("C29:H30") 

Dim rangeSpecification As Range 

Set rangeSpecification = Union(rangeSP, rangeSP2) 

Здесь он копируется и вставляется в файл слова:

wordDoc.Application.Selection.Find.Execute "Where it will be put"

wordApp.Selection.MoveRight Unit:=wdCharacter, Count:=1

wordApp.Selection.TypeParagraph

rangeSpecification.Copy 

wordApp.Selection.PasteExcelTable False, True, False

Я хочу скопировать таблицы из Excel в файл Word. Итак, я попробовал это с Union Ranges, потому что между наборами данных есть строки, которые мне не нужны. Но когда я использую свой макрос, ненужные строки также копируются и вставляются в файл слова.

Либо ваш метод копирования/вставки данных не соответствует комбинированному диапазону, либо ваша программа ведет себя неправильно. Я попробовал ваш код, и у меня он сработал, как написано (я не переносил в Word, просто вставил на другой лист Excel).

Vince 17.07.2023 11:13

Вы спрашиваете A, но ваш код показывает B. Пожалуйста, предоставьте минимальный воспроизводимый пример вашей проблемы с достаточным количеством кода для воспроизведения проблемы.

Pᴇʜ 17.07.2023 11:16

Вы имеете в виду, что Range("C28:H28") также включен? Покажите, пожалуйста, хотя бы код копирования, пусть он выглядит логичным (для нас)...

FaneDuru 17.07.2023 11:26

Этот код выбирает диапазоны: Dim rangeSP As Range Set rangeSP = Sheets("Details").Range("C27:H27") Dim rangeSP2 As Range Set rangeSP2 = Sheets("Details").Range("C29:H30 ") Dim rangeSpecification As Range Set rangeSpecification = Union(rangeSP, rangeSP2) Здесь он копируется и вставляется в файл слова: wordDoc.Application.Selection.Find.Execute "" wordApp.Selection.MoveRight Unit:=wdCharacter, Count: =1 wordApp.Selection.TypeParagraph rangeSpecification.Copy wordApp.Selection.PasteExcelTable False, True, False

INeedHelpWithVbaPlease 17.07.2023 11:32

в "", я ищу место, куда его нужно вставить, но это прекрасно работает

INeedHelpWithVbaPlease 17.07.2023 11:34

Пожалуйста, не показывайте код в комментариях! Отредактируйте свой вопрос и покажите ТАМ красноречивый код...

FaneDuru 17.07.2023 11:37

О, моя ошибка, я поместил это в раздел «Ответ»

INeedHelpWithVbaPlease 17.07.2023 12:12

Оооооооо, все в вопросе теперь. нужно немного :)

INeedHelpWithVbaPlease 17.07.2023 13:35

Какие-либо объединенные ячейки в используемых диапазонах?

Darren Bartrup-Cook 17.07.2023 14:06

Я проверил, нет объединенных ячеек, которые используются

INeedHelpWithVbaPlease 17.07.2023 14:46

Да, просто проверял себя - вы получаете конкретное сообщение об ошибке, когда есть объединенные ячейки - «мы не можем сделать это с объединенной ячейкой» при попытке скопировать.

Darren Bartrup-Cook 17.07.2023 15:02

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

Tim Williams 17.07.2023 18:36
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
12
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Копирование и вставка нескольких диапазонов (несмежных) может быть сложной задачей. Вставка таких диапазонов в листы Excel будет происходить, как и ожидалось. Однако вставка между приложениями (Word или PowerPoint) будет включать пропущенные ячейки.

В вашей ситуации у вас есть два варианта:

  • Вставьте несколько диапазонов Excel в неиспользуемый диапазон на активном листе или на новом листе Excel. Затем скопируйте объединенный диапазон и вставьте в Word.
    rangeSpecification.Copy ActiveSheet.Range("AA1")
    Application.CutCopyMode = False
    Set rngData = ActiveSheet.Range("AA1").CurrentRegion
    rngData.Copy
    wordApp.Selection.PasteExcelTable False, True, False
    rngData.Clear
  • Использование кода VBA в Word для удаления ненужных промежуточных строк после вставки из Excel. (Предположим, что в документе Word есть только одна таблица.)
ThisDocument.Tables(1).Rows(2).Delete

Спасибо за информацию. Метод с вклейкой в ​​неиспользуемые ячейки отлично работает. Вы можете просто записать макрос во время вставки ячеек, а затем посмотреть код. Тогда вам просто нужно поставить остальные обратно и адаптировать его.

INeedHelpWithVbaPlease 18.07.2023 10:52

Другие вопросы по теме