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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.11.2007, 09:28   #1
Leanna
Пользователь
 
Регистрация: 31.10.2007
Сообщений: 24
Вопрос Помогите с макросами на Save As и Open

Друзья! Помогите пожалуйста с двумя макросами на Save As и Open:

1) Макрос берет данные из ячейки А1 (например «Счет-Фактура 699») и
сохраняет файл «Счет-Фактура 699.xls» в директории «C:\Поставщики»

2) Макрос открывает файл с максимальным номером из «C:\Поставщики».
Например в директории «C:\Поставщики» есть два файла «Счет-
Фактура 699.xls» и «Счет-Фактура 700.xls» нужно что бы макрос
открыл «Счет-Фактура 700.xls».

Спасибо.

Последний раз редактировалось Leanna; 03.11.2007 в 09:33.
Leanna вне форума
Старый 03.11.2007, 13:28   #2
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

1.
Код:
Private Sub SaveAsFile()
    iPath$ = "C:\Поставщики\"
    If Dir(iPath$, vbDirectory) = "" Then
       MsgBox "Указанная папка изволит отсутствовать", , ""
       Exit Sub
    End If
    
    With ActiveWorkbook
         .SaveAs Filename:=iPath$ & _
         .Worksheets(1).Range("A1").Value, FileFormat:=xlNormal
    End With
End Sub
Естественно, что рабочая книга, которую необходимо сохранить в указанную папку не обязательно должна быть активной, а ячейка, данные которой служат именем файла, может принадлежать любому листу. Проще говоря, это только пример, причём только "основная" его часть, т.к. было бы весьма неплохо добавить проверку на корректность данных ячейки "A1", ибо имя файла не должно содержать более 255 символов, кроме того, существуют символы, которые не могут быть использованы в имени. Впрочем, если данные будут вводиться эту ячейку только вручную, то используя проверку данных (Данные-Проверка-Параметры- список: Другой-поле: Формула) можно запретить ввод данных, которые не могут быть использованы в качестве имени файла.

P.S. Не стоит также забывать, что в указанной папке уже может наличествовать файл с сохраняемым именем.
pashulka вне форума
Старый 03.11.2007, 14:35   #3
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

2.
Код:
Private Sub OpenFile()
    iPath$ = "C:\Поставщики\"
    If Dir(iPath$, vbDirectory) = "" Then
       MsgBox "Указанная папка изволит отсутствовать", , ""
       Exit Sub
    End If
    
    With Application.FileSearch 'XL97, 2000, 2002, 2003
         'Вместо об'екта FileSearch
         'можно использовать функцию Dir (примеры есть на этом форуме)
         .NewSearch
         .LookIn = iPath$
         .FileName = "*.xls"
         If .Execute > 0 Then
            iCountFile& = .FoundFiles.Count
            ReDim iNumeric(1 To iCountFile&, 1 To 2)
            For iCount& = 1 To iCountFile&
                iFileName$ = .FoundFiles(iCount&)
                If iFileName$ Like "*#.xls" Then
                   iNumeric(iCount&, 1) = NumFile(iFileName$)
                   iNumeric(iCount&, 2) = iFileName$
                End If
            Next
            With Application
                 If .Count(iNumeric) = 0 Then
                    MsgBox "Не обнаружено ни одного нужного файла", , ""
                    'Предполагается, что :
                    '- счётчик находится в конце имени
                    '- он может содержать различное количество цифр
                    '- эти цифры располагаются последовательно
                    Exit Sub
                 End If
                 iOpenFile$ = _
                 .VLookup(.Max(iNumeric), iNumeric, 2, 0)
                 .Workbooks.Open FileName:=iOpenFile$, UpdateLinks:=0
            End With
         End If
    End With
End Sub

Private Function NumFile&(FileName$)
    For iCount% = Len(FileName$) - 4 To 1 Step -1
        iSymbol$ = Mid(FileName$, iCount%, 1)
        If Not IsNumeric(iSymbol$) Then
           NumFile& = CLng(iTemp$) 'iTemp$
           Exit Function
        End If
        iTemp$ = iSymbol$ & iTemp$
    Next
End Function
pashulka вне форума
Старый 04.11.2007, 21:14   #4
Leanna
Пользователь
 
Регистрация: 31.10.2007
Сообщений: 24
По умолчанию

Вау!!! pashulka ты просто гуру и добрый человек
Буду у тебя учиться. Ты мне очень помог. Я буду это использовать.
Спасибо.
Leanna вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Иконки New, Open, Save amelie Win Api 2 07.08.2008 17:20
DOM. save в IE badfilin JavaScript, Ajax 2 01.05.2008 11:20
Открывать книгу только с макросами wnuks Microsoft Office Excel 1 14.07.2007 10:44