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

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

10.02.2016, 16:28. Показов 2953. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2016, 16:28
Ответы с готовыми решениями:

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

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

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

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

__________________
17
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
10.02.2016, 16:36 2
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 3
Цитата Сообщение от 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  [ТС] 4
Цитата Сообщение от 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 5
fedoseevev,
Цитата Сообщение от fedoseevev Посмотреть сообщение
Если не назначать переменную...
в таком случае, ее тоже не мешало бы объявить как Long
1
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 11
11.02.2016, 12:02  [ТС] 6
А если тоже самое нужно вставлять не в соседний лист, а в файл хранящейся в облаке, такое вообще возможно?
0
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
11.02.2016, 12:12 7
Цитата Сообщение от fedoseevev Посмотреть сообщение
А если тоже самое нужно вставлять не в соседний лист, а в файл хранящейся в облаке
Смотря что Вы понимаете под облаком. Если это что-то вроде GoogleDrive или Dropbox, которые держат локальные копии документов, то вполне возможно
0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 11
11.02.2016, 12:43  [ТС] 8
Цитата Сообщение от RoyDenzel Посмотреть сообщение
Смотря что Вы понимаете под облаком. Если это что-то вроде GoogleDrive или Dropbox, которые держат локальные копии документов, то вполне возможно
А если это OneDrive Microsoftа? И как в таком случае прописать обращение к тому файлу?
0
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
11.02.2016, 12:47 9
Цитата Сообщение от fedoseevev Посмотреть сообщение
это OneDrive Microsoftа
Никогда с ним не сталкивался. По аналогии с гуглом работает? Или через web доступ к сохраненным файлам?
0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 11
11.02.2016, 12:49  [ТС] 10
Цитата Сообщение от RoyDenzel Посмотреть сообщение
Никогда с ним не сталкивался. По аналогии с гуглом работает? Или через web доступ к сохраненным файлам?
Если честно, не знаю
Ну допустим GoogleDrive, не поможете с кодом обращения к этому файлу?
0
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
11.02.2016, 13:23 11
Лучший ответ Сообщение было отмечено 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\dropbox\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  [ТС] 12
Цитата Сообщение от 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\database\МБ База.xlsm")

Я прописал свой адрес к файлу, но он говорит не находит его...
Я на 200% уверен, что адрес прописал правильно, и я вижу его в этой папке
Тоже самое попробовал сделать с Google Диск, результат такой же
Если прописывать ссылку https на файл, он пытается его открыть и насколько я понимаю упирается в вод логина и пароля, при попытке открыть этот файл по ссылке.
0
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
12.02.2016, 08:44 13
Цитата Сообщение от fedoseevev Посмотреть сообщение
Я на 200% уверен, что адрес прописал правильно, и я вижу его в этой папке
Эта строка работает во всех офисах, если файл существует. Уберите строку ScreenUpdating = false, возможно файл открывается и висит процессах, а Вы его просто не видите.
0
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 11
12.02.2016, 09:34  [ТС] 14
Цитата Сообщение от 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  [ТС] 15
Цитата Сообщение от RoyDenzel Посмотреть сообщение
Эта строка работает во всех офисах, если файл существует. Уберите строку ScreenUpdating = false, возможно файл открывается и висит процессах, а Вы его просто не видите.
С горем пополам, я справился)
Все срабатывает как надо, только всегда выдает вопрос заменить существующий файл. При этом отрабатывает как надо, открывается старый файл ищется последняя пустая строка в нее записывается и сохраняется, но зачем он задает вопрос о замене имеющегося файла я понять никак не могу.
Как можно убрать этот лишний вопрос?
0
Заблокирован
14.02.2016, 20:41 16
Почитайте про DisplayAlerts.
Если не помогает -
удалить лишний файл - KILL
проверить его существование - DIR.
1
6822 / 2764 / 520
Регистрация: 19.10.2012
Сообщений: 8,432
14.02.2016, 21:45 17
Ещё есть тонкость - когда определяете последнюю строку с помощью Rows.Count, нужно указывать из какого именно файла будет брать это число, особенно когда "в деле" участвуют несколько файлов, возможно разных версий.
1
31 / 27 / 11
Регистрация: 15.07.2015
Сообщений: 85
15.02.2016, 08:44 18
Цитата Сообщение от fedoseevev Посмотреть сообщение
Как можно убрать этот лишний вопрос?
Я уже ответил на Ваш вопрос выше.
Используйте строку
Visual Basic
1
shMB.Close 1 'закрываем книгу, сохраняя изменения
В этом случае, если Вы работаете с тем же файлом, который раньше открывали, он закроется, сохранив все изменения.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.02.2016, 08:44

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Копирование диапазона ячеек из одного листа в другой
Подскажите не помогу понять как скопировать в определенное место диапазон ячеек по условию например...

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

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.