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

Вход

Регистрация

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

 

= Мир MS Excel/Вызываемое окно для ввода данных для переменных списком. - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Вызываемое окно для ввода данных для переменных списком.
koyaanisqatsi Дата: Вторник, 14.11.2017, 10:47 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте. Давно не беспокоил вас. И уже очень соскучился)

мне тут когда-то давно помогли с написанием такого макроса:

[vba]
Код
Sub Change_date()
    ActiveWorkbook.Names.Add Name:="myDate", RefersToR1C1:=Format(Date, "dd.mm.yyyy")
    Dim DateA
    Do
        DateA = InputBox("Введите актуальную дату.                    Вызвать изменение даты можно нажав Ctrl+Q", "Запрос.", Date + 1)
    Loop While Not IsDate(DateA)
    ActiveWorkbook.Names("myDate").RefersToR1C1 = DateA
End Sub
[/vba]

При открытии файла у меня появляется окошко где уже задана дата завтрашенего дня и я могу либо согласиться либо исправить на нужную мне например сегодняшнюю.

Подскажите пожалуйста как внутрь этого модуля еще вписать много подобных формул например yearApple, yearApple, yearpotatoes и чтоби они вниз под первым каждая выводилась и можно было каждую задавать отдельно. Попробовал сам добавить клон первого модуля но вышла чепуха. В идеале бы конечно чтобы он еще запоминал последнее введенное число а не действовал по принципу завтрашнего дня. как в формуле myDate

Спасибо огромное.

[vba]
Код

Sub Change_date()
    ActiveWorkbook.Names.Add Name:="myDate", RefersToR1C1:=Format(Date, "dd.mm.yyyy")
    Dim DateA
    Do
        DateA = InputBox("Введите актуальную дату.                    Вызвать изменение даты можно нажав Ctrl+Q", "Запрос.", Date + 1)
    Loop While Not IsDate(DateA)
    ActiveWorkbook.Names("myDate").RefersToR1C1 = DateA
    
    ActiveWorkbook.Names.Add Name:="yearApple", RefersToR1C1:=Format(Date, "yyyy")
    Dim DateB
    Do
        DateB = InputBox("Введите актуальный год для яблока.                    Вызвать изменение даты можно нажав Ctrl+Q", "Запрос.", Date + 1)
    Loop While Not IsDate(DateB)
    ActiveWorkbook.Names("yearApple").RefersToR1C1 = DateB
    
End Sub

[/vba]

Не выводить все списком спрашивает два раза. ну а это естественно не удобно если переменных будет много. И не может год показывать как именно год почему не смотря на то что я указал Format(Date, "yyyy") всеравно спрашивает и месяц и день.
К сообщению приложен файл: __1.xlsm (67.0 Kb)


Сообщение отредактировал koyaanisqatsi - Вторник, 14.11.2017, 13:16
 
Ответить
СообщениеЗдравствуйте. Давно не беспокоил вас. И уже очень соскучился)

мне тут когда-то давно помогли с написанием такого макроса:

[vba]
Код
Sub Change_date()
    ActiveWorkbook.Names.Add Name:="myDate", RefersToR1C1:=Format(Date, "dd.mm.yyyy")
    Dim DateA
    Do
        DateA = InputBox("Введите актуальную дату.                    Вызвать изменение даты можно нажав Ctrl+Q", "Запрос.", Date + 1)
    Loop While Not IsDate(DateA)
    ActiveWorkbook.Names("myDate").RefersToR1C1 = DateA
End Sub
[/vba]

При открытии файла у меня появляется окошко где уже задана дата завтрашенего дня и я могу либо согласиться либо исправить на нужную мне например сегодняшнюю.

Подскажите пожалуйста как внутрь этого модуля еще вписать много подобных формул например yearApple, yearApple, yearpotatoes и чтоби они вниз под первым каждая выводилась и можно было каждую задавать отдельно. Попробовал сам добавить клон первого модуля но вышла чепуха. В идеале бы конечно чтобы он еще запоминал последнее введенное число а не действовал по принципу завтрашнего дня. как в формуле myDate

Спасибо огромное.

[vba]
Код

Sub Change_date()
    ActiveWorkbook.Names.Add Name:="myDate", RefersToR1C1:=Format(Date, "dd.mm.yyyy")
    Dim DateA
    Do
        DateA = InputBox("Введите актуальную дату.                    Вызвать изменение даты можно нажав Ctrl+Q", "Запрос.", Date + 1)
    Loop While Not IsDate(DateA)
    ActiveWorkbook.Names("myDate").RefersToR1C1 = DateA
    
    ActiveWorkbook.Names.Add Name:="yearApple", RefersToR1C1:=Format(Date, "yyyy")
    Dim DateB
    Do
        DateB = InputBox("Введите актуальный год для яблока.                    Вызвать изменение даты можно нажав Ctrl+Q", "Запрос.", Date + 1)
    Loop While Not IsDate(DateB)
    ActiveWorkbook.Names("yearApple").RefersToR1C1 = DateB
    
End Sub

[/vba]

Не выводить все списком спрашивает два раза. ну а это естественно не удобно если переменных будет много. И не может год показывать как именно год почему не смотря на то что я указал Format(Date, "yyyy") всеравно спрашивает и месяц и день.

Автор - koyaanisqatsi
Дата добавления - 14.11.2017 в 10:47
_Boroda_ Дата: Вторник, 14.11.2017, 11:07 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
- Прочитайте Правила форума
- Исправьте название темы согласно п.2 Правил форума


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение- Прочитайте Правила форума
- Исправьте название темы согласно п.2 Правил форума

Автор - _Boroda_
Дата добавления - 14.11.2017 в 11:07
koyaanisqatsi Дата: Вторник, 14.11.2017, 13:15 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Я правда старался сформулировать. У меня с этим всегда проблемы. хотя наверно это популярная проблема новичков. И согласен что у меня вышло плохо. Пробую еще раз. пожалуйста подскажите в этот раз получилось или лучше сформулировать иначе ? (хотя последний вопрос конечно глупо звучит)
На самом деле это очень ценное правило. Сам не раз убеждался. Не поверите может. но я это даже на собственной шкуре испытывал. Я вводил запрос в яндекс и находил свои темы на этом форуме и понимал потом как сделать надо.


Сообщение отредактировал koyaanisqatsi - Вторник, 14.11.2017, 13:48
 
Ответить
Сообщение_Boroda_, Я правда старался сформулировать. У меня с этим всегда проблемы. хотя наверно это популярная проблема новичков. И согласен что у меня вышло плохо. Пробую еще раз. пожалуйста подскажите в этот раз получилось или лучше сформулировать иначе ? (хотя последний вопрос конечно глупо звучит)
На самом деле это очень ценное правило. Сам не раз убеждался. Не поверите может. но я это даже на собственной шкуре испытывал. Я вводил запрос в яндекс и находил свои темы на этом форуме и понимал потом как сделать надо.

Автор - koyaanisqatsi
Дата добавления - 14.11.2017 в 13:15
_Boroda_ Дата: Вторник, 14.11.2017, 14:22 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Ага, новичок с 645-ю сообщениями за 4.5 года.

Так получше. Тоже не особо, но хоть как-то

Вы про вот так имели в виду?
[vba]
Код
Sub Change_date()
    ActiveWorkbook.Names.Add Name:="myDate", RefersToR1C1:=Format(Date, "dd.mm.yyyy")
    Dim DateA
    txt_ = "Введите актуальную дату."
    txt_ = txt_ & vbLf & "Вызвать изменение даты можно нажав Ctrl+Q"
    Do
        DateA = InputBox(txt_, "Запрос.", Date + 1)
    Loop While Not IsDate(DateA)
    ActiveWorkbook.Names("myDate").RefersToR1C1 = DateA
    
    ActiveWorkbook.Names.Add Name:="yearApple", RefersToR1C1:=Format(Date, "yyyy")
    Dim DateB
    txt_ = "Введите актуальный год для яблока."
    txt_ = txt_ & vbLf & "Вызвать изменение даты можно нажав Ctrl+Q"
    Do
        DateB = InputBox(txt_, "Запрос.", Format(Date + 1, "yyyy"))
    Loop While Not IsDate("1/1/" & DateB)
    ActiveWorkbook.Names("yearApple").RefersToR1C1 = DateB
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеАга, новичок с 645-ю сообщениями за 4.5 года.

Так получше. Тоже не особо, но хоть как-то

Вы про вот так имели в виду?
[vba]
Код
Sub Change_date()
    ActiveWorkbook.Names.Add Name:="myDate", RefersToR1C1:=Format(Date, "dd.mm.yyyy")
    Dim DateA
    txt_ = "Введите актуальную дату."
    txt_ = txt_ & vbLf & "Вызвать изменение даты можно нажав Ctrl+Q"
    Do
        DateA = InputBox(txt_, "Запрос.", Date + 1)
    Loop While Not IsDate(DateA)
    ActiveWorkbook.Names("myDate").RefersToR1C1 = DateA
    
    ActiveWorkbook.Names.Add Name:="yearApple", RefersToR1C1:=Format(Date, "yyyy")
    Dim DateB
    txt_ = "Введите актуальный год для яблока."
    txt_ = txt_ & vbLf & "Вызвать изменение даты можно нажав Ctrl+Q"
    Do
        DateB = InputBox(txt_, "Запрос.", Format(Date + 1, "yyyy"))
    Loop While Not IsDate("1/1/" & DateB)
    ActiveWorkbook.Names("yearApple").RefersToR1C1 = DateB
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 14.11.2017 в 14:22
koyaanisqatsi Дата: Вторник, 14.11.2017, 15:03 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Да действия правильно теперь выполняет но спрашиват дважды. Хотелось чтобы в одном диалоговом окне было много окошек куда можно вводить данные
1 текущая дата
2 год на яблоки
3 год на капусту
4 год на свеклу
5 год на апельсины

и если можно чтобы запоминал последние введенные данные. про запоминал могу чтото на подобии как было с принтером сделать он сохранял в ячейку на отдельном листе
хотя((( я сам конечно не смогу разобраться как это сделать. но в макросе для выбора принтера там он запоминает последний выбранный.

[vba]
Код
Sub Печать_на_Zebra()
Dim aPr$, s$, AllPrinters As Object, printer As Object, n%, m, primary_printer$, print_name$
primary_printer = Sheets("printer").Cells(1, "a").Value ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию
' primary_printer = "ZDesigner GC420d (перенаправлено 16)" ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию
aPr = Application.ActivePrinter
Set AllPrinters = GetObject("winmgmts://./root/CIMV2").ExecQuery("SELECT * FROM Win32_Printer", , 48)
'Получаем список принтеров
    For Each printer In AllPrinters
        n = n + 1
        s = s & vbCr & n & ": " & printer.Name
        If printer.Name = primary_printer Then print_name = primary_printer: Exit For ' если primary_printer найден в списке доступных
    Next
    s = Right(s, Len(s) - 1)
'Если такого принтера не найдено:
If print_name = "" Then
    If InStr(1, s, vbCr, vbTextCompare) = 0 Then MsgBox "Error no printers": Exit Sub
    m = Split(s, vbCr)
    n = Val(InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1))
    If n > UBound(m) Or n = 0 Then MsgBox "Error no printers with this number": Exit Sub
    print_name = Split(m(n - 1), " ", 2)(1)
    Sheets("printer").Cells(1, "a").Value = print_name
End If
'===============================
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=print_name
'Application.ActivePrinter = aPr ' Возврат активного принтера
End Sub

[/vba]

PS: Ну я имел ввиду в экселе новичок. С формулами немного уже понимаю а вот с VBA совсем ничего не знаю. конечно новичок.


Сообщение отредактировал koyaanisqatsi - Вторник, 14.11.2017, 15:05
 
Ответить
Сообщение_Boroda_, Да действия правильно теперь выполняет но спрашиват дважды. Хотелось чтобы в одном диалоговом окне было много окошек куда можно вводить данные
1 текущая дата
2 год на яблоки
3 год на капусту
4 год на свеклу
5 год на апельсины

и если можно чтобы запоминал последние введенные данные. про запоминал могу чтото на подобии как было с принтером сделать он сохранял в ячейку на отдельном листе
хотя((( я сам конечно не смогу разобраться как это сделать. но в макросе для выбора принтера там он запоминает последний выбранный.

[vba]
Код
Sub Печать_на_Zebra()
Dim aPr$, s$, AllPrinters As Object, printer As Object, n%, m, primary_printer$, print_name$
primary_printer = Sheets("printer").Cells(1, "a").Value ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию
' primary_printer = "ZDesigner GC420d (перенаправлено 16)" ' Вместо "doPDF v7" - впишите нужный принтер по умолчанию
aPr = Application.ActivePrinter
Set AllPrinters = GetObject("winmgmts://./root/CIMV2").ExecQuery("SELECT * FROM Win32_Printer", , 48)
'Получаем список принтеров
    For Each printer In AllPrinters
        n = n + 1
        s = s & vbCr & n & ": " & printer.Name
        If printer.Name = primary_printer Then print_name = primary_printer: Exit For ' если primary_printer найден в списке доступных
    Next
    s = Right(s, Len(s) - 1)
'Если такого принтера не найдено:
If print_name = "" Then
    If InStr(1, s, vbCr, vbTextCompare) = 0 Then MsgBox "Error no printers": Exit Sub
    m = Split(s, vbCr)
    n = Val(InputBox("input Number of printer:" & vbCr & s, "Not found:" & primary_printer, 1))
    If n > UBound(m) Or n = 0 Then MsgBox "Error no printers with this number": Exit Sub
    print_name = Split(m(n - 1), " ", 2)(1)
    Sheets("printer").Cells(1, "a").Value = print_name
End If
'===============================
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:=print_name
'Application.ActivePrinter = aPr ' Возврат активного принтера
End Sub

[/vba]

PS: Ну я имел ввиду в экселе новичок. С формулами немного уже понимаю а вот с VBA совсем ничего не знаю. конечно новичок.

Автор - koyaanisqatsi
Дата добавления - 14.11.2017 в 15:03
_Boroda_ Дата: Вторник, 14.11.2017, 15:12 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Цитата koyaanisqatsi, 14.11.2017 в 15:03, в сообщении № 5 ()
чтобы в одном диалоговом окне было много окошек
Это нужно форму делать
http://baguzin.ru/wp/rabota-s-polzovatelskimi-formami-v-vba/
http://www.programm-school.ru/rabota_s_formami_v_excel.html
=============
Цитата koyaanisqatsi, 14.11.2017 в 15:03, в сообщении № 5 ()
если можно чтобы запоминал последние введенные данные
Да, пишите их на лист
Цитата koyaanisqatsi, 14.11.2017 в 15:03, в сообщении № 5 ()
Sheets("printer").Cells(1, "a").Value = print_name

а потом считывайте
Цитата koyaanisqatsi, 14.11.2017 в 15:03, в сообщении № 5 ()
primary_printer = Sheets("printer").Cells(1, "a").Value


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Цитата koyaanisqatsi, 14.11.2017 в 15:03, в сообщении № 5 ()
чтобы в одном диалоговом окне было много окошек
Это нужно форму делать
http://baguzin.ru/wp/rabota-s-polzovatelskimi-formami-v-vba/
http://www.programm-school.ru/rabota_s_formami_v_excel.html
=============
Цитата koyaanisqatsi, 14.11.2017 в 15:03, в сообщении № 5 ()
если можно чтобы запоминал последние введенные данные
Да, пишите их на лист
Цитата koyaanisqatsi, 14.11.2017 в 15:03, в сообщении № 5 ()
Sheets("printer").Cells(1, "a").Value = print_name

а потом считывайте
Цитата koyaanisqatsi, 14.11.2017 в 15:03, в сообщении № 5 ()
primary_printer = Sheets("printer").Cells(1, "a").Value

Автор - _Boroda_
Дата добавления - 14.11.2017 в 15:12
koyaanisqatsi Дата: Вторник, 14.11.2017, 18:10 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 713
Репутация: 15 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, спасибо. буду изучать ковырять. очень по делу ответ. и плюс сам если получится буду немного умнее )
 
Ответить
Сообщение_Boroda_, спасибо. буду изучать ковырять. очень по делу ответ. и плюс сам если получится буду немного умнее )

Автор - koyaanisqatsi
Дата добавления - 14.11.2017 в 18:10
  • Страница 1 из 1
  • 1
Поиск:

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