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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2010, 04:12   #1
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию считывание данных из выбранного файла excel

Здравствуйте!
Вот уже третий день не могу сделать чтобы в мою текущую таблицу добавлялись данные из другого файла excel. помогите!

вот мой код
PHP код:
Private Sub CommandButton3_Click()
Dim oXL As Workbooks
Dim Fpath 
As String
Dim a
As Integer

Fpath 
TextBox7.Text
Set oXL 
Workbooks.Open(Fpath)

For 
2 To 301
   
For 1 To 6
      Worksheets
("Список абитуриентов").Cells(ab).Value oXL.Worksheets("Лист1").Cells(ab).Value
   Next b
Next a

oXL
.Close
Set oXL 
Nothing

End Sub 
Ilya_L вне форума Ответить с цитированием
Старый 18.06.2010, 04:57   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Решить Вашу задачу можно, во-первых, вовсе не открывая файл-источник. Во-вторых, обойтись вообще без циклов. Например, так:
Код:
Private Sub CommandButton3_Click()
    Dim Fpath As String, FName As String: Application.ScreenUpdating = False
    FName = Split(TextBox7, "\")(UBound(Split(TextBox7, "\")))
    Fpath = Replace(TextBox7, FName, "")
    With Sheets("Список абитуриентов")
        With .Range(.Cells(2, 1), .Cells(301, 6))
            .ClearContents
            .FormulaR1C1 = "='" & Fpath & "[" & FName & "]Лист1'!R2C1:R301C6"
            .Value = .Value
        End With
    End With
End Sub
ПРИМЕЧАНИЕ: Имеется ввиду, что в TextBox7 находится полый путь и имя файла с расширением. Например: D:\Temp\Книга1.xls
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 18.06.2010 в 05:01.
SAS888 вне форума Ответить с цитированием
Старый 18.06.2010, 05:59   #3
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

Спасибо вам большое SAS888...Все отлично работает.

Последний раз редактировалось Ilya_L; 18.06.2010 в 06:22.
Ilya_L вне форума Ответить с цитированием
Старый 18.06.2010, 06:23   #4
Ilya_L
Пользователь
 
Регистрация: 18.06.2010
Сообщений: 78
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Решить Вашу задачу можно, во-первых, вовсе не открывая файл-источник. Во-вторых, обойтись вообще без циклов. Например, так:
Код:
Private Sub CommandButton3_Click()
    Dim Fpath As String, FName As String: Application.ScreenUpdating = False
    FName = Split(TextBox7, "\")(UBound(Split(TextBox7, "\")))
    Fpath = Replace(TextBox7, FName, "")
    With Sheets("Список абитуриентов")
        With .Range(.Cells(2, 1), .Cells(301, 6))
            .ClearContents
            .FormulaR1C1 = "='" & Fpath & "[" & FName & "]Лист1'!R2C1:R301C6"
            .Value = .Value
        End With
    End With
End Sub
ПРИМЕЧАНИЕ: Имеется ввиду, что в TextBox7 находится полый путь и имя файла с расширением. Например: D:\Temp\Книга1.xls
Еще один вопрос, как сделать чтобы он не выводил нули(0), оставить ячейки пустыми?
Ilya_L вне форума Ответить с цитированием
Старый 18.06.2010, 07:01   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
как сделать чтобы он не выводил нули(0), оставить ячейки пустыми?
Либо в "Сервис" - "Параметры" снять флажок "Отображать нулевые значения", либо в код макроса, после строки
Код:
.Value = .Value
добавить строку
Код:
.Replace 0, "", xlWhole
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.06.2010, 17:30   #6
Gulash
 
Регистрация: 02.03.2010
Сообщений: 4
По умолчанию

Цитата:
Dim ... FName As String...
FName = Split(TextBox7, "\")(UBound(Split(TextBox7, "\")))
Уважаемый SAS888 объясните плиз недалекому почему не выскакивает ошибка?
Если FName объявлена как строка, а Split Function(Из Help-a "Returns a zero-based, one-dimensional array containing a specified number of substrings.").
Gulash вне форума Ответить с цитированием
Старый 18.06.2010, 18:16   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Интересно, я тоже вначале не понял, пришлось конструкцию собирать:
Код:
    TextBox7 = "D:\Temp\Книга1.xls"
    x = Split(TextBox7, "\")'проверка
    y = (UBound(Split(TextBox7, "\")))'проверка
    FName = Split(TextBox7, "\")(UBound(Split(TextBox7, "\")))
Нормально, FName получается arr(2) другими словами.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 18.06.2010, 19:04   #8
Gulash
 
Регистрация: 02.03.2010
Сообщений: 4
По умолчанию

Все понял. Большое спасибо Вам добрый человек.
Gulash вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
считывание данных из текстового файла Olejik Общие вопросы по Java, Java SE, Kotlin 3 03.10.2009 20:40
Cохранение выбранного элемента ComboBox как название файла kate158 Помощь студентам 5 01.08.2008 12:02
Считывание данных из файла inret Общие вопросы Delphi 4 18.11.2007 18:03
КАК ВОЗВРАТИТЬ АДРЕС И ИМЯ ВЫБРАННОГО ФАЙЛА В OpenDialog? micaell Общие вопросы Delphi 1 16.01.2007 19:53
Считывание данных из файла PAVEL315 Общие вопросы Delphi 26 17.12.2006 00:53