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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2009, 12:50   #1
Keaf
 
Регистрация: 30.09.2009
Сообщений: 8
По умолчанию сохранение файлов excel по ячейке

Здравствуйте. Мучаюсь с VBA макросом. Может кто нибудь подскажет другие варианты. Есть ТТН накладная, нужно сохранять в определенную папку по номеру вагона (ячека C5 на листе один) и дате (ячейка D5 на листе один).

Получилось сделать только такой макрос:

Sub SaveAsExample()

Dim FName As String
Dim FPath As String

FPath = "C:"
FName = Sheets("ТТН").Range("С5").Text
ThisWorkbook.SaveAs Filename:=FPath & "\" & FName

End Sub

но никак не могу изменить путь (( только на диск C: сохраняет. И ячеку вторую не могу захватить. Может все таки есть другие варианты
Keaf вне форума Ответить с цитированием
Старый 30.09.2009, 13:33   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Попробуйте так:

Код:
Sub SaveAsExample()
    Dim FName As String, FPath As String
    FPath = "C:\шедевры\Новая папка\"
    
    FName = Sheets("ТТН").Range("c5") & " - " & Sheets("ТТН").Range("d5") & ".xls"
    ThisWorkbook.SaveAs Filename:=FPath & FName
End Sub
Проблема была в том, что в строке Sheets("ТТН").Range("С5").Text
вместо латинской буквы C стояла русская С.

Внимание: папка, указанная в FPath, должна существовать - иначе вылетит ошибка.
В данном примере можно создать папку так:
Код:
Sub test2()
    MkDir "C:\шедевры"
    MkDir "C:\шедевры\Новая папка\"
End Sub

Последний раз редактировалось EducatedFool; 30.09.2009 в 13:37.
EducatedFool вне форума Ответить с цитированием
Старый 01.10.2009, 10:57   #3
Keaf
 
Регистрация: 30.09.2009
Сообщений: 8
По умолчанию

Sub test2()
MkDir "C:\ТТН"
End Sub

Sub SaveAsExample()
Dim FName As String, FPath As String
FPath = "C:\ТТН\"

FName = Sheets("ТТН").Range("c5") & " - " & Sheets("ТТН").Range("d5") & ".xls"
ThisWorkbook.SaveAs Filename:=FPath & FName - выдает ошибку здесь
End Sub

что делать?
Keaf вне форума Ответить с цитированием
Старый 01.10.2009, 11:33   #4
Keaf
 
Регистрация: 30.09.2009
Сообщений: 8
По умолчанию

Ура )) получилось

только теперь можно как нибудь автоматизировать процесс, чтобы другие люди не нажимали alt+f8 ?

Sub СоздатьДиректорию()
MkDir "C:\ТТН"
End Sub

Sub СохранитьФайл()
Dim FName As String, FPath As String
FPath = "C:\ТТН\"

FName = Sheets("ТТН").Range("c5") & " - " & Sheets("ТТН").Range("d5") & ".xls"
ThisWorkbook.SaveAs Filename:=FPath & FName
End Sub
Keaf вне форума Ответить с цитированием
Старый 01.10.2009, 11:34   #5
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте Keaf.
подобное изменение кода избавит Вас от таких "ошибок"
Код:
Sub test2()
MkDir "C:\ТТН"
End Sub
Sub SaveAsExample()
On Error Resume Next
Dim FName As String, o As Worksheet
Const FPath = "C:\ТТН\"
If Len(Dir(FPath, vbDirectory)) = 0 Then 'каталог не существует
    test2 '
End If
Set o = Sheets("ТТН") 'обращение к листу
If Not o Is Nothing Then 'лист существует
    FName = o.Range("c5") & " - " & o.Range("d5") & ".xls"
    ThisWorkbook.SaveAs Filename:=FPath & FName '- выдает ошибку здесь
    If Err.Number = 1004 Then MsgBox "Canceled"
End If
End Sub
"что делать?" - учиться, набираться опыта и знаний.
Удачи Вам.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 01.10.2009, 11:41   #6
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

и снова здравствуйте.
"чтобы другие люди не ..." - разместив на панели инструментов Настраиваемую кнопку из категории Макросы, назначьте ей макрос SaveAsExample. (СохранитьФайл)
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 01.10.2009, 12:17   #7
Keaf
 
Регистрация: 30.09.2009
Сообщений: 8
По умолчанию

Теперь немножко мне другую задачу поставили ((
FName = o.Range("c5") & " - " & o.Range("d5") & ".xls"

вместо ячейки d5 (в которой была дата) нужно поставить получателя, а он находится в диапазоне ячеек d6:i6

как быть?
Keaf вне форума Ответить с цитированием
Старый 01.10.2009, 12:44   #8
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Keaf измените код процедуры подобным образом:
Код:
Sub SaveAsExample(s$)
On Error Resume Next
Dim FName As String, o As Worksheet
Const FPath = "C:\ТТН\"
If Len(Dir(FPath, vbDirectory)) = 0 Then 'каталог не существует
   ' test2 '
End If
Set o = Sheets("ТТН") 'обращение к листу
If Not o Is Nothing Then 'лист существует
    FName = o.Range("c5") & " - " + s + ".xls"
    ThisWorkbook.SaveAs Filename:=FPath & FName '- выдает ошибку здесь
End If
End Sub
для получателя вызов процедуры может быть таким:
SaveAsExample "Получатель"
для получателей "находящихся" в диапазоне ячеек таким:
Код:
Sub TTT()
Dim o As Object
   For Each o In Range("d6:i6")
      SaveAsExample o.Text
   Next 
End sub
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 02.10.2009, 09:57   #9
Keaf
 
Регистрация: 30.09.2009
Сообщений: 8
Вопрос

Ну вот весь скрипт:

Sub СоздатьКаталог()
MkDir "C:\ТТН"
End Sub
Sub Сохранить(s$)
On Error Resume Next
Dim FName As String, o As Worksheet
Const FPath = "C:\ТТН\"
If Len(Dir(FPath, vbDirectory)) = 0 Then 'каталог не существует
СоздатьКаталог '
End If
Set o = Sheets("ТТН") 'обращение к листу
If Not o Is Nothing Then 'лист существует
FName = o.Range("c5") & " - " + s + ".xls"
ThisWorkbook.SaveAs Filename:=FPath & FName
End If
End Sub
Sub TTT()
Dim o As Object
For Each o In Range("d6:i6")
Сохранить o.Text
Next
End Sub


теперь происходить следующее: файл созраняется до бесконечности и просит заменить его

FName = o.Range("c5") & " - " + s + ".xls" - вот здесь вроде бы нормально, но текст берется только с ячеки C5, а после "-" ничего, хотя должно быть так: текст из C5 потом "-" и текст из объединенных ячеек d6:i6

Как сделать не могу понять ((
Keaf вне форума Ответить с цитированием
Старый 02.10.2009, 10:49   #10
Keaf
 
Регистрация: 30.09.2009
Сообщений: 8
По умолчанию

кстати, диапазон ячеек d6:i6 содержит данные типа:
ООО "Организация"

по моему косяк именно в этом ((

Последний раз редактировалось Keaf; 02.10.2009 в 11:21.
Keaf вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
зависание excel при постоянном обращении к ячейке iamaxl Microsoft Office Excel 1 07.07.2009 18:02
Скопировать по одной ячейке из нескольких файлов в один Nimo Microsoft Office Excel 2 09.08.2008 09:25
Как обратиться к ячейке файла Excel не открывая его Alexandro Microsoft Office Excel 3 28.05.2008 12:02
Печать pdf файлов из списка файлов в Excel АПС Microsoft Office Excel 5 15.04.2008 16:04
Как в ячейке Excel сделать надстрочный шрифт? Sony Общие вопросы Delphi 2 26.07.2007 01:59