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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2014, 13:43   #1
Puffi.Muffi
Пользователь
 
Регистрация: 18.06.2013
Сообщений: 57
По умолчанию Перебор файлов с помощью CommandButton

Уважаемые программисты,

Подскажите, пожалуйста, как можно поступить:

Хотела сделать навигацию при поиске ячеек с определенной частью текста во всех excel-файлах, которые находятся в определенной папке.

Вот задумка:
1) Открывается первый файл

2) Появляется UserForm c 3мя CommandButton: "Previous", "Next", при их помощи можно переходить к предыдущей, либо следующей нужной ячейке; "Exit" для завершения процесса в любой момент; и TextBox в котором выводится содержание ячейки.

Т.е. открылся файл, если в данном файле две ячейки, содержащие (например) сочетание "BBB",
то появляется userform c TextBox в котором (напр.) "BBB44553",
при нажатии "Next" появлялось содержание следующей ячейки (напр.) "BBB22",

- если нажимаем в этот момент "Previous", то выводится "BBB44553",
- если "Next" то эта книга закрывается, т.к. в ней больше нет ячеек с таким содержанием, и открывается следующая книга, в TextBox появляется новая надпись с "BBB".

-если в нажать "Previous", то закроется этот файл, откроется предыдущий, выведется "BBB22",
- если "Next" то выведется следующая нужная ячейка данного файла если такая имеется, если нет, то этот файл закрывается, открывается новый

и т.д. пока не будут показаны поочередно при помощи ручного переключения все ячейки во всех файлах определенной папки с содержанием "BBB".

Не получается скомпоновать следующий код:

Часть I "Для навигации при поиске в определенном файле"
'********************************** *****************
Sub otkrivaet_perviy_fail_vivodit_1y_nu zhniy_text ()
Dim bb As Integer
bb = 1
status_treida = Worksheets("aacc").Cells(bb, 5).Value
mycheck = status_treida Like "*BBB*"
If mycheck = True Then
Cells(bb, 5).Select
UserForm1.TextBox1.Value = status_treida
UserForm1.Show
End If
End Sub


Private Sub CommandButton1_Click()
' "Previous"
Dim selA As Integer
selA = Selection.Row - 1

Unload UserForm1
status_treida = Worksheets("aacc").Cells(selA, 5).Value
mycheck = status_treida Like "*BBB*"
If mycheck = True Then
Cells(selA, 5).Select
UserForm1.TextBox1.Value = status_treida
UserForm1.Show
End If
End Sub

Private Sub CommandButton2_Click()
' "Next"
Dim selA As Integer
selA = Selection.Row + 1

Unload UserForm1
status_treida = Worksheets("aacc").Cells(selA, 5).Value
mycheck = status_treida Like "*BBB*"
If mycheck = True Then
Cells(selA, 5).Select
UserForm1.TextBox1.Value = status_treida
UserForm1.Show
End If
End Sub

Private Sub CommandButton3_Click()
' "Exit"
Unload UserForm1
End Sub
'********************************** *******************
Часть II "Перебор файлов"
'__________________________________ __________________________
Sub gfcmkjh()
Dim xDirect$, xFname$, InitialFoldr$
InitialFoldr$ = "C:\Users\" '<<< Startup folder to begin searching from
With Application.FileDialog(msoFileDialo gFolderPicker)
.InitialFileName = Application.DefaultFilePath & "\"
.Title = "Please select a folder to list Files from"
.InitialFileName = InitialFoldr$
.Show
If .SelectedItems.Count <> 0 Then
xDirect$ = .SelectedItems(1) & "\"
xFname$ = Dir(xDirect$, 7)
Do While xFname$ <> ""

HhHhH = "C:\Users\" & xFname$

Workbooks.Open Filename:=HhHhH
Workbooks(xFname$).Activate

'..........................

ActiveWorkbook.Close
xFname$ = Dir
Loop
End If
End With

End Sub
'__________________________________ _______________________

а нельзя ли сделать как-нибудь чтобы при нажатии кнопок первый код не прерывался? Возможно ли в основном коде написать то, что будет происходить при нажатии CommandButton, а не в "Private Sub CommandButton_Click()"
Что-нибудь вроде"If CommandButton1 = True then..." ?

Или как можно по-другому решить задачу?

С наилучшими пожеланиями,
Puffi.Muffi
Puffi.Muffi вне форума Ответить с цитированием
Старый 22.01.2014, 15:42   #2
Puffi.Muffi
Пользователь
 
Регистрация: 18.06.2013
Сообщений: 57
По умолчанию

Уважаемые профессионалы,

Плиз напишите, что Вы обо всем этом думаете:
Слишком долгое сообщение?
Не совсем ясная задача?
Требует много времени для решения?

Тут главный вопрос: Как можно кнопками на Фоме "Назад" и "Вперед" открывать поочередно файлы находящиеся в одной папке?

Спасибо за внимание,
Puffi.Muffi
Puffi.Muffi вне форума Ответить с цитированием
Старый 23.01.2014, 06:15   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Как можно кнопками на Фоме "Назад" и "Вперед" открывать поочередно файлы находящиеся в одной папке?
Я себе делал подобное, - по нажатию Ctrl+> и Ctrl+< поочередно открывались файлы из заданной папки (предыдущий файл закрывался)

Код:
Private Sub Workbook_Open()
    Application.OnKey "^.", "ShowNextWorkbook"
    Application.OnKey "^,", "ShowPrevWorkbook"
End Sub
Код:
Sub ShowNextWorkbook(): ScrollWorkbooks 1: End Sub
Sub ShowPrevWorkbook(): ScrollWorkbooks -1: End Sub

Sub ScrollWorkbooks(Optional ByVal offset&)
    On Error Resume Next
    Static coll As Collection, Index&, lastFile$, folder$
    folder$ = "путь к папке"
    If coll Is Nothing Then Set coll = FilenamesCollection(folder$)
    If coll.Count = 0 Then MsgBox "Папка «Прайс-листы» не содержит файлов!", vbExclamation: Exit Sub
    Index& = Index& + offset&
    If Index& > coll.Count Then Index = 1
    If Index& <= 0 Then Index = coll.Count

    Application.ScreenUpdating = False
    NewFile$ = coll(Index&)
    Workbooks.Open NewFile$, False ' открытие очередного файла
    If lastFile$ <> "" Then
        Application.DisplayAlerts = False
        Workbooks(Dir(lastFile$, vbNormal)).Close 0 ' закрытие предыдущего
        Application.DisplayAlerts = True
    End If
    lastFile$ = NewFile$
    Application.ScreenUpdating = True
End Sub
Ну и вам понадобится функция FilenamesCollection отсюда:
http://excelvba.ru/code/FilenamesCollection

--------------------

Возможно, ещё это поможет:
http://excelvba.ru/code/SearchCells

Результаты поиска выводятся на форму,
для перехода к найденной ячейке достаточно щелкнуть мышью на нужном результате - автоматически будет активирован нужный лист, и выделена искомая ячейка.

Последний раз редактировалось EducatedFool; 23.01.2014 в 06:19.
EducatedFool вне форума Ответить с цитированием
Старый 23.01.2014, 12:20   #4
Puffi.Muffi
Пользователь
 
Регистрация: 18.06.2013
Сообщений: 57
По умолчанию

Спасибо EducatedFool Вам большое! код подходит, основная часть задачи решена, над остальным буду работать.
Puffi.Muffi вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
импорт значений диапозона ячеек из одной книги в другую с помощью элемента управления CommandButton ViktorASh Microsoft Office Excel 1 27.11.2013 20:46
2008: Перебор каталогов и файлов в проекте консольного приложения stinger2012 Visual C++ 0 03.05.2012 16:14
Перебор файлов Excel coder082 Microsoft Office Excel 4 08.06.2010 11:21
перебор файлов Ralf_ru Общие вопросы Delphi 11 31.03.2009 14:23
Копирование файлов с помощью copyfile mopozoff Общие вопросы Delphi 3 13.06.2008 12:59