Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Заменить данные SQL запросом - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Заменить данные SQL запросом
MikeVol Дата: Среда, 31.07.2024, 15:12 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 378
Репутация: 80 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Доброго времени суток. Столкнулся я с проблемой, а имено заменить данные на листе из другой книге. Есть код который вносит данные но он вносит в первую незаполненную строку, под самими имеющимися данными:

Вопрос: Как заменить данные на листе в книгу To Update.xlsx данными из активной книги (Question.xlsm)? Файлы прилагаю ниже к данной теме. Спасибо всем кто не прошёл мимо! Удачи.

P.S. Необходимо именно SQL запросом это сделать так как книга To Update.xlsx не должна быть открыта.
К сообщению приложен файл: question_for_the_forum.zip (29.2 Kb)


Ученик.
Одесса - Украина


Сообщение отредактировал MikeVol - Среда, 31.07.2024, 15:21
 
Ответить
СообщениеДоброго времени суток. Столкнулся я с проблемой, а имено заменить данные на листе из другой книге. Есть код который вносит данные но он вносит в первую незаполненную строку, под самими имеющимися данными:

Вопрос: Как заменить данные на листе в книгу To Update.xlsx данными из активной книги (Question.xlsm)? Файлы прилагаю ниже к данной теме. Спасибо всем кто не прошёл мимо! Удачи.

P.S. Необходимо именно SQL запросом это сделать так как книга To Update.xlsx не должна быть открыта.

Автор - MikeVol
Дата добавления - 31.07.2024 в 15:12
Pelena Дата: Среда, 31.07.2024, 18:50 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4554 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
Количество строк в обоих файлах одинаковое, как в примере?
Если да, то достаточно немного изменить эту часть кода
[vba]
Код
    ' Обход каждой строки диапазона данных
    rs.MoveFirst
    For i = 1 To rng.Rows.Count
        
        ' Считывание данных из строки
        rowData = rng.Rows(i).Value

        ' Пример кода для добавления данных в Recordset
        'rs.AddNew

        For j = 1 To UBound(rowData, 2)
            rs.Fields(j - 1).Value = rowData(1, j)
        Next j

        rs.Update
        rs.MoveNext
    Next i
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Количество строк в обоих файлах одинаковое, как в примере?
Если да, то достаточно немного изменить эту часть кода
[vba]
Код
    ' Обход каждой строки диапазона данных
    rs.MoveFirst
    For i = 1 To rng.Rows.Count
        
        ' Считывание данных из строки
        rowData = rng.Rows(i).Value

        ' Пример кода для добавления данных в Recordset
        'rs.AddNew

        For j = 1 To UBound(rowData, 2)
            rs.Fields(j - 1).Value = rowData(1, j)
        Next j

        rs.Update
        rs.MoveNext
    Next i
[/vba]

Автор - Pelena
Дата добавления - 31.07.2024 в 18:50
MikeVol Дата: Среда, 31.07.2024, 20:23 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 378
Репутация: 80 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Спасибо Pelena! В данном случае количество строк одинаковы.
Pelena, позвольте ещё спросить вас. А если количество строк будет разное? Допустим в файле Question.xlsm добавится одна или несколько строк. Тогда будет ошибка: Ошибка 3021: BOF или EOF имеет значение True, либо текущая запись удалена. Для выполняемой операции требуется текущая запись.
Можете показать как будет выглядить данный блок кода? Спасибо! И извините Пожалуйста за наглость.


Ученик.
Одесса - Украина


Сообщение отредактировал MikeVol - Среда, 31.07.2024, 21:20
 
Ответить
СообщениеСпасибо Pelena! В данном случае количество строк одинаковы.
Pelena, позвольте ещё спросить вас. А если количество строк будет разное? Допустим в файле Question.xlsm добавится одна или несколько строк. Тогда будет ошибка: Ошибка 3021: BOF или EOF имеет значение True, либо текущая запись удалена. Для выполняемой операции требуется текущая запись.
Можете показать как будет выглядить данный блок кода? Спасибо! И извините Пожалуйста за наглость.

Автор - MikeVol
Дата добавления - 31.07.2024 в 20:23
Pelena Дата: Среда, 31.07.2024, 21:24 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4554 ±
Замечаний: ±

Excel 365 & Mac Excel
Я предвидела этот вопрос)
Тогда я бы сделала три цикла
[vba]
Код
    ' Обход каждой строки диапазона данных
    rs.MoveFirst
    i = 1
    
    'эта часть пока есть данные и в первом и втором файле, т.е. замена
    Do While Not rs.EOF And i <= rng.Rows.Count
        'For i = 1 To rng.Rows.Count

        ' Считывание данных из строки
        rowData = rng.Rows(i).Value

        ' Пример кода для добавления данных в Recordset
        'rs.AddNew

        For j = 1 To UBound(rowData, 2)
            rs.Fields(j - 1).Value = rowData(1, j)
        Next j

        rs.Update
        rs.MoveNext
        i = i + 1
    Loop
    
    'это если в источнике оказалось больше строк, их добавляем
    Do While i <= rng.Rows.Count
        rowData = rng.Rows(i).Value

        rs.AddNew

        For j = 1 To UBound(rowData, 2)
            rs.Fields(j - 1).Value = rowData(1, j)
        Next j

        rs.Update
        rs.MoveNext
        i = i + 1
    Loop
    
    'это если в приёмнике оказались лишние строки, их обнуляем
    Do While Not rs.EOF
        For j = 1 To UBound(rowData, 2)
            rs.Fields(j - 1) = Null
        Next j

        rs.Update
        rs.MoveNext
    Loop
[/vba]


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЯ предвидела этот вопрос)
Тогда я бы сделала три цикла
[vba]
Код
    ' Обход каждой строки диапазона данных
    rs.MoveFirst
    i = 1
    
    'эта часть пока есть данные и в первом и втором файле, т.е. замена
    Do While Not rs.EOF And i <= rng.Rows.Count
        'For i = 1 To rng.Rows.Count

        ' Считывание данных из строки
        rowData = rng.Rows(i).Value

        ' Пример кода для добавления данных в Recordset
        'rs.AddNew

        For j = 1 To UBound(rowData, 2)
            rs.Fields(j - 1).Value = rowData(1, j)
        Next j

        rs.Update
        rs.MoveNext
        i = i + 1
    Loop
    
    'это если в источнике оказалось больше строк, их добавляем
    Do While i <= rng.Rows.Count
        rowData = rng.Rows(i).Value

        rs.AddNew

        For j = 1 To UBound(rowData, 2)
            rs.Fields(j - 1).Value = rowData(1, j)
        Next j

        rs.Update
        rs.MoveNext
        i = i + 1
    Loop
    
    'это если в приёмнике оказались лишние строки, их обнуляем
    Do While Not rs.EOF
        For j = 1 To UBound(rowData, 2)
            rs.Fields(j - 1) = Null
        Next j

        rs.Update
        rs.MoveNext
    Loop
[/vba]

Автор - Pelena
Дата добавления - 31.07.2024 в 21:24
MikeVol Дата: Среда, 31.07.2024, 21:51 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 378
Репутация: 80 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Pelena, Спасибо Вам Большое! Пошёл разбирать примеры, есть ещё чему учится.


Ученик.
Одесса - Украина
 
Ответить
СообщениеPelena, Спасибо Вам Большое! Пошёл разбирать примеры, есть ещё чему учится.

Автор - MikeVol
Дата добавления - 31.07.2024 в 21:51
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!