Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/75: Рейтинг темы: голосов - 75, средняя оценка - 4.93
7 / 7 / 5
Регистрация: 05.04.2012
Сообщений: 149
1
Excel

Запись данных в ячейку из другой книги

12.08.2019, 19:56. Показов 15254. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть файл VB.xlsm,в нём я создаю макрос,который должен брать данные из другого файла и записывать в ячейку VB.xlsm. Взять получается,но записать в ячейку фала VB.xlsm ну никак. Не понимаю,что не так.
Visual Basic
1
2
3
4
5
6
7
8
Sub MyProgramm()
Dim paste As Integer, copy As Integer
copy = Application.Workbooks.Open("C:\Users\user\Desktop\XLSX\1.xlsx").Worksheets("Лист1").Range("A1")
ActiveWorkbook.Close
paste = Worksheets("Лист1").Range("Q2").Value = copy
ActiveWorkbook.Save
 
End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2019, 19:56
Ответы с готовыми решениями:

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

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

Запись данных в ячейку TableView
Добрый день. Я только начинаю программировать под iOS, сейчас изучаю работу с таблицами и...

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

33
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
12.08.2019, 21:26 2
Лучший ответ Сообщение было отмечено Burnoutman как решение

Решение

Visual Basic
1
paste =
нужно убрать
1
35 / 30 / 6
Регистрация: 21.08.2015
Сообщений: 121
12.08.2019, 21:31 3
Привет!
Попробуйте:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub MyProgramm()
    Dim wb_Dest As Workbook
    Set wb_Dest = ActiveWorkbook
    
    Dim cell_Dest As Range
    Set cell_Dest = wb_Dest.Worksheets("Ëèñò1").Range("Q2")
 
    Dim wb_Sour As Workbook
    Set wb_Sour = Workbooks.Open("C:\Users\user\Desktop\XLSX\1.xlsx")
 
    wb_Sour.Worksheets("Ëèñò1").Range("A1").copy cell_Dest
 
    wb_Sour.Close
    wb_Dest.Save
End Sub
0
7 / 7 / 5
Регистрация: 05.04.2012
Сообщений: 149
12.08.2019, 22:39  [ТС] 4
Скажите,а как записать в ячейки данные,если в считываемых ячейках формат ячеек стоит разный?
Я пытаюсь взять диапазон
Visual Basic
1
copy = Application.Workbooks.Open("C:\Users\user\Desktop\XLSX\1.xls").Worksheets("Прил 1").Range("I24:N54")
I24 цифра,а некоторые вообще пустые и получаю ошибку: '13' Type mismatch
0
35 / 30 / 6
Регистрация: 21.08.2015
Сообщений: 121
12.08.2019, 23:03 5
Лучший ответ Сообщение было отмечено Burnoutman как решение

Решение

Цитата Сообщение от Burnoutman Посмотреть сообщение
формат ячеек стоит разный?
Visual Basic
1
copy As Variant
1
7 / 7 / 5
Регистрация: 05.04.2012
Сообщений: 149
13.08.2019, 10:54  [ТС] 6
Вопрос не по теме.
Кликните здесь для просмотра всего текста
Когда файл открывается,Excel спрашивает обновить ли связи,сохранить ли его,это жутко бесит,можно ли это отключить как-то?
Visual Basic
1
application.displayalerts=false
Это не подходит.
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
13.08.2019, 20:16 7
Burnoutman,, Используйте второй(необязательный) аргумент у Open, т.е.

Visual Basic
1
Workbooks.Open(FileName, 0)
1
7 / 7 / 5
Регистрация: 05.04.2012
Сообщений: 149
15.08.2019, 10:56  [ТС] 8
А можно ли как-то сложить диапазон из ячеек?
Для этого нужен цикл или есть какой-то простой способ типа SUM()? Диапазон большой и там не все переменные являются цифрами,а если указывать по одной ячейке,то это очень долго.
Суть задачи состоит в том,что есть 6 книг с таблицами,таблицы большие и люди там налепили и тире и цифры и просто пустые ячейки,но нужно все цифры сложить между этими 6 книгами. Никак не могу въехать, как такое реализовать.Может можно с помощью if как-то отыскивать нужные ячейки?
0
371 / 269 / 93
Регистрация: 18.11.2015
Сообщений: 997
15.08.2019, 11:03 9
Можно через массивы.
1
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
15.08.2019, 12:29 10
Burnoutman, Если в ячейках диапазона нет значений ошибок, то можете использовать что-то вроде этого (первый столбец для примера)

Visual Basic
1
r = application.sum([a:a])
Visual Basic
1
r = worksheetfunction.sum(columns(1))
0
7 / 7 / 5
Регистрация: 05.04.2012
Сообщений: 149
16.08.2019, 18:36  [ТС] 11
Я выбрал массивы,но теперь застрял в оформлении под стандарты vba
Ругается на Next without for
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub MyProgramm()
 
Dim massiv() As Integer, i As Integer
 
For Each fe In Application.Workbooks.Open("C:\Users\user\Desktop\XLSX\1.xls", 0).Worksheets("Лист 1").Range("I24:N24")
If Application.WorksheetFunction.IsNumber(fe) Then
For i = 1 To fe
massiv(i) = fe
Next i
Else: MsgBox ("Пустая ячейка")
Next fe
 
Worksheets("Лист1").Range("G6:L36").Value = massiv(i)
ThisWorkbook.Saved = True
ActiveWorkbook.Close
ActiveWorkbook.Save
 
End Sub
Кликните здесь для просмотра всего текста
Без фигурных скобок,тут просто ад какой-то творится.
0
371 / 269 / 93
Регистрация: 18.11.2015
Сообщений: 997
17.08.2019, 15:10 12
End if пропущен
1
7 / 7 / 5
Регистрация: 05.04.2012
Сообщений: 149
19.08.2019, 17:30  [ТС] 13
Опять застрял. Есть диапазон ячеек I24:N24 и я хочу вставить из этого диапазона в другой G6:L36 все данные по очереди проверяя,цифры там или нет. То есть,чтобы цифра из первой ячейки I24 вставилась в G6,а пока у меня получается,что каждая цифра вставляется во все ячейки. Диапазоны по количеству ячеек одинаковые.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub MyProgramm()
 
Dim massiv As Variant
 
massiv = Application.Workbooks.Open("C:\Users\user\Desktop\XLSX\1.xls", 0).Worksheets("Прил 1").Range("I24:N54")
 
For Each fe In massiv
    If Application.WorksheetFunction.IsNumber(fe) Then
    ThisWorkbook.Worksheets("Лист1").Range("G6:L36").Value = fe
    Else: ThisWorkbook.Worksheets("Лист1").Range("G6:L36").Value = 0
    End If
Next fe
ThisWorkbook.Saved = True
ActiveWorkbook.Close
 
End Sub
0
371 / 269 / 93
Регистрация: 18.11.2015
Сообщений: 997
19.08.2019, 17:53 14
По мне так, зря Вы здесь с массивами связались. Гораздо проще прописать проверку значения конкретной ячейки и по условию заполнить другую
0
7 / 7 / 5
Регистрация: 05.04.2012
Сообщений: 149
19.08.2019, 18:00  [ТС] 15
Цитата Сообщение от ArtNord Посмотреть сообщение
По мне так, зря Вы здесь с массивами связались. Гораздо проще прописать проверку значения конкретной ячейки и по условию заполнить другую
Я уже совсем запутался с этим vba. Вроде всё просто и кажется вот-вот и сделаешь,но постоянно упираюсь в какую-то мелочь. Я читал,что если переменной присвоить диапазон,то это уже получается двумерный массив. Как тогда обходится без массивов я не понимаю
Ячеек будет много,это пример только с небольшим количеством.А вообще у меня будет 6 таблиц по 30 ячеек в среднем. .
0
371 / 269 / 93
Регистрация: 18.11.2015
Сообщений: 997
19.08.2019, 18:19 16
Попробуйте так:
Visual Basic
1
2
3
4
For Each fe In massiv
    If Not IsNumber(fe) Then massiv(fe) = 0
Next fe
ThisWorkbook.Worksheets("Лист1").Range("G6:L36") =massive
Добавлено через 1 минуту
Сейчас под рукой excel нет, в браузере написал. Результат не гарантирую, но смысл такой, в массиве перебрать все значения и нечисловые заменить на нуль и затем после окончания цикла массивом заполнить Range
0
7 / 7 / 5
Регистрация: 05.04.2012
Сообщений: 149
19.08.2019, 18:35  [ТС] 17
Цитата Сообщение от ArtNord Посмотреть сообщение
Попробуйте так:
Visual BasicВыделить код
1
2
3
4
For Each fe In massiv
* * If Not IsNumber(fe) Then massiv(fe) = 0
Next fe
ThisWorkbook.Worksheets("Лист1").Range("G6:L36") =massive
Добавлено через 1 минуту
Сейчас под рукой excel нет, в браузере написал. Результат не гарантирую, но смысл такой, в массиве перебрать все значения и нечисловые заменить на нуль и затем после окончания цикла массивом заполнить Range
'9' Subscript out of range

при massiv(fe)=0
Visual Basic
1
2
3
4
For Each fe In massiv
    If Not Application.WorksheetFunction.IsNumber(fe) Then massiv(fe) = 0
Next fe
ThisWorkbook.Worksheets("Ëèñò1").Range("G6:L36") = massive
0
371 / 269 / 93
Регистрация: 18.11.2015
Сообщений: 997
19.08.2019, 18:54 18
А, ну да:
Visual Basic
1
2
3
4
5
6
7
a = 0
For Each fe In massiv
 
    If Not Application.WorksheetFunction.IsNumber(fe) Then massiv(a) = 0
a = a + 1
Next fe
ThisWorkbook.Worksheets("Лист1").Range("G6:L36") = massive
0
7 / 7 / 5
Регистрация: 05.04.2012
Сообщений: 149
19.08.2019, 22:01  [ТС] 19
Цитата Сообщение от ArtNord Посмотреть сообщение
А, ну да:
Ничего не изменилось.Ошибка та же.

Добавлено через 2 часа 20 минут
Я пример немного откорректировал и получил ошибку,что походу нельзя менять значения массива на ходу.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub MyProgramm()
 
Dim massiv As Variant, a As Integer
 
a = 0
massiv = Application.Workbooks.Open("C:\Users\user\Desktop\XLSX\1.xls", 0).Worksheets("Лист1").Range("I24:N54")
For Each fe In massiv
 
    If Not Application.WorksheetFunction.IsNumber(fe) Then massiv = 0
a = a + 1
Next fe
ThisWorkbook.Worksheets("Лист1").Range("G6:L36") = massiv
 
ThisWorkbook.Saved = True
ActiveWorkbook.Close
 
End Sub
Ошибка '10'
This array is fixed or temporarily locked.
0
371 / 269 / 93
Регистрация: 18.11.2015
Сообщений: 997
20.08.2019, 09:38 20
Burnoutman,
Так получилось:


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub MyProgramm2()
Dim massiv(), massiv2() As Variant
massiv = Worksheets("Лист1").Range("B2:G10").Value
AlRow = UBound(massiv) - LBound(massiv) + 1
AlCol = UBound(massiv, 2) - LBound(massiv, 2) + 1
 ReDim massiv2(AlRow, AlCol)
 
For a = 1 To AlRow
    For b = 1 To AlCol
    fe = massiv(a, b)
    If Not Application.WorksheetFunction.IsNumber(fe) Then massiv2(a, b) = 0 Else massiv2(a, b) = fe
    Next b
Next a
 
 
Range("I2:N10") = massiv2
End Sub
Добавлено через 1 минуту
Через заполнение второго массива
1
20.08.2019, 09:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2019, 09:38
Помогаю со студенческими работами здесь

Запись данных в Excel в первую свободную ячейку
Прошу помощи!!! Я новичек, поэтому сильно не ругайте и не переводите тему типа "вон там посмотри"....

Запись данных из нескольких инпутов в одну ячейку бд
Здравствуйте. Так как на этому языку я учусь совсем недавно, у меня возникла проблема. Есть код...

Запись всех данных из DataGridView1 в ячейку DataGridView2
Подскажите пожалуйста как записать все данные из DataGridView1 в ячейку DataGridView2?

Запрос данных из другой книги
есть небольшой модуль но действующий на одном листе полностью, Private Sub...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru