Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 11

Копирование некоторых ячеек с одного листа в первую пустую строку на другом листе

10.02.2016, 16:28. Показов 5484. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
У меня такая задача, есть лист Anketa и лист MB.
Лист Anketa это анкета для заполнения, состоит из множества заполняемых ячеек
Лист MB - база данных, в которую в строку сохраняются данные из первого листа по нажатию кнопки "Выгрузить". При этом данные должны сохраняться в первую пустую строку. Лист МВ не должен открываться. Каждое нажатие на кнопку выгрузить создает новую строчку, ну если конечно Анкета заполнена.
По хорошему MB должна быть отдельная книга хранящаяся как минимум в облаке, но это следующий этап
Так вот второй день только как изучаю VBA и то по конкретным примерам на форуме)
Проблема следующая, как это сделать??
Начал писать, что то вроде этого для 2х ячеек, но он не хочет меня понимать...
Visual Basic
1
2
3
4
5
6
7
Private Sub CommandButton2_Click()
Dim iLastRow As Long
iLastRow = Sheets("MD").Cells(Rows.Count, 3).End(xlUp).Row
x = iLastRow + 1
Sheets("Anketa").Cells(6, 5) = Sheets("MD").Cells(x, 4)
Sheets("Anketa").Cells(6, 17) = Sheets("MD").Cells(x, 5)
End Sub
Помогите, пожалуйста, мне хотя бы логику понять как это делать!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.02.2016, 16:28
Ответы с готовыми решениями:

Макрос, копирование ячеек в пустую строку на другом листе
доброго времени суток, господа! на листе 1 имеются ячейки для заполнения(анкета). требуется при нажатии кнопки, чтобы данные из этих ячеек...

Копирование данных с одного листа в таблицу на другом листе
Напишите пожалуйста код, как все данные из Лист2 колонки B9 скопировать на другой лист1 в умную таблицу, не могу разобраться, с моими...

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

17
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
10.02.2016, 16:36
fedoseevev,

Попробуйте:

Visual Basic
1
2
3
4
5
6
7
Private Sub CommandButton2_Click()
Dim iLastRow As Long
iLastRow = WorkSheets("MD").Cells(Rows.Count, 3).End(xlUp).Row 'определяете последнюю пустую строку
'x = iLastRow + 1 'строка и переменная не нужна
WorkSheets("MD").Cells(iLastRow + 1, 4).Value = WorkSheets("Anketa").Cells(6, 5).Value 'насколько я понял, нужно записать на лист MB в первую пустую строку
WorkSheets("MD").Cells(iLastRow + 1, 5).Value = WorkSheets("Anketa").Cells(6, 17).Value
End Sub
1
Заблокирован
10.02.2016, 16:38
Цитата Сообщение от fedoseevev Посмотреть сообщение
Sheets("Anketa").Cells(6, 5) = Sheets("MD").Cells(x, 4)
М.б. местами переставить надо?
Visual Basic
1
Sheets("MD").Cells(x, 4)=Sheets("Anketa").Cells(6, 5)
1
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 11
10.02.2016, 17:01  [ТС]
Цитата Сообщение от RoyDenzel Посмотреть сообщение
fedoseevev,

Попробуйте:

Visual Basic
1
2
3
4
5
6
7
Private Sub CommandButton2_Click()
Dim iLastRow As Long
iLastRow = WorkSheets("MD").Cells(Rows.Count, 3).End(xlUp).Row 'определяете последнюю пустую строку
'x = iLastRow + 1 'строка и переменная не нужна
WorkSheets("MD").Cells(iLastRow + 1, 4).Value = WorkSheets("Anketa").Cells(6, 5).Value 'насколько я понял, нужно записать на лист MB в первую пустую строку
WorkSheets("MD").Cells(iLastRow + 1, 5).Value = WorkSheets("Anketa").Cells(6, 17).Value
End Sub
Если не назначать переменную то, если вдруг в анкете будет пропущена какая то ячейка, то в МВ останется также пустая ячейка. И при следующей записи при заполнении этой ячейки на МВ будет записываться не в нужную строку (на строчку выше)
Поэтому я хотел определить номер пустой строки, присвоить ей переменную и по этой переменной вставлять данные.

Добавлено через 1 минуту
Цитата Сообщение от Shersh Посмотреть сообщение
М.б. местами переставить надо?
Visual Basic
1
Sheets("MD").Cells(x, 4)=Sheets("Anketa").Cells(6, 5)
Спасибо! Оказывается знак "=" работает в другую сторону))
0
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
10.02.2016, 17:02
fedoseevev,
Цитата Сообщение от fedoseevev Посмотреть сообщение
Если не назначать переменную...
в таком случае, ее тоже не мешало бы объявить как Long
1
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 11
11.02.2016, 12:02  [ТС]
А если тоже самое нужно вставлять не в соседний лист, а в файл хранящейся в облаке, такое вообще возможно?
0
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
11.02.2016, 12:12
Цитата Сообщение от fedoseevev Посмотреть сообщение
А если тоже самое нужно вставлять не в соседний лист, а в файл хранящейся в облаке
Смотря что Вы понимаете под облаком. Если это что-то вроде GoogleDrive или Dropbox, которые держат локальные копии документов, то вполне возможно
0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 11
11.02.2016, 12:43  [ТС]
Цитата Сообщение от RoyDenzel Посмотреть сообщение
Смотря что Вы понимаете под облаком. Если это что-то вроде GoogleDrive или Dropbox, которые держат локальные копии документов, то вполне возможно
А если это OneDrive Microsoftа? И как в таком случае прописать обращение к тому файлу?
0
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
11.02.2016, 12:47
Цитата Сообщение от fedoseevev Посмотреть сообщение
это OneDrive Microsoftа
Никогда с ним не сталкивался. По аналогии с гуглом работает? Или через web доступ к сохраненным файлам?
0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 11
11.02.2016, 12:49  [ТС]
Цитата Сообщение от RoyDenzel Посмотреть сообщение
Никогда с ним не сталкивался. По аналогии с гуглом работает? Или через web доступ к сохраненным файлам?
Если честно, не знаю
Ну допустим GoogleDrive, не поможете с кодом обращения к этому файлу?
0
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
11.02.2016, 13:23
Лучший ответ Сообщение было отмечено fedoseevev как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub threadVBA()
    Dim shAnketa As Worksheet 'переменная для листа анкеты
    Dim shMB As Worksheet 'переменная для листа БД
    
    Application.ScreenUpdating = False 'отключаем обновление экрана, для ускорения работы
    Set shAnketa = ActiveSheet 'допустим, что мы запускаем макрос, когда у нас открыт лист анкеты.
    Workbooks.Open ("C:\Users\pupkin\Documents\dropbox\database\МБ База.xlsm") 'путь к файлу из dropbox
    Set shMB = Workbooks("МБ База.xlsm").Worksheets("Лист1") 'запоминаем лист в переменную
    shMB.Range("A1").Value = shAnketa.Range("B1").Value 'перенос данных ничем не отличается, можно как и в предыдущем примере делать, только вместо sheet, указывать переменную листа
    shMB.SaveAs("C:\Users\pupkin\Documents\dropbox\database\МБ База.xlsm") 'сохраняем БД
    Application.ScreenUpdating = True 'включаем обновление экрана
End Sub
Добавлено через 10 минут
Цитата Сообщение от RoyDenzel Посмотреть сообщение
shMB.SaveAs("C:\Users\pupkin\Documents\d ropbox\database\МБ База.xlsm") 'сохраняем БД
вместо строки
Visual Basic
1
shMB.SaveAs("C:\Users\pupkin\Documents\dropbox\database\МБ База.xlsm") 'сохраняем БД
строка
Visual Basic
1
shMB.Close 1 'закрываем книгу, сохраняя изменения
1
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 11
11.02.2016, 22:34  [ТС]
Цитата Сообщение от RoyDenzel Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub threadVBA()
    Dim shAnketa As Worksheet 'переменная для листа анкеты
    Dim shMB As Worksheet 'переменная для листа БД
    
    Application.ScreenUpdating = False 'отключаем обновление экрана, для ускорения работы
    Set shAnketa = ActiveSheet 'допустим, что мы запускаем макрос, когда у нас открыт лист анкеты.
    Workbooks.Open ("C:\Users\pupkin\Documents\dropbox\database\МБ База.xlsm") 'путь к файлу из dropbox
    Set shMB = Workbooks("МБ База.xlsm").Worksheets("Лист1") 'запоминаем лист в переменную
    shMB.Range("A1").Value = shAnketa.Range("B1").Value 'перенос данных ничем не отличается, можно как и в предыдущем примере делать, только вместо sheet, указывать переменную листа
    shMB.SaveAs("C:\Users\pupkin\Documents\dropbox\database\МБ База.xlsm") 'сохраняем БД
    Application.ScreenUpdating = True 'включаем обновление экрана
End Sub
Добавлено через 10 минут


вместо строки
Visual Basic
1
shMB.SaveAs("C:\Users\pupkin\Documents\dropbox\database\МБ База.xlsm") 'сохраняем БД
строка
Visual Basic
1
shMB.Close 1 'закрываем книгу, сохраняя изменения
Спасибо огромное! Вечером из дома попробую сделать и расскажу о результатах

Добавлено через 7 часов 43 минуты
Workbooks.Open ("C:\Users\pupkin\Documents\dropbox\data base\МБ База.xlsm")

Я прописал свой адрес к файлу, но он говорит не находит его...
Я на 200% уверен, что адрес прописал правильно, и я вижу его в этой папке
Тоже самое попробовал сделать с Google Диск, результат такой же
Если прописывать ссылку https на файл, он пытается его открыть и насколько я понимаю упирается в вод логина и пароля, при попытке открыть этот файл по ссылке.
0
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
12.02.2016, 08:44
Цитата Сообщение от fedoseevev Посмотреть сообщение
Я на 200% уверен, что адрес прописал правильно, и я вижу его в этой папке
Эта строка работает во всех офисах, если файл существует. Уберите строку ScreenUpdating = false, возможно файл открывается и висит процессах, а Вы его просто не видите.
0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 11
12.02.2016, 09:34  [ТС]
Цитата Сообщение от RoyDenzel Посмотреть сообщение
Эта строка работает во всех офисах, если файл существует. Уберите строку ScreenUpdating = false, возможно файл открывается и висит процессах, а Вы его просто не видите.
Он ошибку сразу выдает, что файл не найден с таким то адресом
Руками перехожу по этому адресу, файл есть.. В этом то и странность, моих знаний не хватает это понять
"C:\Users\Евгений\Documents\dropbox\***. xlsm"
У меня он лежит без доп.папок, и присутствует и кириллица и латиница в адресе, может с этим что-то связано...

Добавлено через 5 минут
Цитата Сообщение от RoyDenzel Посмотреть сообщение
Эта строка работает во всех офисах, если файл существует. Уберите строку ScreenUpdating = false, возможно файл открывается и висит процессах, а Вы его просто не видите.
А вот если прописывать ссылку https, то он его открывает абсолютно пустым с ошибкой через Google disk или заполненым каким то очень большим, кривым и непонятным текстом в один столбец, в теле которого попадаются логотипы dropbox и поля для ввода логина и пароля, а все остальное наполовину латиницей, на половину символами левыми, в случае если https на dropbox
0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 11
14.02.2016, 20:21  [ТС]
Цитата Сообщение от RoyDenzel Посмотреть сообщение
Эта строка работает во всех офисах, если файл существует. Уберите строку ScreenUpdating = false, возможно файл открывается и висит процессах, а Вы его просто не видите.
С горем пополам, я справился)
Все срабатывает как надо, только всегда выдает вопрос заменить существующий файл. При этом отрабатывает как надо, открывается старый файл ищется последняя пустая строка в нее записывается и сохраняется, но зачем он задает вопрос о замене имеющегося файла я понять никак не могу.
Как можно убрать этот лишний вопрос?
0
Заблокирован
14.02.2016, 20:41
Почитайте про DisplayAlerts.
Если не помогает -
удалить лишний файл - KILL
проверить его существование - DIR.
1
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
14.02.2016, 21:45
Ещё есть тонкость - когда определяете последнюю строку с помощью Rows.Count, нужно указывать из какого именно файла будет брать это число, особенно когда "в деле" участвуют несколько файлов, возможно разных версий.
1
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
15.02.2016, 08:44
Цитата Сообщение от fedoseevev Посмотреть сообщение
Как можно убрать этот лишний вопрос?
Я уже ответил на Ваш вопрос выше.
Используйте строку
Visual Basic
1
shMB.Close 1 'закрываем книгу, сохраняя изменения
В этом случае, если Вы работаете с тем же файлом, который раньше открывали, он закроется, сохранив все изменения.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2016, 08:44
Помогаю со студенческими работами здесь

Выбор построенного графика с одного листа, в соответствии со значением ячейки на другом листе
Добрый день товарищи. Хотелось бы у вас узнать, сможете ли вы подсказать мне, правильный макрос или же в екселе есть такая функция. Опишу...

Копирование диапазона ячеек из одного листа в другой
Подскажите не помогу понять как скопировать в определенное место диапазон ячеек по условию например - с Листа 1 столбец А с 6 строки по...

Копирование ячеек с одного листа на другой по условию
Добрый день! Суть задачи: есть 2 листа по 3 столбца (A,B,C). Нужно скопировать содержимое со 2 листа из столбцов A и B, в ячейки D...

Копирование ячеек столбца одного листа и переноса на другой лист
Доброго времени суток всем вам, уважаемые форумчане. В виду рабочей необходимости, я начал изучать программирование на VBA. Однако на...

Копирование данных из разных ячеек одного листа на другой лист
Ребят, доброго всем вечера. Требуется помощь. VBA в рамках предмета под названием "информатика", изучал лет 10 назад, на первом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru