Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Запретить переход на следующий TextBox при определенном условии, Не получается сохранить фокус с помощью SetFocus и события AfterUpdate
 
Здравствуйте, уважаемый эксперты!
Помогите пожалуйста решить задачу.
В форме имеются несколько TextBox, которые последовательно заполняются.
Не получается реализовать следующее:
Если пользователь ввел "0" и переходит на следующее поле, то вылетает соответствующий MsgBox, некорректный TextBox очищается, а фокус остается на месте.
Код
Private Sub Количество_AfterUpdate()
    If Количество <= 0 Then
        MsgBox "Введите число больше нуля"
        Количество = ""
        Количество.SetFocus
        Exit Sub
    End If
End Sub
Такой подход не срабатывает, фокус все равно переходит на следующий TetxtBox.
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
Выделение нескольких строк в таблице через форму, Не знаю, как выделить несколько строк в основной таблице, используя listbox multiselect extended
 
Приветствую вас, уважаемые эксперты!
Помогите пожалуйста решить вопрос с выделением строк в таблице.
Имеется условная таблица, на основе которой создается форма с listbox. По событию change могу выделять по одной строке в основной таблице, но очень бы хотелось иметь возможность выделить множество строк, причем непоследовательно.
Как добавить к уже выделенному диапазону новое выделение, не снимая старого?



Код
Option Explicit
Public Таблица1 As ListObject

Private Sub ListBox1_Change()
    Dim i As Integer
    
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            Таблица1.ListRows(i + 1).Range.Select
        End If
    Next
End Sub

Private Sub UserForm_Initialize()

    Set Таблица1 = ThisWorkbook.Worksheets("Лист1").ListObjects("Таблица1")
        
    With ListBox1
        ListBox1.Clear
        Dim i As Integer
        For i = 1 To Таблица1.ListRows.Count
            .AddItem
            .Column(0, .ListCount - 1) = Таблица1.DataBodyRange(i, 2)
            .Column(1, .ListCount - 1) = Таблица1.DataBodyRange(i, 4)
        Next
    End With
    
End Sub
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
Найти ошибку в макросе, При определенной условиях после закрытия формы, Excel вылетает
 
Приветствую!
Пишу достаточно большую программу и сломал уже себе весь мозг, пытаясь понять, почему после закрытия формы - программа вылетает.
Задача разобраться в причинах сбоя и соответственно помочь устранить проблему.
Цена вопроса: 500руб. на карту сбербанка.

p.s.
В тему обычных вопросов выкладывать проект не хочу.
Понимаю, что в чужом коде разбираться дело сомнительное, поэтому лучше наверное даже связаться по скайпу, чтобы я сразу указал, где происходит затык.
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
Событие для группы элементов управления с похожим именем, Выполнить событие для определенных контролов, не перебирая все, находящиеся на форме
 
Приветствую, уважаемые эксперты!
Прошу оказать помощь в решении следующей задачи:
  • Имеется форма.
  • Главный элемент управления, определяющий, что за параметры попадут в таблицу является multipage.
  • На каждой странице multipage находятся элементы управления, часть из которых имеет однотипное имя (txtD_19; txtD_20 и т.д.)
  • По нажатию на кнопку "Добавить"  - определяется в какой столбец добавить данные и затем они заносятся в таблицу.
На данный момент, разработанный мной макрос проверят все названия элементов на вкладке на соответствие маске, например like "txtD_*" и заносит данные в определенный столбец на основании названия элемента.

Так как в реальном проекте элементов управления много, то быстродействие такого способа не очень устраивает.
Пробовал прописывать код под каждый TextBox, быстродействие лучше, однако терпения писать код под каждый TextBox у меня не хватает, тем более, что каждый TextBox надо еще и проверить.

В уме я представляю себе следующий вариант решения:
Объединить в массив набор нужный элементов и проводить проверку только по элементам в этом массиве, а не на всей форме.
Однако, как реализовать такой алгоритм я не знаю и очень надеюсь на вашу помощь.

Прикладываю минимизированный пример.
Изменено: Valo - 4 Янв 2019 10:25:18
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
Макрос сохранения книги. Перехват ошибки при отказе от перезаписи
 
Здравствуйте, уважаемые эксперты!
Понимаю, что вопросов о сохранения книги с помощью макроса великое множество, но найти именно то, с чем у меня проблема - не получилось. Поэтому надеюсь на вашу помощь.
Собственно вот макрос, который я составил:
Код
Sub Сохранение()

    Папка = "D:\" & Range("A1")
    Подпапка = Range("A2")
    Путь = Папка & "\" & Подпапка
    Название = Range("A3")
    ИмяФайла = Путь & "\" & Название
    
    If Dir(Папка, vbDirectory) = "" Then
        MkDir (Папка)
        ChDir (Папка)
        Else: ChDir (Папка)
    End If
    
    If Dir(Путь, vbDirectory) = "" Then
        MkDir (Путь)
        ChDir (Путь)
        Else: ChDir (Путь)
    End If
    
    ActiveWorkbook.SaveAs (ИмяФайла)

End Sub
Меня почти полностью устраивает, как он работает, если бы не одно но:
Когда я сохраняю файл под уже существующем именем, то Excel меня вполне справедливо спрашивает, хочу ли я перезаписать файл.
Если я отвечаю "НЕТ", то появляется ошибка:

Мне бы хотелось, чтобы если я ответил "НЕТ", то ошибка бы не вылезала.

Можно в принципе написать вначале On erroe resume next, но что-то мне подсказывает, что это не лучший вариант.
Может есть способ предотвратить именно эту ошибку? Или как-то завершить макрос при ответе "НЕТ"?
Изменено: Valo - 30 Ноя 2018 20:10:43
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
Полные названия месяцев при группировке полей в сводной таблице, Вместо "янв" - январь, "фев" - февраль и т.д.
 
Приветствую, уважаемые эксперты!
Помогите пожалуйста решить следующую задачу.
В сводной таблице, при группировке дат по месяцам, отображаются сокращенные названия месяцев.
Очень хотелось бы понять, как отображать полные названия месяцев? Не "янв", а январь и т.д.
Не совсем еще понимаю, почему через обычный "формат ячеек" не получается поправить это дело?
Изменено: Valo - 12 Ноя 2018 20:08:10
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
Пользовательская функция для поиска пересечения в кросс-таблице по 2-м неточным числовым значениям осей
 
Уважаемые эксперты по Excel и VBA!
Многие часы ломаю голову, пытаясь написать пользовательскую функция с помощью разбора обозначений формул при записывании макроса, но все бес толку.
В работе часто приходится использовать достаточно большую формулу массива для поиска значения в диапазоне на пересечении ближайших больших значений по строкам и столбцам:

Код
{=ИНДЕКС(ЗНАЧЕНИЯ;
ПОИСКПОЗ(МИН(ЕСЛИ(ДИАПАЗОН_Y>=Искомый_Y;ДИАПАЗОН_Y;""));ДИАПАЗОН_Y;0);
ПОИСКПОЗ(МИН(ЕСЛИ(ДИАПАЗОН_X>=Искомый_X;ДИАПАЗОН_X;""));ДИАПАЗОН_X;0))}

Задача состоит в том, чтобы пользовательская функция приобрела вид:
Код
=ПОБЛИЖБОЛ(ЗНАЧЕНИЯ; ДИАПАЗОН_Y; Искомый_Y; ДИАПАЗОН_X; Искомый_X)

Прошу помощи в создании пользовательской функции в Excel средствами VBA, используя в коде уже имеющиеся в EXCEL формулы (ИНДЕКС; ПОИСКОПОЗ и т.д.).
Изменено: Valo - 23 Фев 2018 01:44:48
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
Список значений, удовлетворяющих условию
 
Приветствую!
Не могу решить казалось бы простую задачу.
Имеется столбец "Дата" и столбец "Доступно".
В столбце "Доступно" может присутствовать ноль.

Задача:
Создать список допустимых значений в поле "Выбрать дату".
Допустимыми значениями являются значения из столбца "Дата" для которых "Доступно" больше нуля.

Дата Доступно
01.02.2016
6
02.03.2016
0
01.07.2017
7
03.05.2017
4
26.06.2017
7
11.07.2017
0
В данном примере, хочу получить список из значений: 01.02.2016; 01.07.2017; 03.05.2017; 26.06.2017

Как вариант пробовал создавать отдельную таблицу с формулой, которая выводит значения больше ноля, а для нулевых выводит пустое значение "". Все бы хорошо, только при создании списка, в выбор "по стрелке" попадают эти самые пустые значения "".

Надеюсь на вашу помощь!
Изменено: Valo - 30 Авг 2017 20:39:11
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
Страницы: 1
Наверх