Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 След.
VBA: многоуровневая ссылка на элемент формы
 
Это понятно, что в данном примере он указывается один раз, но в реальном коде таких элементов может быть много. Но я так понимаю, возможность указать, что элемент формы - это элемент формы нет.

Хоть, конечно, можно пихнуть With ListBox после первого Then.
Изменено: somebox - 01.07.2019 19:28:55
VBA: многоуровневая ссылка на элемент формы
 
Есть такой кусок кода, который заполняет ListBox, находящийся на форме, определенными данными:
Код
Sub Main()

     Dim i As Integer
     Dim j As Integer

     i = 0

     With MainUserForm
          With .ListBox
               If .TextBox.Value = "" Then
                    .Clear
               Else: For Each Item In ItemsRange
                    For Each Number In NumbersRange
                         If Item = Number Then
                              .AddItem
                              For j = 1 To .ColumnCount
                                   .List(i, j - 1) = Item.Offset(0, j - 5)
                              Next
                              .List(i, 4) = Item
                              i = i + 1
                              j = j + 1
                         End If
                    Next
               Next
               End If
          End With
     End With

End Sub

Находится он в модуле. Для того, чтобы содержимое модуля получало доступ к элементам формы, необходимо дать ссылку на эту форму в самом коде. Проблема в том, что при попытке его выполнения программа не может определить, к чему относится элемент в 10-й строке (.TextBox.Value). Она воспринимает текстовое поле как метод ListBox и естественно вываливается с ошибкой. Есть ли какой-то, ммм... аккуратный вариант записи для подобных ссылок? Или придется для таких "неопознаваемых" элементов принудительно приписывать префикс?

Код
MainUserForm.TextBox.Value
Изменено: somebox - 01.07.2019 19:16:54
VBA: перевод фокуса на объекты формы при наведении курсора мыши
 
Как все сложно с этим вижуал бейсиком.
VBA: перевод фокуса на объекты формы при наведении курсора мыши
 
Не до конца понимаю, зачем здесь файл, но ладно.
VBA: перевод фокуса на объекты формы при наведении курсора мыши
 
Добрый вечер.

Подскажите, есть ли в VBA возможность передавать фокус на объект при наведении мыши? Например, есть форма, на ней ListBox со списком. Хочу, чтобы при наведении на него курсора, я мог листать список колесом мыши, не активируя предварительно ListBox щелчком.
Изменено: somebox - 26.06.2019 16:17:52
Дашборд: чтобы численность по вспомогательной оси накладывалась на производительгостьть, комбинированная диаграмма
 
Цитата
aleksey_dannik написал:
налаживалась на пр-ть
Чего?
Вызвать макросом функцию или процедуру
 
Цитата
БМВ написал:
Вопрос был про функции , а ответ о подпрограммах.
Я имел ввиду функции в понимании других ЯП. То, что в VBA оно называется подпрограммой, не знал. Так понимаю, функции здесь - нечто иное.
Вызвать макросом функцию или процедуру
 
Создал модуль, в него добавил Sub с аргументами и нужным мне куском кода:
Код
Sub SomeSubCode(i As Integer, x As Integer, firstRow As Range, SourceRange As Range)
     ...working code...
End Sub

Затем в основном коде вызвал Sub:
Код
SomeSubCode 0, 3, RowForInsertValue, EnvUsedRange
где 0, 3 и т.д. - значения для аргументов, используемых в Sub.

Имя Sub и модуля не должны совпадать. Иначе при запуске макроса будет выскакивать ошибка конфликта имен "Ambiguous name detected".
Изменено: somebox - 12.06.2019 17:42:08
Вызвать макросом функцию или процедуру
 
Вроде разобрался сам с горем пополам.

Цитата
RAN написал:
растолкуйте, что все нижеследующее означает
Для кого?
Вызвать макросом функцию или процедуру
 
Читаю документацию и никак не могу понять, можно ли в VBA писать "внешние" функции на подобии, например,
Код
void functionName() {
}
и
Код
int functionName() {
}
в "плюсах"?

Порой в коде попадаются одинаковые куски, хотелось бы это дело оптимизировать. Попробовал запихнуть кусок кода в отдельный модуль, но не понимаю, как к нему обращаться, да может это и невозможно вовсе.
VBA: вытащить часть строки, Mid, Len, InStr
 
Решение со Split мне нравится больше. Почитаю про эту функцию побольше. Спасибо.

Один вопрос. Что делает 1 в скобках после функции? Почему она записывается таким образом?

Кажись, догадался. Это индекс значения в массиве.
Изменено: somebox - 11.06.2019 11:53:42
VBA: вытащить часть строки, Mid, Len, InStr
 
V, если есть еще какое-то решение, я готов выслушать.

Цитата
V написал:
в последнем аргументе отнимите еще поиск первой кавычки
Где именно? Не могу сообразить.
VBA: вытащить часть строки, Mid, Len, InStr
 
Допустим, в первом столбце имеется перечень литературных произведений:

роман "Преступление и наказание"
поэма "Евгений Онегин"
пьеса "Вишневый сад"
и т.д.

Хочу по нажатию кнопки получить первое название (без кавычек и всего лишнего) в ячейке, к примеру, B1. Написал для модуля такой код:
Код
Sub PickAName_Click()
     Dim CleanName As String
     Dim SourceCell As Range
     Dim NameCell As Range
     Set SourceCell = ActiveWorkbook.Sheets("Лист1").Cells(1, 1)
     CleanName = Mid(SourceCell, InStr(SourceCell, """") + 1, Len(SourceCell) - 1)
     Set NameCell = ActiveWorkbook.Sheets("Лист1").Cells(1, 2)
     NameCell.Value = CleanName
Sub
Левую часть содержания он отрезает, а правую (вторую кавычку) - нет. В результате чего я получаю Преступление и наказание"

Почему-то уменьшение на единицу в сочетании с Len, находящегося в составе Mid, не работает. Почему? Как мне отрезать последнюю кавычку?
Изменено: somebox - 11.06.2019 10:52:58
Формула суммирования при нескольких условиях
 

Вставить в нужные вам ячейки
Код
=СУММЕСЛИМН(E3:E8;C3:C8;"кор")
и
Код
=СУММЕСЛИМН(E4:E9;C4:C9;"меш")

Изменено: somebox - 10.06.2019 15:32:09
VBA: использование массива без последнего значения
 
Цитата
Ігор Гончаренко написал:
от одинаковых списков избавились, зато преобрели геморрой с использованием одного
Спасибо за сочувствие, но нет, не приобрел.
VBA: использование массива без последнего значения
 
БМВ, для удаления последнего значения - идеальный вариант. Так и чувствовал, что в VBA есть какой-то встроенный метод. Только ListCount там действительно лишний.
VBA: использование массива без последнего значения
 
Спасибо. Буду пробовать ваши варианты.
VBA: использование массива без последнего значения
 
Не подскажите, как это сделать? Дело в том, что исходный массив может измениться (в любой момент могут добавиться Витя, Рома и Света).
VBA: использование массива без последнего значения
 
Один и тот же массив используется в двух комбобоксах. В первом список должен быть полным, во втором - без последнего значения. Чтобы не плодить одинаковые списки, решил использовать один на все.
Изменено: somebox - 10.06.2019 13:27:46
VBA: использование массива без последнего значения
 
Попробовал сделать
Код
ReDim Preserve MyList(UBound(MyList) - 1)

Размер массива уменьшился на последнее значение. А как теперь вернуть его обратно? Не могу разобраться.
VBA: использование массива без последнего значения
 
Хотел поинтересоваться, можно ли использовать массив без последнего (или любого другого) значения?

Например, в коде есть массив:
Код
MyList = Array("Маша", "Лена", "Петя", "Саша")

Есть комбобокс, в свойствах которого указано следующее:
Код
With ComboBox
     .List = MyList
     .Value = MyList(0)
End With

Можно ли как-то минимумом телодвижений убрать из списка, к примеру, Сашу?
VBA: копирование значения ячеек по условию
 
Хотя нет. Работает, да не так. Поторопился я.

Данные на первый лист вставляются, но почему-то в ячейки с такими же адресами, что и у ячеек на втором листе. То есть во втором у меня Лондон и Манчестер находятся в А2, А3 и на первый лист они добавляются в А2, А3. Хотя писал
Код
Sheets("Лист1").Cells(1 + i, 1).Value = Cell.Offset(0, -2).Value
Sheets("Лист1").Cells(1 + i, 2).Value = Cell.Offset(0, -1).Value
Предполагалось, что будет создаваться новая таблица из избранных значений, а они просто копируются "как есть".

Все. Нашел ошибку. Надо было i = i + 1 поставить в блок If.
Изменено: somebox - 06.06.2019 21:46:39
VBA: копирование значения ячеек по условию
 
Да вроде уже читал все эти инструкции, но посмотрю еще. Видимо, что-то упустил.

За код спасибо. Работает.
VBA: копирование значения ячеек по условию
 
А почему не работал предыдущий Range?

И
Код
With Sheets("Лист2")
     Set countryList = .Range("C1:C" & .Cells(.Rows.Count, "C").End(xlUp).Row)
End With
должен быть таким сложным, с таким количеством вложений (и Cells, и Rows.Count, и End)? Я пытаюсь понять, как я должны был сам до такой конструкции додуматься.
Изменено: somebox - 06.06.2019 20:28:02
VBA: копирование значения ячеек по условию
 
Так я ж написал. Нужно, чтобы программа отобрала значения из первых двух столбцов таблицы со второго листа по условию, находящемуся в третьем столбце. После составила из них новую таблицу на первом листе. Например, я указываю в открывшемся окне слово "Англия", и программа копирует все значения из таблицы, касаемо Англии.
VBA: копирование значения ячеек по условию
 
Окей. А как верно?
VBA: копирование значения ячеек по условию
 
Знаю, что тема не новая, но никак не могу решить проблему. Есть код:
Код
Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim country As Variant
    Dim countryList As Range
    i = 0
    country = TextBox1.Value
    Set countryList = Worksheets("Лист2").Range("C1").End(xlDown)
    For Each Cell In countryList
        If Cell.Value = country Then
            Cell.Offset(0, -2).Value = Worksheets("Лист1").Cells(1 + i, 1).Value
            Cell.Offset(0, -1).Value = Worksheets("Лист1").Cells(1 + i, 2).Value
        End If
        i = i + 1
    Next
End Sub
Нужно, чтобы по условию введенному в поле окна, открывающегося по нажатию кнопки, программа копировала значение определенных ячеек со второго листа на первый. Причем не ячейки с самим значением, а соседние. То есть делала выборку. Вроде ничего сложного, но почему-то у меня ничего не выходит. Программа даже не ругается, просто молчит.
Общий список из двух других
 
Игорь, спасибо, что помогаете.

Попробовал отредактировать вашу формулу, немного изменив условие, но что-то она не хочет работать. Нужно, чтобы поиск теперь шел не по всем данным, указанным в ячейках C1 и D1, а только части (ячейку D вообще выкинул). И нужно, чтобы результат был не в выпадающем списке, а просто писался в ячейках подряд.
Общий список из двух других
 
Юрий М, не совсем понял комментарий.

Все же, кто-нибудь может дать решение с добавлением условия? Пытался как-то сам изменить строку
Код
=IF(COUNTA($Лист2.A:A)>=ROW();INDEX($Лист2.A:A;ROW());IF(COUNTA($Лист2.A:A)+COUNTA($Лист3.A:A)>ROW();INDEX($Лист3.A:A;ROW()+1-COUNTA($Лист2.A:A))))
но ничего не вышло. :(

Вообще интересно было бы почитать разбор формулы.
Общий список из двух других
 
Отлично. Почти то что нужно. Усложним задание, добавив условия. Нужно составить список только из тех значений, рядом с которыми стоят указанные номера. К тому же один из диапазонов сместился.
Страницы: 1 2 3 След.
Наверх