При добавлении значений в ListBox в одну строчку и несколько столбцов, нельзя выделить какое-то одно значение в этой строке, она выделяется вся (строка). Задача заключается в использовании события ListBox Click, с помощью которого, при выборе любого, одного элемента в строке, любого столбца, выполняется какое-то условие.
Подскажите, пожалуйста, может есть какой-то подходящий для этой цели Control взамен ListBox, кроме ListView?
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 и какой это массив - трехмерный?
Здравствуйте. Не могу понять, что не так делаю. Подскажите пожалуйста.
Код
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
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.
Как сравниваются эти буквосочетания? Почему второе значение ячейки больше значения в первой? Каждый символ имеет свой код. И сравнение происходит посимвольно, верно? И как только код одного , отличного от других, символа принимает код больше, то выполняется первое условие, и неважно, какие кодовые значение имеют другие, последующие символы верно?
Пример, в ячейках значения вида: 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
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 события: SpinDown и SpinUp с возможностью перестановки значений ячеек местами. Если нажимать и отпускать спинбаттон, то все нормально. Но, если нажать на кнопку спина и удерживать ее, то все изменения останавливаются на значении 43 или, если увеличить масштаб, то на 36. По умолчанию макс и мин 100/0 в свойствах спина. Еще больше уменьшил масштаб листа и спин останавливается на значении 52. Т.е. спин, при нажатии кнопки мыши и удерживания ее, работает до конца видимой части листа.
Можно ли решить эту проблему, что бы спин продолжал работать при нажатой кнопке, как если бы вы просто нажимали стрелку вниз или вверх и перемещались бы по ячейкам без ограничений? Не знаю, нужен ли пример в данном случае, может кто-то и без примера сможет дать ответ.
Столкнулся с такое проблемой. Есть два листа. Первый "Add", второй "SB".
При работе макроса, если активен лист "Add", появляется ошибка на Sheets("SB").Range(Cells(n2, 1), Cells(n2, 4)) = a, Если же активен второй лист "SB", то макрос работает.
Можно в макросе активировать этот лист, но почему Sheets("SB").Range(Cells(n2, 1), Cells(n2, 4)) = a вызывает ошибку? Подскажите, что не так я делаю?
Как добавить в формат еще и дни, чтобы получилось так: "dd:hh:mm:ss". Не могу прислать файл примера по техническим причинам, чуть позже будет, если вам потребуется.
У меня только один вариант: создать накопитель и условие, в котором при достижении 24 часов, счетчик будет прибавлять единицу каждый раз к дням. И, используя амперсанд, объединять данный формат с накопителем или просто использовать DateAdd.
Т.е. если 24:23:15, то получаем 01:00:23:15 - примерно так должно получиться.
Может подкинете совет какой-нибудь? Или готовое решение?
Здравствуйте. Имеются две кнопки 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
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 возвращает:
А в ячейке я получаю:
Откуда нули? Форматы ячеек менял. Чего я не понимаю, подскажите?
а - динамический массив с названиями листов. Можно ли как-то выгрузить эти названия в сами листы без переборов листов, как это делаем с диапазонами: 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
Поэтому и прошу помощи.
Или забить на этот каприз, все равно количество листов эксель ограничено оперативной памятью? И никто не будет создавать десятки тысяч листов и переименовывать их. Но все же интересно.
Здравствуйте. В ячейке 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 раз. Как это отобразить в коде, вместо этой строчки?
Здравствуйте. Прошу помощи. Условие задачи следующее:
в ячейке 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
Как отжать все эти ToggleButtons понятно, но как, при нажатии на ToggleButton1 на форме, "отжать" все остальные ToggleButton, при этом оставить значение ToggleButton1 = true? Подскажите?
В примере, все ToggleButton отжимаются, т.е. принимают значение false.
Здравствуйте. Возможно ли изменить цвет определенного символа в Textbox, а не всего текста? В примере в поле текстбокса выводится слово "Привет" из ячейки A1. Можно ли изменить, в данном случае, цвет одной буквы, например, "в" на красный в самом тексбоксе? И еще можно ли создать условие, которое будет ослеживать вводимые символы в тексбокс и, если они не будут удовлетворять условию, менять их цвет на заданный?
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). Имеется такое решение:
Но не устраивает скорость выполнения на больших диапазонах и слабеньких компьютерах. Пересчет замедляет внесение изменений в диапазоны или наоборот. Решение взято отсюда: https://www.planetaexcel.ru/techniques/14/187/. Требуется найти альтернативное решение. Прошу помощи. И как убрать сообщение в H2: "формула в этой ячейке ссылается на диапазон, к которому прилегают другие значения"?
Здравствуйте. Помогите решить задачу. Имеются два диапазона ячеек с какими-то значениями. Ячейки диапазонов условно связаны между собой, т.е. (опять же условно) первая с первой, вторая со второй и тд. Необходимо подсчитать совпадения по "связанным" между собой ячейкам. Скриншот более четко раскрывает суть вопроса: И еще одно условие, в ячейках могут сравниваться и текстовые значения, в виде букв. Для меня важно решить задачу средствами эксель. С помощью VBA эта задача решается, как мне кажется, просто. Но не буду против ваших VBA вариантов, если кто откликнется.
Имеется ряд ячеек, заполненных какими-то значениями. Пусть этих ячеек будет 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
Имеется ряд чексбоксов. При проставлении галочки в чекбоксе в соседней ячейке происходят изменения. В примере - слово "привет" при проставлении галочки, при ее удалении - "пока". Пример с условным форматированием Пример из вложенного файла. Необходимо снять все галочки одновременно во всех чекбоксах. Перебором это сделать просто, но при большом количестве чекбоксов увеличивается время на выполнение изменений.
Снять же все галочки одновременно не получается, т.к. при снятии запускаются процедуры каждого из чекбоксов. Подкажите, как можно и можно ли решить эту задачу.