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

Страницы: 1
Аналог ListBox для выделения значений в столбцах.
 
Здравствуйте.

При добавлении значений в ListBox в одну строчку и несколько столбцов, нельзя выделить какое-то одно значение в этой строке, она выделяется вся (строка). Задача заключается в использовании события ListBox Click, с помощью которого, при выборе любого, одного элемента в строке, любого столбца, выполняется какое-то условие.

Подскажите, пожалуйста, может есть какой-то подходящий для этой цели Control взамен ListBox, кроме ListView?
Изменено: НСС - 02.08.2024 16:40:35
Определить верхнюю границу массива.
 
Здравствуйте. Есть такой массив:
Код
    For b = 1 To 2
        
            Select Case b
                 Case 1
                      rnge = "A1:A30"
                 Case 2
                      rnge = "B1:B30"
            End Select
            
            q(b) = Range(rnge).Value
    Next b

Получаем:

q(1)(1,1) = значение 1
q(1)(1,2) = значение 2
...
q(1)(1,30) = значение 30

q(2)(1,1) = значение 1
q(2)(1,2) = значение 2
...
q(2)(1,30) = значение 30

Вопрос: как получить верхнюю границу массива? Ubound(q) выведет 2, а нужно 30. Не могу правильно записать функцию Ubound и какой это массив - трехмерный?

msgbox ubound(q.....)?
С помощью функции Format преобразовать числа в дату.
 
Всем привет. Подскажите, как поставить точку. Либо, если возможно, другим способом.
Код
Cells(35 + j, 2).Value = Format(j, "'00.") & Format(Z, "00") & ".24"
Получаем 14,03.24, а надо 14.03.24.  
Скопировать код листа в другие листы книги.
 
Здравствуйте. Как событие одного листа скопировать в события всех остальных листов? Например, такой код:
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveCell.Calculate
End Sub
Изменено: НСС - 12.12.2023 00:48:29
Ошибка при записи в массив из неактивного листа.
 
Здравствуйте. Не могу понять, что не так делаю. Подскажите пожалуйста.
Код
dim baseArray(), LR&

LR = Sheets("DB").Cells(Rows.Count, 2).End(xlUp).Row

redim baseArray(1 to LR)

For i = 1 To ubound(baseArray)
    baseArray(i) = Sheets("DB").Range(Cells(i, 2), Cells(i, 4))
Next i

Этот код привязан к кнопке, кнопка находится на форме. Форма запускается с "Листа1", а запись в массив должна производиться с другого листа "DB".

Суть в том, что ссылаясь на диапазон неактивного листа, появляется ошибка: Run-Time Error 1004. Application-defined or object-defined error. Если же я активирую лист DB и запускаю код, то все работает (т.е. запускаю код с листа DB). Причем в коде есть и другие массивы, они работают, ссылаясь на неактивный лист DB, типа:
Код
for i = 1 to LR
 a(i) = Sheets("DB").Range("A" & i).Value
next i

Изменено: НСС - 25.07.2023 01:38:39
Кэширование при парсинге сайта, Всегда одно и то же значение, как обойти кэширование.
 
Здравствуйте. Есть такой пример из интернета:
Код
Sub dollar()

Dim textHTTP As Object
Dim URL, Txt, Kurs As String
Dim posUSD, k As String

URL = "https://www.cbr.ru"
Set textHTTP = CreateObject("MSXML2.XMLHTTP")

textHTTP.Open "GET", URL, False
textHTTP.Send
'Ждем загрузку сайта статус 200
If textHTTP.Status = 200 Then
'Получаем текст сайта в переменной txt
    Txt = textHTTP.responseText
'Находим позицию строки USD
    posUSD = InStr(1, Txt, "USD")
    k = InStr(posUSD, Txt, "right mono-num")
    Kurs = Mid(Txt, k + 16, 8)
    MsgBox "Куср доллара ЦБ: " & Kurs
Else
    MsgBox "Нет отклика с сайта"
End If
Set textHTTP = Nothing

End Sub

И вот он выдает всегда один и тот же результат. Даже, если я меняю URL, меняю значения переменных. Повторное открытие книги, с уже измененным URL не помогает. Это какое-то кэширование? Как его обойти?  
Найти значение в диапазоне, соответствующее текущей дате.
 
Здравствуйте. Необходимо найти значение (вывести его в определенную ячейку), находящееся под текущей датой (даты меняются, соответственно и значения под ними тоже). Не смог разобраться с Индекс и Поискпоз. Подскажите, как решить эту задачу.

Сравнение слов (строк) в ячейках.
 
Здравствуйте. Подскажите, следующее:

В двух ячейках два слова или буквосочетания, неважно:
Абтыш
Абуба
Пишу два условия и получаю результаты:
1. =ЕСЛИ(I2>I1;"Yes";"No") → Yes.
2. =ЕСЛИ(I2<I1;"Yes";"No") → No.

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

Коды для символов:

Абтыш 192 225 242 251 248
Абуба  192 225 243 225 224 → Yes

В инете скудная, общая информация, не смог найти ответ.  
Изменено: НСС - 02.05.2022 23:29:40
Перейти на другой элемент коллекции в цикле For Each по условию.
 
Здравствуйте. Подскажите, как можно пропустить один элемент коллекции и перейти к другому в цикле For Each по условию?
Код
For Each a in Range ("A1:C1")
If a = 0 then ....
Next
Вот после then необходимо, чтобы ссылка переменной a, при А1 = 0, была на B1, если B1 = 0, тогда на C1. Как это сделать?

Более подробно для понимания вопроса:
Код
For Each a in Range ("A1:C1")
For Each b in Range ("A2:C1")

Next:Next
Цель избежать излишнего перебора, если хотя бы один элемент равен 0.
Изменено: НСС - 27.12.2021 09:29:26
Условие для поиска максимального значения в ячейках, в которых встречаются буквенные символы.
 
Пример, в ячейках значения вида: 5\3 5\2 6\3 9\2 7\2. Максимальное значение необходимо найти в цифрах до обратного слэша. Использую формулу массива {=МАКС(ЗНАЧЕН(ЛЕВСИМВ(C5:G5;1)))}. Максимальное значение из 5, 5, 6, 9 и 7 = 9.

Задача: найти максимальное значение вот в таком примере: 5\3 5\2 B\3 9\2 7\2. Здесь тоже 9 максимум, но каким условием его найти?
И подскажите, как найти максимальное значение если, допустим, до слэша все цифровые символы, но встречаются и однозначные, и двухзначные и трех, вида:
55\3 5\2 66666\3 9\2 77\2
Применение For Each. Составить массив сочетаний значений из трех диапазонов, пустые ячейки игнорировать
 
Здравствуйте. Имеется такой макрос:
Код
Private Sub CommandButton1_Click()
Dim a, b, c

For Each a In Range("A1:A3")
    For Each b In Range("B1:B3")
        For Each c In Range("C1:C3")
            If a <> 0 And b <> 0 And c <> 0 Then
                Debug.Print a & " " & b & " " & c
            End If
        Next
    Next
Next

End Sub
Массива в примере нет, подскажите, как его создать и заполнить, для последующего вывода значений в ячейки листа.
С For...Next мне проще создавать и заполнять массивы, а c For Each не получается.  
SpinButton.Value упирается в определенное значение и не хочет дальше его менять.
 
Всем привет.

Прикрутил SpinButton события: SpinDown и SpinUp с возможностью перестановки значений ячеек местами. Если нажимать и отпускать спинбаттон, то все нормально. Но, если нажать на кнопку спина и удерживать ее, то все изменения останавливаются на значении 43 или, если увеличить масштаб, то на 36. По умолчанию макс и мин 100/0 в свойствах спина. Еще больше уменьшил масштаб листа и спин останавливается на значении 52. Т.е. спин, при нажатии кнопки мыши и удерживания ее, работает до конца видимой части листа.

Можно ли решить эту проблему, что бы спин продолжал работать при нажатой кнопке, как если бы вы просто нажимали стрелку вниз или вверх и перемещались бы по ячейкам без ограничений? Не знаю, нужен ли пример в данном случае, может кто-то и без примера сможет дать ответ.  
Изменено: НСС - 20.12.2020 01:12:57
Возникает ошибка в макросе, если определенный лист не активен.
 
Столкнулся с такое проблемой. Есть два листа. Первый "Add", второй "SB".

При работе макроса, если активен лист "Add", появляется ошибка на Sheets("SB").Range(Cells(n2, 1), Cells(n2, 4)) = a,
Если же активен второй лист "SB", то макрос работает.

Можно в макросе активировать этот лист, но почему Sheets("SB").Range(Cells(n2, 1), Cells(n2, 4)) = a вызывает ошибку? Подскажите, что не так я делаю?
Изменено: НСС - 25.11.2020 22:33:42
Как отобразить промежуток времени в днях, часах, минутах, секундах
 
Здравствуйте. Имеется вот такой код:
Код
TextBox68.Value = Format(Range("B132").Value, "hh:mm:ss")
Как добавить в формат еще и дни, чтобы получилось так: "dd:hh:mm:ss". Не могу прислать файл примера по техническим причинам, чуть позже будет, если  вам потребуется.

У меня только один вариант: создать накопитель и условие, в котором при достижении 24 часов, счетчик будет прибавлять единицу каждый раз к дням. И, используя амперсанд, объединять данный формат с накопителем или просто использовать DateAdd.

Т.е. если 24:23:15, то получаем 01:00:23:15 - примерно так должно получиться.

Может подкинете совет какой-нибудь? Или готовое решение?
Обойти выполнение макроса при ToggleButton.Value = True
 
Здравствуйте. Имеются две кнопки CommandButton и ToggleButton. Необходимо, чтобы при вызове события CommandButton_Click значение ToggleButton принимало True, но при этом не срабатывал макрос в событии ToggleButton_Click. Можно ли это как-то реализовать?

Добавлено: событие ToggleButton_Click должно работать, при нажатии на сам выключатель, когда его значение false.
Код
Option Explicit

Private Sub CommandButton1_Click()
ToggleButton1.Value = True
End Sub

Private Sub ToggleButton1_Click()

If ToggleButton1.Value = True Then
        With ToggleButton1
            .BackColor = vbYellow
            .Caption = "Выйти"
        End With
    Else
        With ToggleButton1
            .Caption = "Войти"
            .BackColor = -2147483633
        End With
End If

MsgBox "ToggleButton.Value должно быть True, но макрос не должнен работать и это сообщение не должно появляться!"
End Sub 
Изменено: НСС - 12.08.2020 20:36:22
Числа из массива в ячейку листа.
 
Здравствуйте. Простой макрос:
Код
Option Explicit

Sub Numbers()
Dim i&, barr1()

ReDim barr1(1 To 50)
For i = 1 To UBound(barr1)
barr1(i) = Int(9 * Rnd + 0)
Next i

MsgBox Join(barr1, "")

Range("A1").Value = Join(barr1, "")
End Sub
MsgBox возвращает:



А в ячейке я получаю:



Откуда нули? Форматы ячеек менял. Чего я не понимаю, подскажите?
Изменено: НСС - 04.08.2020 23:09:42
Изменить названия листов названиями из массива без перебора листов
 
Здравствуйте. Никак не могу решить эту задачу.

а - динамический массив с названиями листов. Можно ли как-то выгрузить эти названия в сами листы без переборов листов, как это делаем с диапазонами: Range("A1").Resize(3, 1).Value = a?

Код
Dim shn&, i&, a()

shn = ActiveWorkbook.Sheets.Count

ReDim a(1 To shn)

For i = 1 To shn
    a(i) = "Задача №" & i
Next 
i
Меня не устраивает скорость выполнения такого макроса. Боюсь при большом количестве листов, это займет немало времени.
Код
Dim shn&, i&

shn = ActiveWorkbook.Sheets.Count

For i = 1 To shn
    With ActiveWorkbook
        If Sheets(i).Name <> "Задача №" & i Then
            Sheets(i).Name = "Задача №" & i
        End If
    End With
Next i
Поэтому и прошу помощи.

Или забить на этот каприз, все равно количество листов эксель ограничено оперативной памятью? И никто не будет создавать десятки тысяч листов и переименовывать их. Но все же интересно.  
Изменено: НСС - 23.07.2020 21:19:15
Повторить каждый элемент массива n-ое количество раз
 
Здравствуйте. В ячейке F1 набор слов или символов. Заполняю массив этими словами и далее извлекаю из него слова в ячейку A1 с повторениями. Каждый элемент массива повторяется три раза.



Код
Option Explicit

Private Sub CommandButton1_Click()
Dim a, j(), i&

a = Split([f1].Value)

ReDim j(0 To UBound(a))

For i = 0 To UBound(a)
    j(i) = a((UBound(a)) * Rnd)
    j(i) = j(i) & " " & j(i) & " " & j(i)
Next i

Range("A1") = Join(j, " ")
End Sub
Подскажите, как изменить код, чтобы я мог менять количество повторов? Например я указываю в ячейке B1 коэффициент 20 и слова повторяются в каждом элементе массива по 20 раз. Как это отобразить в коде, вместо этой строчки?
Код
 j(i) = j(i) & " " & j(i) & " " & j(i) 
Заполнить диапазон словами из ячейки
 
Здравствуйте. Прошу помощи. Условие задачи следующее:

в ячейке A1 находится набор слов разделенных пробелом, состоящий из 9553 знаков, включая пробелы. Необходимо взять каждое слово из этой ячейки и вставить по-порядку в ячейки диапазона A2:An.

Собственно, макрос я написал, но меня не устраивает время его выполнения - более 5 секунд и, как он сам выглядит. Помогите сделать код более лаконичным, не таким кривым и уменьшить время его выполнения.


Код
Option Explicit

Private Sub CommandButton1_Click()
Dim i&, a(), j(), txt As String, txtlength&, m&, t&

txt = Range("A1").Value
txtlength = Len(Range("A1").Value)
Range("A2:A" & txtlength).ClearContents

m = 1

ReDim a(1 To txtlength)
ReDim j(1 To txtlength, 1 To 1)

t = Timer

For i = 1 To txtlength
    a(i) = Mid(txt, i, 1)
    
    If Mid(txt, i, 1) = " " Then
       j(m, 1) = Join(a, "")
       ReDim a(i To txtlength)
        
            If i <> txtlength Then
                m = m + 1
            End If
                        
     End If
    
Next i

Range("A2").Resize(m, 1).Value = j

MsgBox Timer - t

End Sub
Изменено: НСС - 04.06.2020 16:38:22
При нажатии на ToggleButton1 все остальные ToggleButtons на форме должны принять значение false кроме ToggleButton1
 
Как отжать все эти ToggleButtons понятно, но как, при нажатии на ToggleButton1 на форме, "отжать" все остальные ToggleButton, при этом оставить значение ToggleButton1 = true? Подскажите?

В примере, все ToggleButton отжимаются, т.е. принимают значение false.  
Изменено: НСС - 28.05.2020 23:30:58
Изменить цвет символа в TextBox
 
Здравствуйте. Возможно ли изменить цвет определенного символа в Textbox, а не всего текста? В примере в поле текстбокса выводится слово "Привет" из ячейки A1. Можно ли изменить, в данном случае, цвет одной буквы, например, "в" на красный в самом тексбоксе? И еще можно ли создать условие, которое будет ослеживать вводимые символы в тексбокс и, если они не будут удовлетворять условию, менять их цвет на заданный?
Изменено: НСС - 23.05.2020 09:43:57
Событие TextBox. KeyPress (Access) нужна подсказка
 

На сайте Microsoft есть такая инструкция: https://docs.microsoft.com/ru-ru/office/vba/api/access.textbox.keypress Подскажите пожалуйста, куда вставлять код макроса:
Код
Private Sub ShipRegion_KeyPress(KeyAscii As Integer) 
 Dim strCharacter As String 
 
 ' Convert ANSI value to character string. 
 strCharacter = Chr(KeyAscii) 
 ' Convert character to upper case, then to ANSI value. 
 KeyAscii = Asc(UCase(strCharacter)) 
End Sub


Чтобы попробовать пример, добавьте приведенную ниже процедуру обработки события в форму, содержащую текстовое поле с именем шипрегион. Вот куда это вставлять? Не работает. Если нужен файл примера, прикреплю. Может быть без примера подскажите?


Подсчитать количество уникальных значений в диапазоне.
 
Задача: найти количество уникальных значений в диапазоне столбца. Скрин ниже показывает, условно: в первом - 3 (1,2,в), во втором - 2 (1,в), в третьем - 1 (2).
Имеется такое решение:
Код
{=СУММ(ЕСЛИ(ЕПУСТО(A2:A100000);0;1/СЧЁТЕСЛИ(A2:A100000;A2:A100000)))}

Но не устраивает скорость выполнения на больших диапазонах и слабеньких компьютерах. Пересчет замедляет внесение изменений в диапазоны или наоборот. Решение взято отсюда: https://www.planetaexcel.ru/techniques/14/187/. Требуется найти альтернативное решение. Прошу помощи.

И как убрать сообщение в H2: "формула в этой ячейке ссылается на диапазон, к которому прилегают другие значения"?  
Изменено: НСС - 08.11.2019 16:13:11
Подсчет совпадений в диапазонах по ячейкам
 
Здравствуйте. Помогите решить задачу. Имеются два диапазона ячеек с какими-то значениями. Ячейки диапазонов условно связаны между собой, т.е. (опять же условно) первая с первой, вторая со второй и тд. Необходимо подсчитать совпадения по "связанным" между собой ячейкам. Скриншот более четко раскрывает суть вопроса:

И еще одно условие, в ячейках могут сравниваться и текстовые значения, в виде букв.
Для меня важно решить задачу средствами эксель. С помощью VBA эта задача решается, как мне кажется, просто. Но не буду против ваших VBA вариантов, если кто откликнется. ;)  
Изменено: НСС - 28.10.2019 08:41:55
Быстрое удаление значений ячеек по условию
 
Подскажите решение задачи.

Имеется ряд ячеек, заполненных какими-то значениями. Пусть этих ячеек будет 10 000. По условию, если значение ячейки <= значению ячейки J5, то происходит удаление значения в неподходящей по условию ячейке.

Циклом это легко сделать. Но это слишком долго при большом количестве ячеек. Как удалить эти значения мгновенно?
Код
For i = 1 To 10000
    If Cells(i, 1).Value <= Range("J5") Then
    Cells(i, 1).ClearContents
    End If
Next i
 
Из массива в диапазон.
 
Подскажите, как из массива вставить в диапазон все значения разом, без циклического заполнения ячеек?
Код
Private Sub CommandButton1_Click()
Dim a(1 To 20) As Integer, i&

Range("A:A").ClearContents

For i = 1 To 20
        a(i) = Int(Rnd() * 21)
        Cells(i, 1).Value = a(i)
Next i


End Sub
Снять галочки с чекбоксов
 
Имеется ряд чексбоксов. При проставлении галочки в чекбоксе в соседней ячейке происходят изменения. В примере - слово "привет" при проставлении галочки, при ее удалении - "пока".

Пример с условным форматированием

Пример из вложенного файла.

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

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