Люди добрые помогите с VBA Exel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Dark
Сообщения: 63
Зарегистрирован: 23 июл 2008, 23:21

Есть документ с формой!!
При нажатии на кнопку CommandButton1 выполняется ряд действий и в конце файл должен предложить сохранение.
Использую функцию Application.Dialogs (xldialogSaveAs)
Все замечательно сохраняется, но хотелось бы чтобы в именя файла бралось из ячейки B2 на Листе1 (пусть называется "ВВОД"), а так же прописать путь для сохранения, например так "C:\Documents and Settings\1\Мои документы\1\" .
Пробывал простым сохранением, т.е. функцией Save, а не Save as. Все получается, но сохранение происходит сразу, а в большенстве случаем мне нужно иметь возможность изменение имени сохраняемого файла (ячейка B2) , т.к. в ячейку B2 вбивается еще сторонняя информация.
Привиду пример:
В ячейки B 2 имеем данные Иванов А.А.,Петров Б.В. нажимаем кнопку, высвечивается форма Сохранить как... в имени файла автоматически прописывается Иванов А.А.,Петров Б.В. и путь "C:\Documents and Settings\1\Мои документы\1\".
Я стираю ненужную инфу из названия файла предположим оставляю Иванов А.А. и дописываю путь.
Простите если вопрос достаточно глупый, просто мучился функцией ChDir, помогает только в совокупе c Save, a не с Save As

Если что, то вот код:
Private Sub CommandButton1_Click()
Unload Me
Sheets("1").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=2
Sheets("2").Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Sheets("ВВОД").Select
Range("B2").Select
Application.Dialogs(xlDialogSaveAs).Show
End Sub

Заранее примногоблагодарен!!! :)

P.S.
Просто в save выглядит так
ActiveWorkbook.SaveAs Filename:=Range("B2").Value
как прописать для функции Save As то же самое не докумекал
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Код: Выделить всё

  With ActiveWorkbook
    fname = InputBox("Измените расположение файла или просто нажмите OK.", "Сохранение", .Path)
    If fname <> "" Then
      fname = fname & "\" & InputBox("Измените имя или просто нажмите OK.", "Сохранение", [b2])
      If fname <> "\" Then .SaveAs fname
    End If
  End With

Dark
Сообщения: 63
Зарегистрирован: 23 июл 2008, 23:21

Нет, немного не так,я имел в виду что при выполнении макроса должна высвечиваться форма Сохранить как..., и в ней в имени файла должны вставать данные из ячейки B2 А так жк прописываться частичный путь например я должен сохранить данный файл в C:\Documents and Settings\1\Мои документы\2009 год\, но так же еще и по месяцам. Я выполняю макрос он высвечивает мне путь C:\Documents and Settings\1\Мои документы\2009 год\, а месяц я уже выбираю сам из тех, что есть в папке 2009 год.
Надеюсь не очень запутанно!!
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Application.Dialogs(xlDialogSaveAs).Show [b2]

А вот с папками сложнее... надо подумать...
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

А что, метод Application.Dialogs(xlDialogSaveAs) обязательно нужно использовать?
Можно, например, так:

Код: Выделить всё

Dim FPath As String, FName As String
    FPath = "C:\Documents and Settings\1\Мои документы\2009 год\"
    FName = [B2]
    FName = Application.GetSaveAsFilename(InitialFileName:=FPath & FName, _
        FileFilter:="Excel Files (*.xls), *.xls")
    If FName <> "" Then If FName <> "False" Then ActiveWorkbook.SaveAs Filename:=FName
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Да, можно по-всякому, но автору вопроса хочется чтобы появлялось стандартное окно сохранения, если я правильно понял...
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте Dark.
Если на форме разместить CommonDialog из библиотеки COMDLG32.OCX, с выбором каталога проблем не будет, реализовать можно так:

Код: Выделить всё

Private Sub CommandButton1_Click()
Dim s$
With CommonDialog1
    .Filename = Cells(4, 2)
    .InitDir = Cells(2, 2)
    .Filter = "*.xls|*.xls"
    .ShowSave
    s = .Filename
    ' Save ...
End With
End Sub
Евгений.
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

автору вопроса хочется чтобы появлялось стандартное окно сохранения, если я правильно понял...
Метод GetSaveAsFilename, предложенный в посте №5 вызывает стандартное окно для сохранения. Не пойму, что не так?
Dark
Сообщения: 63
Зарегистрирован: 23 июл 2008, 23:21

Спасибо Naeel Maqsudov практически все сделал как хотел!! Единственное возник вопрос, использовал метод указанный вами в посте № 4 прописал Application.Dialogs(xlDialogSaveAs).Show [b2]. Решил подтянуть еще одну ячейку, почему-то не получилось.
Код был следующим: Application.Dialogs(xlDialogSaveAs).Show [b2], [f2]. В форме Сохранить как... в имени файла высвечивается пустое окно. Пробывал прописать Application.Dialogs(xlDialogSaveAs).Show [f2], получил набор цифр. Дело в том что ячейка f2 содержит дату, отличную от текущей, но в форму Сохранить как она почему-то не встает, тем более в связке с ячейкой B2. Подскажите пожалуйста в чем проблемма??
Dark
Сообщения: 63
Зарегистрирован: 23 июл 2008, 23:21

Вот ссылка на то что я хочу получить http://www.rapidshare.ru/913701, только еще один вопрос при использовании функции Application.Dialogs(xlDialogSaveAs).Show [b2] в форме сохранить как... имя файла высвечивается в ковычках от них можно как-то избавиться?И сохранение должно начинаться не с Рабочего стола, а с Моих документов\.....\.....
Надеюсь так будет нагляднее.
Заранее благодарю всех за помощь!
Ответить