Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Basic / VBA


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Гуревич Александр Львович
Статус: 10-й класс
Рейтинг: 1022
∙ повысить рейтинг »
Megaloman
Статус: Бакалавр
Рейтинг: 645
∙ повысить рейтинг »
Botsman
Статус: Специалист
Рейтинг: 514
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Номер выпуска:937
Дата выхода:14.10.2009, 12:30
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:362 / 95
Вопросов / ответов:1 / 2

Вопрос № 173075: Добрый вечер уважаемые эксперты. VBA EXCEL Общая задача: в одной папке находится анкеты установленного образца и БД.xls. По задумке определённая информация из анкет(тоже xls) должна попасть в БД. Общий вопрос такой. Каким ...



Вопрос № 173075:

Добрый вечер уважаемые эксперты.

VBA EXCEL

Общая задача:
в одной папке находится анкеты установленного образца и БД.xls. По задумке определённая информация из анкет(тоже xls) должна попасть в БД.

Общий вопрос такой.
Каким образом, по нажатию кнопки в файле БД, можно в цикле перенести определённую информацию из анкет в БД? То есть получить список имен в папке, поместить в массив и поочерёдно открывать анкеты, копировать инфо и закрывать?

Отправлен: 08.10.2009, 22:40
Вопрос задал: Соколов В.В., Посетитель
Всего ответов: 2
Страница вопроса »


Отвечает Архипов Александр Леонидович, Практикант :
Здравствуйте, Соколов В.В..
Sub Макрос1()
'
' Макрос1 Макрос
'

'
Dim a(50) As String
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim vrtSelectedItem As Variant
With fd
If .Show = -1 Then
n = 1
For Each vrtSelectedItem In .SelectedItems
a(n) = vrtSelectedItem
n = n + 1
Next vrtSelectedItem
Else
End If
End With
Set fd = Nothing
For i = 1 To n - 1
lcFile = a(i)
Workbooks.Open lcFile
' перенос данных
' закрытие файла lcFile


Next i


End Sub

Ответ отправил: Архипов Александр Леонидович, Практикант
Ответ отправлен: 09.10.2009, 10:16

Оценка ответа: 4
Комментарий к оценке:
Ответ на вопрос был получен, но не точно. Можно использовать, но не то что требовалось.

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 255192 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Megaloman, Бакалавр :
    Здравствуйте, Соколов В.В.. Вот макрос, который последовательно открывает эксел-файлы по маске в указанной папке, забирает в массив значение указанных клеток, заносит их в сводную таблицу (базу), закрывает открытый макросом файл

    Код:
    Sub Svod()
    ' Исходные данные
    RabDir = "H:\Delete\Откуда грузим" ' Где данные для загрузки
    Maska = "*.xls" ' Маска имени загружаемых файлов

    SvodFileName = "Загрузка файлов.xls" ' Наименование файла с базой
    ListSvod = "База" ' Имя листа со сводом

    ChDir RabDir

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Tdir = FSO .GetFolder(RabDir)
    Set AllFiles = Tdir.Files

    Dim Mass(2) As Variant

    Sheets(ListSvod).Select
    Columns("A:Q").ClearContents ' Очищаю лист куда буду грузить
    Range("A1").Select

    i = 0
    For Each iFile In AllFiles
    jName = iFile.Name

    If jName Like Maska Then
    Range("A1").Offset(i, 0) = jName ' Отладочная печать имён файлов в директории
    On Error Resume Next
    Workbooks.Open Filename:=RabDir + "\" + jName ' Открываем Exel файл

    If Err.Number = 0 Then
    On Error GoTo 0

    For j = 0 To 2 ' Забираем данные в массив
    Mass(j) = Range("A1").Offset(j, 0)
    Next

    Windows(SvodFileName).Activate
    For j = 0 To 2 ' Забираем данные из массива
    Range("B1").Offset(i, j) = Mass(j)
    Next

    Workbooks(jName).Close SaveChanges:=False ' Закрываем книгу из которой брали данные
    End If


    i = i + 1
    End If
    Next

    End Sub


    К ответу прикрепил пример, который можете загрузить. В макросе настройте свои пути
    Прикрепленный файл: загрузить »

    -----
    Нет времени на медленные танцы

    Ответ отправил: Megaloman, Бакалавр
    Ответ отправлен: 09.10.2009, 16:36

    Оценка ответа: 5
    Комментарий к оценке:
    Спасибо большое, именно то что требовалось, не больше не меньше! Вся понятно, комментарии избыточны.

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 255210 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.9 от 25.09.2009

    В избранное