Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Генерация уникального номера ячейки и сохранение в имя файла - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Генерация уникального номера ячейки и сохранение в имя файла (Макросы/Sub)
Генерация уникального номера ячейки и сохранение в имя файла
VladKovaly Дата: Понедельник, 02.06.2014, 12:23 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброго времени суток всем. Нужна помощь по следующему вопросу: на работе нам приходится часто заполнять акты демонтажа оборудования. Есть готовый простенький шаблон\заготовка, в которую вносятся необходимые данные - номер акта, дата, объект и непосредственно само оборудование. Проблема в том, что акты заполняют разные люди и номер документа вписывается "от фонаря". В результате за три года скопилось немало актов с дублирующимися номерами. Хотелось бы в дальнейшем как-то автоматизировать этот процесс. Т.е. по нажатию кнопки в документе генерируется уникальный номер и записывается в определенную ячейку. В другую ячейку вставляется текущая дата и после этого документ сохраняется в текущей папке под именем, начинающимся с генерированного номера. В идеале было бы неплохо, если в имя файла еще и дописывался небольшой текст из определенной ячейки. Я пытался решить этот вопрос самостоятельно, просмотрел несколько схожих тем на форуме и понял, что ничего не понял. Поскольку мои познания в Excel более чем скромны и сам я вряд ли смогу сделать желаемое. Может кто-нибудь поможет в этом?
К сообщению приложен файл: __.rar (29.0 Kb)
 
Ответить
СообщениеДоброго времени суток всем. Нужна помощь по следующему вопросу: на работе нам приходится часто заполнять акты демонтажа оборудования. Есть готовый простенький шаблон\заготовка, в которую вносятся необходимые данные - номер акта, дата, объект и непосредственно само оборудование. Проблема в том, что акты заполняют разные люди и номер документа вписывается "от фонаря". В результате за три года скопилось немало актов с дублирующимися номерами. Хотелось бы в дальнейшем как-то автоматизировать этот процесс. Т.е. по нажатию кнопки в документе генерируется уникальный номер и записывается в определенную ячейку. В другую ячейку вставляется текущая дата и после этого документ сохраняется в текущей папке под именем, начинающимся с генерированного номера. В идеале было бы неплохо, если в имя файла еще и дописывался небольшой текст из определенной ячейки. Я пытался решить этот вопрос самостоятельно, просмотрел несколько схожих тем на форуме и понял, что ничего не понял. Поскольку мои познания в Excel более чем скромны и сам я вряд ли смогу сделать желаемое. Может кто-нибудь поможет в этом?

Автор - VladKovaly
Дата добавления - 02.06.2014 в 12:23
Матраскин Дата: Понедельник, 02.06.2014, 12:38 | Сообщение № 2
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
VladKovaly, Надо придумать этот номер акта, каким он должен быть)) и как гарантировать его уникальность. самое простое что приходит на ум это числа от 1 до большогочисла. Либо это будет рандомное число или группа символов и тогда надо заводить место куда их сохранять и проверять при генерации нового, чтобы не повторялись. Либо делать это рандомное число хитрым способом, например час + минута + день + рандомное_число + количество строк*на коэфициент = уникальный код. что то в таком роде. В остальном всё просто.
ну и по вставлять в разные ячейки(Range("A2") = Date)


в интернете опять кто-то не прав

Сообщение отредактировал Матраскин - Понедельник, 02.06.2014, 12:39
 
Ответить
СообщениеVladKovaly, Надо придумать этот номер акта, каким он должен быть)) и как гарантировать его уникальность. самое простое что приходит на ум это числа от 1 до большогочисла. Либо это будет рандомное число или группа символов и тогда надо заводить место куда их сохранять и проверять при генерации нового, чтобы не повторялись. Либо делать это рандомное число хитрым способом, например час + минута + день + рандомное_число + количество строк*на коэфициент = уникальный код. что то в таком роде. В остальном всё просто.
ну и по вставлять в разные ячейки(Range("A2") = Date)

Автор - Матраскин
Дата добавления - 02.06.2014 в 12:38
RAN Дата: Понедельник, 02.06.2014, 12:54 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub Мяу()
     With Sheets("Акт демонтажа")
         .Cells(1, 5) = Format(Rnd * 1000000, "000000")
         .Cells(1, 7) = Date
         .Copy
         Application.DisplayAlerts = False
         ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & .Cells(1, 5).Value _
                    & "_" & .Cells(8, 2).Value & ".xls", FileFormat:=-4143
         ActiveWorkbook.Close False
         Application.DisplayAlerts = True
     End With
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Sub Мяу()
     With Sheets("Акт демонтажа")
         .Cells(1, 5) = Format(Rnd * 1000000, "000000")
         .Cells(1, 7) = Date
         .Copy
         Application.DisplayAlerts = False
         ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & .Cells(1, 5).Value _
                    & "_" & .Cells(8, 2).Value & ".xls", FileFormat:=-4143
         ActiveWorkbook.Close False
         Application.DisplayAlerts = True
     End With
End Sub
[/vba]

Автор - RAN
Дата добавления - 02.06.2014 в 12:54
nilem Дата: Понедельник, 02.06.2014, 13:08 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
или
[vba]
Код
Sub ertert()
Dim Fold As String, f As String, NomDoc As Long, t&
Application.ScreenUpdating = False
If Right(ThisWorkbook.Path, 1) <> "\" Then Fold = ThisWorkbook.Path & "\" Else Fold = ThisWorkbook.Path
f = Dir(Fold & "*.xls*", vbNormal)
Do While f <> ""
     If f <> ThisWorkbook.Name Then
         t = Val(f)
         If NomDoc < t Then NomDoc = t
     End If
     f = Dir()
Loop
NomDoc = NomDoc + 1
With Sheets("Акт демонтажа")
     .Range("E1").Value = NomDoc
     f = Format(NomDoc, "0000") & "_" & .Range("B8").Value & ".xls"
End With
ThisWorkbook.SaveCopyAs Filename:=Fold & f
Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: __.xls (48.5 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеили
[vba]
Код
Sub ertert()
Dim Fold As String, f As String, NomDoc As Long, t&
Application.ScreenUpdating = False
If Right(ThisWorkbook.Path, 1) <> "\" Then Fold = ThisWorkbook.Path & "\" Else Fold = ThisWorkbook.Path
f = Dir(Fold & "*.xls*", vbNormal)
Do While f <> ""
     If f <> ThisWorkbook.Name Then
         t = Val(f)
         If NomDoc < t Then NomDoc = t
     End If
     f = Dir()
Loop
NomDoc = NomDoc + 1
With Sheets("Акт демонтажа")
     .Range("E1").Value = NomDoc
     f = Format(NomDoc, "0000") & "_" & .Range("B8").Value & ".xls"
End With
ThisWorkbook.SaveCopyAs Filename:=Fold & f
Application.ScreenUpdating = True
End Sub
[/vba]

Автор - nilem
Дата добавления - 02.06.2014 в 13:08
VladKovaly Дата: Вторник, 03.06.2014, 07:08 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
RAN, nilem, - спасибо. Это практически то, что нужно. Единственное, что слегка смущает - это два момента: слишком большое количество цифр в сгенерированном номере и наличие кнопки сохранения в копиях. Тут, на форуме, я нашел в одной теме подходящий код, но сколько ни пытался вставить его к себе - Эксель выдает ошибку. Хотел вставить команду удаления кнопки генерации из сохраненной копии документа.

Естественно - я указывал свои адреса ячеек, но тем не менее... Увы.
 
Ответить
СообщениеRAN, nilem, - спасибо. Это практически то, что нужно. Единственное, что слегка смущает - это два момента: слишком большое количество цифр в сгенерированном номере и наличие кнопки сохранения в копиях. Тут, на форуме, я нашел в одной теме подходящий код, но сколько ни пытался вставить его к себе - Эксель выдает ошибку. Хотел вставить команду удаления кнопки генерации из сохраненной копии документа.

Естественно - я указывал свои адреса ячеек, но тем не менее... Увы.

Автор - VladKovaly
Дата добавления - 03.06.2014 в 07:08
RAN Дата: Вторник, 03.06.2014, 11:53 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Удалить кнопку так
[vba]
Код
ActiveSheet.DrawingObjects.Delete
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & .Cells(1, 5).Value _
                     & "_" & .Cells(8, 2).Value & ".xls", FileFormat:=-4143
[/vba]
Если сделать случайный номер 4 значным, то резко повышается вероятность повтора номера.
В этом случае используйте часть макроса nilem, проверяющую наличие файла документа в папке.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеУдалить кнопку так
[vba]
Код
ActiveSheet.DrawingObjects.Delete
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & .Cells(1, 5).Value _
                     & "_" & .Cells(8, 2).Value & ".xls", FileFormat:=-4143
[/vba]
Если сделать случайный номер 4 значным, то резко повышается вероятность повтора номера.
В этом случае используйте часть макроса nilem, проверяющую наличие файла документа в папке.

Автор - RAN
Дата добавления - 03.06.2014 в 11:53
VladKovaly Дата: Вторник, 03.06.2014, 15:49 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
RAN, ОК, буду пробовать. Спасибо за помощь.
 
Ответить
СообщениеRAN, ОК, буду пробовать. Спасибо за помощь.

Автор - VladKovaly
Дата добавления - 03.06.2014 в 15:49
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Генерация уникального номера ячейки и сохранение в имя файла (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!