2015-01-11 3 views
0

Я видел много похожих вопросов на этом сайте, но не у них есть ответ. Не знаю, почему. Наверное, это слишком просто, чтобы беспокоиться. Не для меня. Я не очень хорошо разбираюсь в VBA и, вероятно, вам не придется выбирать его еще несколько лет. Надеюсь, кто-то будет добрым проводить время и помогать.Скопируйте определенные ячейки из одной строки и вставьте их в разные ячейки на другом листе

У меня есть два листа в книге. Sht1 содержит данные, упорядоченные по строкам. Строки, заполненные ежедневно, общее количество строк будет составлять от 300 до 400 к концу проекта. Sht2 представляет собой форму документа. Большинство ячеек в этой форме содержат статическую информацию, которая не изменяется от одного отчета к другому. За исключением некоторых динамических ячеек, которые должны быть заполнены из Sht1. Я печатаю форму и печатаю печатную копию. Я могу вернуться и распечатать несколько отчетов еще раз, если печатные копии пропали без вести или данные по какой-то причине изменились. Дело совершенно ясное - я не хочу хранить и управлять 400 файлами Word. Это просто больно.

Что мне нужно - это присвоить код командной кнопке, которая вызовет окно ввода. Я ввожу идентификатор строки (я думаю, строки должны быть пронумерованы соответственно от 1 до N). Затем VBA берет данные из некоторых ячеек этой строки, скажем, C5 (когда ID = 4), E5 и H5 на Sht1 и копирует их в ячейки B5, D5 и D7 на Sht2.

Большое спасибо за ваше время, читая это и даже больше, если вы можете помочь. Спасибо.

+0

Для справки в будущем попробуйте записать макрос, используя «Просмотр»> «Макросы»> «Запись макроса». Затем разместите свой код, чтобы люди могли вам помочь. Я могу пообещать, что вы получите результаты быстрее и от более широкого круга пользователей на сайте. Решение, предоставляемое @stifin, довольно близко и, безусловно, обеспечивает основу для того, что вы пытаетесь сделать. – peege

ответ

1

Вот какой очень простой код для копирования данных из одной ячейки на Sheet1 в другую ячейку на Sheet2.

Sub Macro1() 

    Dim iRow As Integer 

    iRow = InputBox("Which row?") 

    Worksheets("Sht2").Cells(5, 2).Value = Worksheets("Sht1").Cells(iRow, 3).Value 
    Worksheets("Sht2").Cells(5, 4).Value = Worksheets("Sht1").Cells(iRow, 5).Value 
    Worksheets("Sht2").Cells(7, 4).Value = Worksheets("Sht1").Cells(iRow, 7).Value 

End Sub 

Это принимает значения из строки, указанной на Лист1, столбцы C, E, и H. Он копирует эти значения на Sheet2, клетки В5, D5, D7, соответственно. Обратите внимание на порядок аргументов Cells(row, col), который находится напротив ссылок на ячейки Excel, к которым вы привыкли. Другими словами, помните, что Cells(1, 3) фактически является C1.

Это примерно так же просто, как я могу это сделать, но он должен установить вас в правильном направлении.

+0

Это, безусловно, хорошая отправная точка. Не знаете, почему вы решили использовать значения, отличные от тех, которые он запросил. Я предлагаю вам пересмотреть это, чтобы соответствовать требованиям OP. Тогда это должно быть идеально для того, что требовалось. «C5, E5 и H5 на Sht1 и копирует их в ячейки B5, D5 и D7 на Sht2». – peege

+1

Основная причина в том, что я заметил конкретные ссылки на ячейки после того, как я уже отправил свой ответ. Я видел, что он использовал их только в качестве примеров, в то время как я приводил свои собственные примеры ссылок и объяснение, я думал, что мой ответ затрагивает требования OP. Сказав это, я обновил свой ответ, как вы предложили. Теперь искатель может просто вставить и скопировать именно этот код и запустить его. – stifin

+0

Это имеет смысл. Сейчас на деньги – peege