Форум программистов, компьютерный форум, киберфорум
Наши страницы

VBA

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 114, средняя оценка - 4.84
lamden
0 / 0 / 0
Регистрация: 12.06.2010
Сообщений: 13
#1

Сохранить файл Excel с именем, содержащимся в ячейке - VBA

12.06.2010, 15:39. Просмотров 19531. Ответов 16
Метки нет (Все метки)

Есть - EXCEL-овский файл, в некой ячейке (например A1:A1 первого листа) содержится (или формируется) некое имя (типа простой текст, например, название и т.д.). Надо, чтобы по нажатию простой кнопочки с этой странички этот EXCEL-овский файл сохранился с этим именем в некой заданной директории.
Помогите, плз, совершенному чайнику - я VBA впервые в жизни вижу....... Ну, пожа-а-а-луйста, господа профи, пожалейте, муки творчества не дают спать!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2010, 15:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сохранить файл Excel с именем, содержащимся в ячейке (VBA):

Через Ексель Открыть файл ВОРД и сохранить файл под определенным именем - VBA
Открываю через ексель файлы ворд и выполняю макрос ворд, но не получается сохранить файл под указанным именем ни такое ...

Как сохранить книгу Excel под именем из переменной? - VBA
Как сохранить книгу Excel под именем из переменной? Dim i ' ... Sheets("Лист 1").Select Sheets("Лист 1").Copy ChDir...

Перемножить диапазон на число и сохранить в файл под собственным именем - VBA
Добрый день, помогите пожалуйста новичку научиться работать с VBA в Office 2010. Стоит задача генерации индивидуальных...

VBA Excel: можно ли сохранить web-страницу в файл htm? - VBA
Перерыл кучу литературы и нигде не нашёл. Короче, нужно сохранить web-страничку, например http://www.yandex.ru/ на винт в файл...

Как сохранить VBA-массив в CSV-файл без Excel - VBA
Как можно сохранить VBA-массив в CSV-файл без использования Excel? Сейчас я сначала вставляю данные из VBA-массива в Excel, а затем...

Сохранить вкладку как новый файл без изменений (Excel) - VBA
Добрый день! Помогите с макросом, который будет: 1) Удалять все строки в который есть формула, но нет значений (сейчас код просто...

16
T@sh
0 / 0 / 0
Регистрация: 21.09.2009
Сообщений: 65
13.06.2010, 07:03 #2
привязываешь к кнопочке макрос:
Visual Basic
1
activeworkbook.saveas filename:='C:Folder ' & activeworkbook.worksheets(1).cells(1,1).value' & '.xls', fileformat:=xlNormal
вот примерно так
0
T@sh
0 / 0 / 0
Регистрация: 21.09.2009
Сообщений: 65
13.06.2010, 07:03 #3
упс... ошибка - после value кавычки, естественно, лишние )))
0
miomio
0 / 0 / 0
Регистрация: 13.06.2010
Сообщений: 16
13.06.2010, 15:12 #4
Попробуй так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Sub SaveAsFolder1()
 
  
    ChDir 'D:Folder1 '
    ThisFile = Range('A2').Value
    ActiveWorkbook.SaveAs Filename:=ThisFile, FileFormat:=xlNormal, _
        Password:='', WriteResPassword:='', ReadOnlyRecommended:=False, _
        CreateBackup:=False
        ActiveWorkbook.Close
 
End Sub
Public Sub SaveAsFolder2()
 
  
    ChDir 'D:Folder2 '
    ThisFile = Range('A2').Value
    ActiveWorkbook.SaveAs Filename:=ThisFile, FileFormat:=xlNormal, _
        Password:='', WriteResPassword:='', ReadOnlyRecommended:=False, _
        CreateBackup:=False
        ActiveWorkbook.Close
 
End Sub
Для сохранения в выбранной папке делаешь кнопку,папки создаешь заранее.
Однако хотелось чтобы все делалось совершенно автоматически - макрос сам бы распознавал какое имя (оно в моем случае находится в А2)присваивать файлу и в какую папку его бросать?
Т.е.заносишь имя. жмешь макрос и все.
Увы, я не подскажу, но может уважаемое сообщество поможет?
0
lamden
0 / 0 / 0
Регистрация: 12.06.2010
Сообщений: 13
14.06.2010, 03:02  [ТС] #5
Ребята, большое спасибо всем, поразительное по простоте решение прислал мне на конфе VBStreets Сергей - привожу его полностью:

Если я правильно понял, то тебе нужно прицепить это к кнопке на листе (в ячейке А1 будет имя сохраняемого файла. Если нужно, то пропиши путь для сохранения):
Visual Basic
1
2
3
4
5
Sub MySaveName() 
Application.DisplayAlerts = False 
ActiveWorkbook.SaveAs [a1] 
Application.DisplayAlerts = True 
End Sub
Сергей

И это - ВСЁ. Работает как часы! Слава Сергею и всему сообществу!!!
_________________
Banker
0
AJIEXEY
0 / 0 / 0
Регистрация: 11.07.2013
Сообщений: 2
15.07.2013, 00:15 #6
добрый вечер (ночи). Помогите, пожалуйста.
Не решился создавать новую тему, но эта похожа на мою.
У меня есть макрос, но я хочу его улучшить. а точнее доделать. По этому макросу создаются сопроводительные письма и отправляются на печать. А потом каждое сопроводительное письмо я сохраняю в Excel в электронном формате. Хотелось бы в макрос добавить цикл, который будет сохранять каждое сопроводительное письмо под именем, содержащимся в ячейке и удалять ненужные листы.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Sub Отчет()
 
i = 2
n = Лист3.Cells(11, 3).Value
s = 1
 
 
While Лист4.Cells(i, 1).Value <> ""                                 'бежим по списку ФИО приставов
    j = 2
    k = 4
    Sheets("Формируемый отчет").Select
    Cells.Select
    Selection.ClearContents
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    While Лист1.Cells(j, 12).Value <> ""                            'бежим по списку исходника
        If Лист1.Cells(j, 1).Value = Лист4.Cells(i, 1).Value And Лист1.Cells(j, 2).Value = Лист4.Cells(i, 2).Value Then
            Лист2.Cells(1, 1).Value = Лист1.Cells(j, 1).Value       'прописываем орган ФССП
            Лист2.Cells(2, 1).Value = Лист1.Cells(j, 2).Value       'прописываем адрес ФССП
                        
            For q = 3 To 13                                         'прописываем все совпадения
 
                'совпадения'
                Лист2.Cells(k, q - 2).Value = Лист1.Cells(j, q).Value
 
            Next q
            k = k + 1
 
        End If
        
        j = j + 1
    Wend
            For q = 3 To 13
                'шапка'
                Лист2.Cells(3, q - 2).Value = Лист1.Cells(1, q).Value
                Range(Лист2.Cells(3, 1), Лист2.Cells(3, 11)).Borders.Weight = 2
                Range(Лист2.Cells(3, 1), Лист2.Cells(3, 11)).Select
                Selection.WrapText = True
            Next q
                'совпадения'
                Range(Лист2.Cells(4, 1), Лист2.Cells(k, 11)).Borders.Weight = 2
                Range(Лист2.Cells(4, 1), Лист2.Cells(k, 11)).Select
                Selection.WrapText = True
    If Лист2.Cells(1, 1).Value <> "" Then                           'заполняем сопроводиловку
        Лист3.Cells(11, 3).Value = n
        Лист3.Cells(12, 5).Value = Лист2.Cells(1, 1).Value
        Лист3.Cells(13, 5).Value = Лист2.Cells(2, 1).Value
        If ((Лист2.HPageBreaks.Count + 1) / 2) <> Fix((Лист2.HPageBreaks.Count + 1) / 2) Then
            Лист3.Cells(20, 3).Value = Fix((Лист2.HPageBreaks.Count + 1) / 2) + 1
        Else
            Лист3.Cells(20, 3).Value = (Fix((Лист2.HPageBreaks.Count + 1) / 2))
        End If
        Sheets("Формируемая сопроводиловка").Select
        ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
        Sheets("Формируемый отчет").Select
        ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
        n = n + 1
        Application.DisplayAlerts = False
      ActiveWorkbook.SaveAs [a1]
      Application.DisplayAlerts = True
            Лист5.Cells(s, 1).Value = "Отчет в " + Лист2.Cells(1, 1).Value   'прописываем орган ФССП
            Лист5.Cells(s, 2).Value = "УФССП"                                'прописываем куда
            Лист5.Cells(s, 3).Value = "Гудовских Е.А."                       'прописываем кто подписал
        s = s + 1
    End If
    i = i + 1
Wend
Application.DisplayAlerts = False
    Sheets("Исходник").Select
    ActiveWindow.SelectedSheets.Delete
    Sheets("ФИО пристава").Select
    ActiveWindow.SelectedSheets.Delete
    Sheets("список для регистрации").Select
    ActiveWindow.SelectedSheets.Delete
    Sheets("Для отдельных").Select
    ActiveWindow.SelectedSheets.Delete
    Range("R12").Select
End Sub
Что мне сделать? Или хотя бы помогите сделать так, чтобы хотя бы сохранялась каждая сопроводиловка в виде файла. Отправляю вложение,чтоб было понятнееКоми - 100703 - измененый2.rar
0
Hugo121
5998 / 2147 / 350
Регистрация: 19.10.2012
Сообщений: 6,420
15.07.2013, 11:02 #7
Чтоб сохранялось - не подскажу. Разбираться в этой каше нет желания - искать что за ячейка, когда там появляется значение, какое и т.д....
Но вот чего в этой теме не хватает (и в том "поразительное по простоте" тоже) - так это проверки/исправления строки на запрещённые в имени файла символы. Если в ячейке будет что-то такое записано (что возможно) - то при сохранении код выпадет в ошибку.
Visual Basic
1
2
3
4
5
6
7
8
Function Replace_symbols(ByVal txt As String) As String 'убираем запрещённые в именах файлов символы! И пробелы и слэши тоже в данном случае!
    Dim st$, i&
    st$ = "\/<>?^*: |`'"""
    For i& = 1 To Len(st$)
        txt = Replace(txt, Mid(st$, i, 1), "_")
    Next
    Replace_symbols = txt
End Function
Ну и ещё вероятно нужно предусмотреть, что такой файл уже есть - что (и как) делать в таком случае?
Я бы просто сохранял в имени дату+время - в этом случае не нужно волноваться, что такой файл уже есть.
2
AJIEXEY
0 / 0 / 0
Регистрация: 11.07.2013
Сообщений: 2
15.07.2013, 21:24 #8
Хотелось после того как формировывается и отправляется на печать, каждое сопроводительное письмо оно сохранялось именем ячейки ('Формируемая сопроводиловка'!E12:I12) в сопроводиловке + дата создания файла.
Подскажите, пожалуйста.

Добавлено через 2 минуты
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sheets("Формируемая сопроводиловка").Select
        ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
        Sheets("Формируемый отчет").Select
        ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
        n = n + 1
            Лист5.Cells(s, 1).Value = "Отчет в " + Лист2.Cells(1, 1).Value   'прописываем орган ФССП
            Лист5.Cells(s, 2).Value = "УФССП"                                'прописываем куда
            Лист5.Cells(s, 3).Value = "Гудовских Е.А."                       'прописываем кто подписал
        s = s + 1
    End If
    i = i + 1
Я как понимаю должно быть где-то тут написано, но вот как и точно где не могу понять

Добавлено через 1 минуту
Хотя бы подскажите, как будет выглядеть скрипт на на сохранение файла именем ячейки +дата создания
0
kniga
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 13
05.05.2015, 09:55 #9
Hugo121, правильное замечание, только подскажите, пж, чайнику, как на одну кнопку "повесить" два события, ваш код и "поразительное по простоте решение"?
0
Hugo121
5998 / 2147 / 350
Регистрация: 19.10.2012
Сообщений: 6,420
05.05.2015, 10:52 #10
Цитата Сообщение от kniga Посмотреть сообщение
как на одну кнопку "повесить" два события, ваш код и "поразительное по простоте решение"?
Visual Basic
1
ActiveWorkbook.SaveAs Replace_symbols([a1])
ну и где-то ниже должен быть доступен код функции.
1
kniga
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 13
05.05.2015, 13:21 #11
Hugo121, Спасибо, заработало!!!

Добавлено через 54 секунды
Hugo121, стесняюсь спросить ... чтобы открывалось окно для пути сохранения, попрорбовал добавить ActiveWorkbook.GetSaveAsFilename Replace_symbols ([C6]) - выводит ошибку 438. Подскажите. пж, решение
0
Hugo121
5998 / 2147 / 350
Регистрация: 19.10.2012
Сообщений: 6,420
05.05.2015, 13:32 #12
Поубивать символы есть смысл при сохранении, а не в Application.GetSaveAsFilename.
Вообще не видя кода и всего процесса трудно дать конкретный совет.
0
kniga
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 13
05.05.2015, 13:56 #13
Есть шаблон авторасчета, при открытии создаются новые файлы с именами Шаблон_1, 2. 3.. и т.д. Так как новый файл - новый заказчик, то встала задача сохранить файл с именем, указанным в ячейке. К сожалению сохраняются файлы в папку по умолчанию (мои доки), а надо чтобы была возможность указать путь, потому что заказчиков распределяем по различным папкам, например год, название организации...
Я картинкой выложил два модуля, в т.ч. и с вашим кодом, посмотрите, пожалйста.
0
Миниатюры
Сохранить файл Excel с именем, содержащимся в ячейке  
Hugo121
5998 / 2147 / 350
Регистрация: 19.10.2012
Сообщений: 6,420
05.05.2015, 14:46 #14
Вариант:
Visual Basic
1
2
3
4
5
6
' Вывод диалогового окна Сохранить как... с уже введеным именем документа
    Имя_для_Сохранения = Replace_symbols([C6])
    FName = Application.GetSaveAsFilename(InitialFileName:=Имя_для_Сохранения, _
                                          FileFilter:="Excel Files (*.xls), *.xls", _
                                          Title:=" Сохранение документа ")
    If VarType(FName) <> vbBoolean Then ActiveWorkbook.SaveAs FName
0
kniga
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 13
06.05.2015, 07:47 #15
Hugo121, Огромное спасибо, все как надо!!!
0
06.05.2015, 07:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2015, 07:47
Привет! Вот еще темы с ответами:

Автокопия открытого файла Excel в папку Dropbox при нажатии Файл->Сохранить - VBA
Для некоторых (не для всех) xlsx файлов хочу сделать так, чтобы при нажатии на кнопку &quot;Сохранить&quot; (Файл - Сохранить) помимо сохранения...

Сохранение с именем в ячейке с удалением кавычек - VBA
Здравствуйте. Суть проблемы Dim WA As Object, WD As Object sDirname = Application.ThisWorkbook.Path &amp; &quot;\&quot; &amp; CStr(Year(Date)) &amp; &quot;\&quot; &amp;...

Макрос который при открытии файла сохраняет его с именем в ячейке c2 - VBA
Макрос который при открытии файла сохраняет его с именем в ячейке c2 Application.DisplayAlerts = False ActiveWorkbook.SaveAs ...

Как Excel документ, в котором 10000 строк, разбить по 10 строк и сохранить каждые 10 строк в отдельный файл - VBA
Здравствуйте. Подскажите как Excel документ в котором 10000 строк разбить по 10 строк и сохранить каждые 10 строк в отдельный файл. Нашел...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.