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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 69 След.
установить значения для combobox.value
 
Здравствуйте.
Написал некий клас для заполнения контролов на форме значениями выбраной строки таблицы согласно таблице сопоставления (заголовок столбца таблицы, название контрола).
Но столкунулся с проблеемой при установке значения для комбобокса - Combobox1.Value = vValue, еесли vValue - число. Появляется ошибка Could not set the value property. Invalid property value.
При чем когда vValue - текст, все работает.

Combobox.Text - не подходит, так как Combobox содержит несколько столбцов, в первом обычно скрытый Id.
Combobox.ColumnCount = 2
Combobox.BoundColumn = 1
Combobox.ColumnWidth = 0;

Этим достигается эффект, когда пользователь видит читаемый текст,  а Combobox.Value выводит Id (1 столбец).
Понимаю, что можно обойти установкой Text или Listindex, но это неудобно, так как приходится усложнять таблицу сопоставления.
Также не охота переводить все числовые Id в Guid.
Кто может подсказать в чем причина такого поведения комбобокса?
Спасибо.
Изменено: Dima S - 20.02.2022 16:03:33
Глюк - рандомное копирование массива на лист
 
Цитата
Dima S написал:
что такого может содержать элемент массива, чтобы "затереть" данные другого элемента?
черт возьми - таки может!
длина строки некоторых ячеек из последних 4 столбцов превышала максимальный размер данных в ячейке - из-за этого такой странный эффект.
убрал последние 4 столбца - все пишет.

Извините что морочил голову)
Может кому то пригодится и такой опыт)
Глюк - рандомное копирование массива на лист
 
упростил.
получение массива из запроса опустим, ибо массив заполняется и исходный массив один и тот же для двух случаев.
Все сводится к тому что

Код
tabl.DataBodyRange.Value = rezult  'Value2/Formula


не работает (то есть записывает только числовые и НЕКОТОРЫЕ СТРОЧНЫЕ значения)

Код
        For i = LBound(rezult) To UBound(rezult)
            For n = LBound(rezult, 2) To UBound(rezult, 2)
                .DataBodyRange.Cells(i, n).Value = rezult(i, n)
            Next n
        Next i


записывает все как надо.
массив rezult - один и тот же в обоих случаях.
Если проблема в данных - то что такого может содержать элемент массива, чтобы "затереть" данные другого элемента?
Изменено: Dima S - 21.09.2021 19:50:45
Глюк - рандомное копирование массива на лист
 
Ощущение что есть лимит на размер массива.
Потому что если в sql выборке установить лимит на количество строк, то при количестве строк до 4 - все записывается, больше - пропуски.
В других - более узких таблицах количество строк без пропусков еще больше.


Я вообще не понимаю что происходит, так как эти функции (запрос к БД и запись массива ни лист) - общие для всех листов в книге, но при этом одни листы записываются нормально, а другие нет.
Изменено: Dima S - 21.09.2021 18:54:50
Глюк - рандомное копирование массива на лист
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Тут еще понимать бы как данные в массив попадают
из Рекордсета
Код
arr_data = .GetRows

потом arr_data транспонируется

Код
            ' transpose array  -----------------------------------
            ReDim arr_transposed_data(1 To UBound(arr_data, 2) + 1, 1 To UBound(arr_data) + 1)
            For i = LBound(arr_transposed_data) To UBound(arr_transposed_data)
                For n = LBound(arr_transposed_data, 2) To UBound(arr_transposed_data, 2)
                    arr_transposed_data(i, n) = arr_data(n - 1, i - 1)
                Next n
            Next i


только эта функция уже годы работала без проблем.

Попробовал все советы выше - результат неизменный.
Изменено: Dima S - 21.09.2021 18:26:24
Глюк - рандомное копирование массива на лист
 
Все филтры очищены.
При выгрузке просто на лист, не в таблицу, или в новую таблицу на новом листе, в новой книге - такая же фигня.
Или что то не так с данными, или очередное обновление майкрософта что то сломало.
При этом больше склоняюсь ко второму варианту, ибо за прошлые периоды тоже такой глюк, хотя раньше все работало и данные никто не менял.

P.S.

убрал все, оставил
Код
 tabl.DataBodyRange.Value = rezult

аналогичный результат (пропуски данных)
Изменено: Dima S - 21.09.2021 18:20:05
Глюк - рандомное копирование массива на лист
 
Пробовал и value2 и Formula - результат тот же.
Как сейчас оказалось - это не единственная таблица в книге, у которой такой глюк.
В массиве все данные есть.
Ну и опять таки - если тот же массив записать циклом, то ОК, только долго.

При чем, если выбрать данные только за сегодня - то они записываються, если за болший период - то такой глюк.
Изменено: Dima S - 21.09.2021 18:05:22
Глюк - рандомное копирование массива на лист
 
Здравствуйте форумчане.
Случилась такая неприятность.
Есть функция для записи массива в таблицу - она там подгоняет размеры таблицы, форматирование и т.п.
Непосредственно запись массива в таблицу делает строчка
Код
            .DataBodyRange.Resize(UBound(rezult) - LBound(rezult) + 1, UBound(rezult, 2) - LBound(rezult, 2) + 1).Value = rezult
Донедавна все это успешно работало, а сейчас выдает такой вот результат (bug.png)
При этом если тот же массив записать в цикле
Код
        For i = LBound(rezult) To UBound(rezult)
            For n = LBound(rezult, 2) To UBound(rezult, 2)
                .DataBodyRange.Cells(i, n) = rezult(i, n)
            Next n
        Next i

то все записывается нормально и результат уже такой (correct.png)
Это происходит только с одним массивом в книге.

Файл прикреписть не могу, так как массив получается из базы данных. Соответственно если его записать на лист и потом считывать, то ошибки не происходит.
Есть идеи что может вызывать подобное поведение?
Оффис 365.

Спасибо.
Изменено: vikttur - 21.09.2021 18:25:18
Узнать какой макрос висит в фоне
 
Понял. Спасибо.
Узнать какой макрос висит в фоне
 
Здравствуйте.
Столкнулся с такой не то что бы проблемой, но непоняткой.
Пишу себе код в ВБА и иногда при каких то изменениях вылетает сообщение типа "Это остановит выполнение макроса" (это был неверный перевод)   This action will reset your project
и кнопки ОК, Отмена и Справка.
Хотя в это время никакой макрос не выполняется и на паузе не стоит.
Что это может быть?
П.С. Файлик прикрепить не могу, так как он завязан на сетевое подключение к внутренней сети и там много всего.
а вырезать что то и оставлять - не знаю что оставлять.
Изменено: Dima S - 04.03.2021 19:21:54
Сбор данных с нескольких таблиц при определенных условиях. Не выводить повторяющиеся элементы
 
Код
Sub rrrr(dtime, dname , ddat )
 
gh = (ThisWorkbook.Worksheets("Лист4").UsedRange.Row - 1 + ThisWorkbook.Worksheets("Лист4").UsedRange.Rows.Count) + 1
Set wdat = ThisWorkbook.Worksheets("Лист4").Cells(gh, 1)
Set wtime = ThisWorkbook.Worksheets("Лист4").Cells(gh, 2)
Set wname = ThisWorkbook.Worksheets("Лист4").Cells(gh, 3)
Set ganr = ThisWorkbook.Worksheets("Лист4").Cells(gh, 4)
Set wvoz = ThisWorkbook.Worksheets("Лист4").Cells(gh, 5)
Set wanot = ThisWorkbook.Worksheets("Лист4").Cells(gh, 6)
 
If dtime.Value > 0 Then
   wtime.Value = dtime
   wname.Value = dname
   wdat.Value = ddat.Value
i = dname
j = Application.Match(i, [Название], 0)
wvoz.Value = Application.Index([ОписаниеПрограмм], j, 2)
ganr.Value = Application.Index([ОписаниеПрограмм], j, 3)
wanot.Value = Application.Index([ОписаниеПрограмм], j, 4)

End sub

Sub cycler ()

Set dtime = ThisWorkbook.Worksheets("Эфирная сетка").Cells(con1, 2)
Set dname = ThisWorkbook.Worksheets("Эфирная сетка").Cells(con1, 4)
Set ddat = ThisWorkbook.Worksheets("Эфирная сетка").Cells(1, 2)

Call rrrr(dtime, dname , ddat )

Set dtime = ThisWorkbook.Worksheets("Эфирная сетка").Cells(con2, 8)
Set dname = ThisWorkbook.Worksheets("Эфирная сетка").Cells(con2, 10)
Set ddat = ThisWorkbook.Worksheets("Эфирная сетка").Cells(1, 8)
Call rrrr(dtime, dname , ddat )
'....
End sub
Изменено: Dima S - 15.12.2020 01:03:18
Доработать калькулятор штрафных санкций для нескольких сумм задолженности.
 
не понятна логика расчета.
прочитайте правила форума и покажите как есть и как надо - то есть ожидаемий результат для нескольких строк
VBA агрегация данных по столбцу большого объема данных
 
можно и массивом, можно и формулой, можно и вариантами от БМВ
Много как можно.
Можно просто сводной.
Как присвоить переменной диапазон значений для расчета при помощи формулы
 
Здравствуйте.
Из столбца С в вашу формулу ничего не попадает.
По краней мере в примере.
А так - пробуйте


Код
Sub Расчет()

Range("f3:f7").Formula = "=1/d3*100"
'если нужно заменить формулы на значения, то добавить
Range("f3:f7").Value = Range("f3:f7").Value

End Sub
Изменено: Dima S - 09.12.2020 19:49:24
Перезапись таблицы ListObject vba
 
Jack Famous,
спасибо, но это уже реализовано в файле-примере и проблемы, которые такой способ приносит описаны више.
Перезапись таблицы ListObject vba
 
RAN, вопрос не в том, чтобы формулу изменить - это я уже сделал.
вопрос как адекватно очистить таблицу перед вставкой новых данных.
ведь ламается не только УФ, но и "обычное"(см више).
Изменено: Dima S - 23.06.2020 16:32:24
Как открыть ссылку макросом НЕ через IE?, Как открыть ссылку браузером по умолчанию или MS Edge?
 
что вы подразумеваете под "открыванием интернет-сайта по ссылке через VBA"?
просто переход по ссылке через браузер или получение каких то данных в переменную?(при этом не обязательно показывать что либо пользователю)
Перезапись таблицы ListObject vba
 
Цитата
sokol92 написал:
Если, например, просто выделить часть строк "умной" таблицы
речь идет не просто о части строк, а о полном их удалении и последующей вставки новых данных,
не поломав при этом вычисляемые столбцы, форматы столбцов и УФ.
Перезапись таблицы ListObject vba
 
Думал  уже нашел решение - не тут то было)
Цитата
RAN написал:
Поелику примера нет,
Вот пример.
RAN - ваш способ в макросе write_table2.
Обратите внимание на УФ - оно ломается.

При перезаписи с помощью write_table - нет.
Но появился другой баг - форматы с первой строки вроде бы копируются, но значения в этих форматах - только в первой строке, в остальных - срабатывает автоформат.
если же продублировать строку
     
Код
 .DataBodyRange.Resize(UBound(rezult), UBound(rezult, 2)).Value = rezult

то все вставляется правильно.
пока использую как временный костыль, ибо на больших массивах, думаю, будет лишняя задержка.
У кого есть мысли почему так происходит?
Перезапись таблицы ListObject vba
 
Пока ждал ответа - нашел более-менее адекватный способ.

Код
    Table.DataBodyRange.Rows(1).ClearContents
    Table.DataBodyRange.Offset(1, 0).Resize(Table.DataBodyRange.Rows.Count - 1, _
    Table.DataBodyRange.Columns.Count).Rows.Delete
Перезапись таблицы ListObject vba
 
Здравствуйте.
Поделитесь способом пожалуйста, как по нормальному перезаписать таблицу?
Проблема возникает, когда новых строк меньше, чем существующих.
Пробовал варианты:
1. Вычислить разницу между новым и старым размером, удалить лишние строки в цикле как
Код
                        Do While .ListRows.Count > rows_count
                            .ListRows(.ListRows.Count).Delete
                            Loop

При больших разницах - это долго.

2.
Код
  .DataBodyRange.Rows.Delete
  .ListRows.Add
  .DataBodyRange.Resize(UBound(rezult), UBound(rezult, 2)).Value = rezult

это быстро, но слетает условное форматирование, в котором ссылка на две строки таблицы.
Вариант с ClearContents оставляет форматирование внизу.
Вариант с удалением всей строки не подходит, так как влияет на другие таблицы на листе.
По этой же причине не подходит.Listrows(i).range.resize(dif_rows).delete
способа  удаления нескольких listrows за раз не нашел.
Иероглифы в vbaproject
 
в настройках виндовс - язык и региональные стандарты - для програм не поддерживающих Юникод выберите русский язык
Здесь подробнее.
Настройка переменного значение критерия/фильтра в умных таблицах, vba, macro
 
Цитата
Alex D написал:
по логическому условию. IF TRUE = "2"
логики здесь как раз не хватает.
Как получить время в миллисекундах?
 
Код
a = Format(Now(), "dd/mm/yyyy hh:nn:ss:ms")
Не получается сравнить значения в столбцах
 
Так?
Динамическая выборка по критерию DAX
 
все получилось, причем разными вариантами.
Всем спасибо.
Изменено: Dima S - 16.01.2020 15:10:17
Динамическая выборка по критерию DAX
 
созданная "на лету" таблица не реагирует на разделитель.
Динамическая выборка по критерию DAX
 
Спасибо всем.
Цитата
PooHkrd написал:
таблица, то это проще через Power Query  все же сделать.
Нужна таблица, но я планирую перенести это дело в Power BI и выбирать дату с помощью разделителя.
А как передать выбранную дату в Power Query я не знаю.
В принципе и с DAX тоже проблемы.
Создал CALENDARAUTO  и меру
Код
CurDate = MAX('MyCalendar'[Date])

но почему то ни одно решение ( решение PooHkrd  все таки реагирует - у меня был какой то кривой виджет с магазина. со стандартным работает)   не реагирует на выбранное в разделителе значение.
Например в решении Андрея
Код
Таблица = Var vrows = FILTER('Таблиця1'; .'Таблиця1'[Date] < DATE(2019; 4; 21))

когда дата указанна жестко - все работает, если как мера - нет.

Можно это как то победить?
Изменено: Dima S - 15.01.2020 10:57:52
Сбор результатов выдаваемых калькулятором расстояний
 
Grantorino,
а вы можете объяснить что конкретно нужно, ибо для меня пока ваши макросы выглядят достаточно бессмысленными.
Копирование строк, содержащих признак, на другие листы
 
Цитата
lenatoy написал:
как сделать по двум/трем и более признакам

например так - указать признак через разделитель, например запятую


Код
Sub Test()
    Dim iCell As Range, Priznak As Variant
    Priznak = Application.InputBox("признак переноса сроки", "Екатеринбург", "Екатеринбург")
    Priznak = Split(Priznak, ",")

    For Each iCell In Range("A2", [A2].End(xlDown))
        For i = lbound(Priznak) To Ubound(Priznak)
            If iCell = Priznak(i) Then
                With Sheets("ЕКБ")
                    iCell.EntireRow.Copy Destination:=.Cells(.Cells(Rows.Count, "A").End(xlUp).Row + 1, "A")
                End With
            End If
        Next i
    Next iCell
    MsgBox "строки скопированы на другой лист", vbInformation, ""
End Sub


а вообще лучше с файлом, конечно.
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 69 След.
Наверх