Здравствуйте. Написал некий клас для заполнения контролов на форме значениями выбраной строки таблицы согласно таблице сопоставления (заголовок столбца таблицы, название контрола). Но столкунулся с проблеемой при установке значения для комбобокса - 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. Кто может подсказать в чем причина такого поведения комбобокса? Спасибо.
Здравствуйте форумчане. Случилась такая неприятность. Есть функция для записи массива в таблицу - она там подгоняет размеры таблицы, форматирование и т.п. Непосредственно запись массива в таблицу делает строчка
Донедавна все это успешно работало, а сейчас выдает такой вот результат (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.
Здравствуйте. Столкнулся с такой не то что бы проблемой, но непоняткой. Пишу себе код в ВБА и иногда при каких то изменениях вылетает сообщение типа "Это остановит выполнение макроса" (это был неверный перевод) This action will reset your project и кнопки ОК, Отмена и Справка. Хотя в это время никакой макрос не выполняется и на паузе не стоит. Что это может быть? П.С. Файлик прикрепить не могу, так как он завязан на сетевое подключение к внутренней сети и там много всего. а вырезать что то и оставлять - не знаю что оставлять.
Здравствуйте. Поделитесь способом пожалуйста, как по нормальному перезаписать таблицу? Проблема возникает, когда новых строк меньше, чем существующих. Пробовал варианты: 1. Вычислить разницу между новым и старым размером, удалить лишние строки в цикле как
Код
Do While .ListRows.Count > rows_count
.ListRows(.ListRows.Count).Delete
Loop
это быстро, но слетает условное форматирование, в котором ссылка на две строки таблицы. Вариант с ClearContents оставляет форматирование внизу. Вариант с удалением всей строки не подходит, так как влияет на другие таблицы на листе. По этой же причине не подходит.Listrows(i).range.resize(dif_rows).delete способа удаления нескольких listrows за раз не нашел.
Здравствуйте. Начинаю осваивать POWER) В частности Power Pivot i Power BI. Не могу сообразить как "на лету" сформировать таблицу.
Пример: Есть таблица переездов техники, но переезды бывают не каждый день. Нужен отчет, который показывает последнее местонахождение на конкретную дату.
Пока реализовал через CROSSJOIN справочника техники и календаря и подтягиваю местонахождение, но такая реализация кажется мне какой то кривой. Можно ли как то вычислить максимальную дату меньше указанной и вернуть список техники? Спасибо.
Здравствуйте. Собственно проблема в названии. При выполнении например такого макроса
Код
Sub test()
lr = 2
Call subtest(lr)
MsgBox (lr)
End Sub
Sub subtest(lr)
lr = 3
End Sub
в сообщении будет 3, а не 2, как я ожидал. Это так и должно быть? Я почему то думал, что lr subtest'a и lr test'a - это две разные переменные, пусть и с одинаковыми именами.
Здравствуйте. Есть в Приемах хорошая статья о зависимых выпадающих списках. Но все рассмотренные в ней способы хороши, когда есть одна "главная" и одна или несколько зависимых ячеек. А как быть, если есть, например, столбец с разными значениями (марки авто) и нужно во втором столбце выпадающие списки соответствующие значениям первого столбца (модели авто)? Создавать для каждой марки свой список - долго и не удобно. Мое решение возможно не самое правильно и изящное, но позволяет обойтись одним именованным диапазоном для вех выпадающих списков (см. файл) и без макросов. Если у кого-то будут идеи как упростить формулу - можете поделиться, может Николай дополнит свою статью
Здравствуйте, уважаемые. столкнулся с проблемой. копирую объект Shape из одного листа в другой
Код
If Not pict Is Nothing Then
With pict
.Copy
Worksheets("корзина").Paste Destination:=Worksheets("корзина").Cells(lr, 2)
End With
End If
в екселе 2010 работает без ошибок. в 2016 - на одном листе все четко, на другом - метод paste из класса worksheet завершен неверно. ошибка возникает при копировании более чем одной картинки в цикле. первая копируется, на второй ошибка. при этом если нажать Debug и продолжить, то все работает. Может кто сталкивался с подобным? если у кого есть ексель 2016 - могу выслать пример для тестирования. Спасибо.
Здравствуйте. Есть ли у кого подобный опыт? А то таблицы от гугла совсем не поддерживают сводные, от майкрософта - только показывает, но не обновляет. Кто либо стыкался с работающими сводными на андроиде?
Здравствуйте. использовал раньше для получения html кода функцию GetResponse, найденную в просторах интернета.
Скрытый текст
Код
Function GetResponse(ByVal URL$) As String
On Error Resume Next: Err.Clear
Static xmlhttp As WinHttpRequest
If xmlhttp Is Nothing Then Set xmlhttp = New WinHttpRequest
xmlhttp.Open "GET", URL$, True: DoEvents
xmlhttp.Send: DoEvents
If Not xmlhttp.WaitForResponse(TIMEOUT&) Then
Debug.Print "timeout", URL: Exit Function
End If
GetResponse = xmlhttp.ResponseText
End Function
Работает все красиво, но не на сайтах с авторизацией. Сделал авторизацию через объект InternetExplorer - появилась другая проблема: IE.Document.Body.InnerHtml возвращает не весь html код страницы, а только его часть, описывающую, как я понял, вертикальное меню справа. Это где то десятая часть от всего кода и к тому же - совершенно мне не нужная)
Как вернуть весь код? Или как можно провести авторизацию без использования InternetExplorer?
Привет всем форумчанам ) Решил только что расслабиться чуток и пострелять в старом добром CS. Но тут меня ожидал сюрприз )) Какая тут вообще связь может быть?) VBA пытается заставить меня работать или CS написан на VB?))
При чем после этого миготения остается окно CS, но если его свернуть, закрыть VBA и попробовать опять развернуть - VBA опять открывается)
Сайт в кодировке утф-8. Функция для получения исходного кода
Код
Const TIMEOUT& = 3 ' ? ????????
Function GetResponse(ByVal URL$) As String
On Error Resume Next: Err.Clear
Static xmlhttp As WinHttpRequest
If xmlhttp Is Nothing Then Set xmlhttp = New WinHttpRequest
xmlhttp.Open "GET", URL$, True: DoEvents
xmlhttp.Send: DoEvents
If Not xmlhttp.WaitForResponse(TIMEOUT&) Then
Debug.Print "timeout", URL: Exit Function
End If
GetResponse = xmlhttp.ResponseText
End Function
Пробовал разные танцы с кодировкой - не помогает, ибо xmlhttp.ResponseText уже с кракозябрами приходит и обратно их запихнуть не получается. В редакторе вба эти символы прописать не получается также (хотел тупо через замену).
Добрый вечер. Че то не могу понять как и почему это происходит. Модернизирую файл по учету домашних финансов, привязал его к mysql и че то в этом варианте "психанул" листбокс. Прикреплять файл, думаю, нет смысла, потому как глюк именно в этом файле, и вам его у себя не воспроизвести. Прикреплю скриншоты свойств листбокса и значение массива, который должен его заполнить.
Хочу из него достать список всех продуктов в ексель. Как бы список уже достал через веб запрос, но еще хотелось бы чтоб названия были с гиперссылками на страницы в интернете. То есть так, если выделить таблицу, скопировать и вставить в ексель. Кто может подсказать обязательно надо парсить исходный код в поиске гиперссылок или есть решения попроще?
В теме, собственно, вся суть вопроса и изложена) не нашел была ли такая тема уже. в принципе ничего смертельного, но как бы не должно такое происходить. браузер хром, офис 2010.
Добрый вечер всем. Вопрос наверное больше к бывалым) Поделитесь пожалуйста опытом (или секретом) как можно упорядоченно хранить какие то наработки на вба (процедуры, функции) Просто файлики раскидать по папкам, или прикрутить к базе данных? Или может есть какая то авторская софтина, облегчающая жизнь? Чтобы как то по описанию легко находить то что нужно, а не вспоминать в каком файлике нужный макрос. Спасибо.
доброго вечера всем) че то не могу понять то ли у меня глюк, то ли в экселя. в файлике есть форма, на форме лисбокс с количеством столбцов 8. то есть размерность его я себе представляю должна быть от 0 до 7 столбцов. при нажатии на кнопку почему то дает записать значение в lb_simia.list(0, 8) и lb_simia.list(0, 9). что не так я делаю? заранее спасибо)
работа по созданию программ для анализа спортивных результатов. в данное время по теннису. понимаю что разбираться в чужом коде не сильно охота, но может у кого есть свободное время. отдаю из-за нехватки времени. клиент хороший, не жмот
Всем привет. Столкнулся сегодня с такой ситуацией в экселе: Прикольно<>ПРИКОЛЬНО, но Приколно=ПРИКОЛНО. То есть сравнение всех символов не зависит от регистра, а мягкого знака - зависит. Почему так?
Всем привет. Столкнулся с такой ситуацией - в одном файле все цвета стилей таблиц - оттенки серого. В других файлах все норм. Если скопировать таблицу из другого файла в этот - она тоже стает в оттенках серого. Как вернуть цвет?) Спасибо.
IIF(Подача='Подача','Прием','Подача') AS [Подача_соп], IIF(Результат='Победа','Поражение','Победа') AS [Результат_соп]
после чего начал глючит ексель. Например меняю в вба Прием на Подача - на листе по прежнему остется прием. Хочу пошагово выполнить процедуру - должно выполнятся условие Else - курсор выделяет Else желтым, потом перепрыгивает на End If не выполняя условие.
Как видно на скриншоте - в окне переменных тоже отображаются не переменные процедуры, а какая то непонятная штука... При этом запрос выполняется с прежней строкой запроса. После нескольких таких манипуляций ексель вырубылся. Неужели причина в IIF?
Код
Sql_S = "SELECT Результат, Счет, SUM(IIF(Игрок='" & ig1 & "' AND Подача='Подача', SUMA)) AS [" & ig1 & "], SUM(IIF(Игрок='" & ig2 & "' AND Подача='Прием', SUMA)) AS [" & ig2 & "] FROM [счет$] WHERE Результат <> '' GROUP BY Результат, Счет "
Else
Sql_S = "SELECT IIF(Подача='Подача','Прием','Подача') AS [Подача_соп], IIF(Результат='Победа','Поражение','Победа') AS [Результат_соп], Подача, Результат, Счет, SUM(IIF(Игрок='" & ig2 & "', SUMA)) AS [" & ig2 & "] FROM [счет$] WHERE Результат <> '' GROUP BY Подача, Результат, Счет "
End If
Добрый день всем. Есть некая MS Sql база данных из которой с помощью вба запросом достаю данные. При этом нужно слепить содержимое рекордсета с уже существующим массивом. При этом на передачу данных из рекордсета в массив (циклом или через GetRows) уходит почти 20 секунд. Как то многовато для массива 6тыс. строк и 9 столбцов. При этом такой же массив при запросе к книге ексель передается гораздо быстрее. В чем может быть причина и зависит ли это от строки подключения?
проблема в том, что такая строка работает только когда файл с макросом находится во внутренней сети предприятия. То есть надо по RDP зайти на удаленный сервер и запустить там файл. Проблема в том что на сервере нет много нужных библиотек, а на некоторых серверах вба вообще отключено. Данная строка при попытке выполнения дает ошибку - доступ на сервер запрещен - оно и понятно - логин и пароль тут только к базе Вопрос - как в этой строке подключения (или не в этой) указать логин и пароль для севера? Возможно ли это вообще? Спасибо.
Всем привет. Есть массив данных вида 0-0 [0-0] 1-1 [*1-1] -( именно строкой в ячейке) Хочу с помощью оператора LIKE отобрать [0-0] [*1-1], но и [ и * являются служебными в вба. как задать маску типа [*] ? Если написать LIKE "[*]" , то не выдает ни одной записи. Хотя я думал что должно бы выдать все.
Здравствуйте все. Подскажите пожалуйста в такой ситуации. Есть форма, на которой динамически создаются контролы ToggleButton
Код
Private Sub UserForm_Initialize()
'...
For i = LBound(kiarr) To UBound(kiarr)
cbn = cpt & "_"
Set ctrad = frm.Controls.Add("Forms.ToggleButton.1", cbn & i)
Set aoTglBtn(n).oTglBtn = uf_buget.Controls(cbn & i)
Next
'...
End Sub
в модуле
Код
Public aoTglBtn(0 To 115) As New clsmTglBtn
Public coun As Integer
В модуле сласса
Код
Public WithEvents oTglBtn As MSForms.ToggleButton
Private Sub oTglBtn_Click()
If oTglBtn = True Then coun = coun + 1
If coun = 2 Then
For each TglBtn in aoTglBtn
TglBtn = False
Next
coun = 0
End If
End Sub
идея такая чтоб при нажатии второй кнопки все тагглы на форме отжимались. Данный код почему то не работает - кнопки и дальше в нажатом состоянии. То есть как правильно реализовать
Добрый день всем. Подскажите пожалуйста, можно ли перехватить событие клика на срезе сводной в вба? Хочу под это дело подвязать свой макрос с параметрами выбранных элементов среза. Как определить выбранные и передать в макрос разобрался, а на какое событие повешать - не пойму. Worksheet_SelectionChange реагирует если сначала выбрать элементы, а потом кликнуть на другую ячейку, но это как то коряво. Помогите
Добрый день всем. Подскажите пожалуйста, возможно ли в сводной как то отобразить общую сумму для отфильтрованного поля, не учитывая критерия фильтра? То есть если есть 12 яблок, из них 7 спелых, чтобы при фильтровке спелых все равно было 12. Или это я уже чего то захотел нереальное? Спасибо.