Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 21.10.2008, 17:12   #1
gege
 
Регистрация: 21.10.2008
Сообщений: 6
По умолчанию копирование данных в новую таблицу при интерактивном выборе файла

Ребят, тут такая запара:
Нужно создать макрос, с помошью которого юзер выбирал какую то таблицу эксель, и после его выбора автоматом создавалась новая таблица с данными выбранной, но в немного видоизмененном виде.
Сам я в принципе VBA никогда не касался, но начальник сказал "надо". так что не судите строго
Я сделал в экселе кнопку, по которой вылезает меню выбора файла, после выбора файл открывается:

Private Sub OpenFile_Click()

Dim lngCount As Long

' Open the file dialog
With Application.FileDialog(msoFileDialo gOpen)
.AllowMultiSelect = True
.Show

' Display paths of each file selected
For lngCount = 1 To .SelectedItems.Count
NameFile = .SelectedItems(lngCount)
Next lngCount

Workbooks.Open NameFile

End Sub

(может и файл то откывать не стоит,хз)
А вот дальше хуже..
Не знаю, как правильно из этого файла скопировать данные в новую таблицу эксель.
Подскажите, плиз.
gege вне форума
Старый 21.10.2008, 17:27   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Без исходного файла сложно посоветовать что-либо конкретное.

Цитата:
Нужно создать макрос, с помошью которого юзер выбирал какую то таблицу эксель
В файле может быть несколько таблиц (на одном листе или на нескольких). Как юзер выбирает таблицу? Или ему достаточно выбрать только лист (или даже файл), её содержащий?

Цитата:
.AllowMultiSelect = True
Цитата:
' Display paths of each file selected
For lngCount = 1 To .SelectedItems.Count
NameFile = .SelectedItems(lngCount)
Next lngCount

Workbooks.Open NameFile
Какой смысл разрешать выбирать юзеру несколько файлов, если открываем один файл?
Или юзеру позволено выбирать сразу несколько?

Цитата:
после его выбора автоматом создавалась новая таблица с данными выбранной, но в немного видоизмененном виде.
Насколько должен быть изменён вид таблицы?

Желательно приложить 2 файла:
1 - исходный (один из тех, что может выбрать юзер)
2 - тот же файл, только уже после внесения нужных изменений
EducatedFool вне форума
Старый 21.10.2008, 17:42   #3
gege
 
Регистрация: 21.10.2008
Сообщений: 6
По умолчанию

.AllowMultiSelect = True
по поводу этой строки - да, нужно запретить выбирать несколько файлов, то бишь
.AllowMultiSelect = False

Юзер выбирает сохраненный лист Excel. Он может быть сохранен под любым именем и где угодно.

Из исходного файла нужно скопировать ячейки:
B6:B3500 в новый лист, книгу (значения не имеет), в ячейки A6 :А3500
C6:C3500 в В6:В3500
D6:D3500 в C6:C3500
E6:E3500 в H6:Н3500
G6:G3500 в I6:I3500
H6:H3500 в K6:К3500
gege вне форума
Старый 21.10.2008, 17:58   #4
gege
 
Регистрация: 21.10.2008
Сообщений: 6
По умолчанию

вроде бы несложно все, но что то туплю
gege вне форума
Старый 21.10.2008, 18:08   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот один из способов:

Код:
Sub test()
    With Application.FileDialog(msoFileDialogOpen)    'только для MS Excel XP и старше
        .InitialFileName = "c:\"
        .FilterIndex = 3
        .AllowMultiSelect = False
        If .Show = -1 Then
            Filename = .SelectedItems(1)        ' читаем путь выбранного файла
        Else
            Exit Sub           ' отмена чтения
        End If
    End With

    Dim wb1 As Workbook, wb2 As Workbook, ra1 As Range, ra2 As Range

    Set wb1 = Workbooks.Open(Filename) ' открываем выбранный юзером файл
    If wb1 Is Nothing Then Exit Sub
    Set wb2 = Workbooks.Add ' создаём новую книгу

    Set ra1 = wb1.ActiveSheet.Range("a6:a3500")
    Set ra2 = wb2.ActiveSheet.Range("a6")

    ra1.Offset(, 1).Resize(, 3).Copy ra2 ' копируем b6:b3500 в a6:a3500, C6:C3500 в В6:В3500, D6:D3500 в C6:C3500
    ra1.Offset(, 5).Copy ra2.Offset(, 8) ' копируем E6:E3500 в H6:Н3500
    ra1.Offset(, 7).Copy ra2.Offset(, 9) ' копируем G6:G3500 в I6:I3500
    ra1.Offset(, 8).Copy ra2.Offset(, 11) ' копируем H6:H3500 в K6:К3500

    wb2.ActiveSheet.Range("a:k").Columns.AutoFit ' автоматически выставляем ширину столбцов
    wb1.Close False    ' закрываем открытую юзером книгу
End Sub

Последний раз редактировалось EducatedFool; 21.10.2008 в 19:57.
EducatedFool вне форума
Старый 22.10.2008, 10:27   #6
gege
 
Регистрация: 21.10.2008
Сообщений: 6
По умолчанию

EducatedFool, спасибо огромное!
Все здорово)
А еще не подскажете, как разлиновать таблицу до конца данных?
gege вне форума
Старый 22.10.2008, 10:33   #7
gege
 
Регистрация: 21.10.2008
Сообщений: 6
По умолчанию

Не, лучше такой вопрос: как можно сделать, чтоб столбец копировался не до конкретной ячейки, а пока в нем есть данные?
gege вне форума
Старый 22.10.2008, 17:16   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
как разлиновать таблицу до конца данных?
Цитата:
чтоб столбец копировался не до конкретной ячейки, а пока в нем есть данные
например, так:

Код:
Sub test2()
    Application.ScreenUpdating = False
    With Application.FileDialog(msoFileDialogOpen)   
        .InitialFileName = "c:\": .FilterIndex = 3: .AllowMultiSelect = False
        If .Show = -1 Then Filename = .SelectedItems(1) Else Exit Sub                                            
    End With

    Dim wb1 As Workbook, wb2 As Workbook, ra1 As Range, ra2 As Range, ra2used As Range

    Set wb1 = Workbooks.Open(Filename): If wb1 Is Nothing Then Exit Sub
    Set wb2 = Workbooks.Add

    Set ra1 = wb1.ActiveSheet.Range("b6", wb1.ActiveSheet.Range("b6").End(xlDown))    ' копируем только непустые ячейки
    Set ra2 = wb2.ActiveSheet.Range("a6")

    ra1.Offset(, 0).Resize(, 3).Copy ra2    
    ra1.Offset(, 4).Copy ra2.Offset(, 8)    
    ra1.Offset(, 6).Copy ra2.Offset(, 9)    
    ra1.Offset(, 7).Copy ra2.Offset(, 11)   

    Set ra2used = wb2.ActiveSheet.UsedRange    ' разлиновываем используемый диапазон листа
    With ra2used.Borders
        .LineStyle = xlContinuous: .Weight = xlThin: .ColorIndex = xlAutomatic
    End With
    ra2used.Borders(xlDiagonalDown).LineStyle = xlNone: ra2used.Borders(xlDiagonalUp).LineStyle = xlNone

    wb2.ActiveSheet.Range("a:k").Columns.AutoFit
    wb1.Close False    
    Application.ScreenUpdating = True
End Sub
EducatedFool вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача данных из одной таблицы в другую, при выборе одной ячейки MickMick Microsoft Office Excel 6 06.10.2008 13:57
копирование данных из таблицы в таблицу Sack Microsoft Office Access 1 16.09.2008 05:59
Формирование листа при множественом выборе файлов Руслантус Общие вопросы C/C++ 2 09.08.2008 23:16
Занесение Данных в таблицу при помощи Query Avalonix БД в Delphi 9 29.05.2008 20:13
действие при выборе нужного <option> badfilin JavaScript, Ajax 2 16.04.2008 23:59