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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 33 След.
VBA. Использование символа "умножить" (крестик по диагонали) в string
 
Спасибо всем. Ссылку от Sokol92 почитала. Про красоту поняла :)
использую решение от k61.
VBA. Использование символа "умножить" (крестик по диагонали) в string
 
Спасибо, БМВ.
Но так тоже пробую, он "&h00d7" заменяет на "&HD7" и в результате выдает знак вопроса...
VBA. Использование символа "умножить" (крестик по диагонали) в string
 
Спасибо :)
Полагаю, что вот такой символ все-таки не получится использовать?
как поменять в ячейке формулу на ее значение
 
Код
If 2 = 2 Then
    ActiveCell.Formula = "=P1+P2"
Else
    ActiveCell = Range("P1").Value + Range("P2").Value
End If

Так?
VBA. Использование символа "умножить" (крестик по диагонали) в string
 
Здравствуйте.
Все знают символ "умножить" (вставка - символ - выбираем крестик, который по диагонали).
Как его в VBA реализовать?

Например msgbox "символ умножить".

Через chrw пробовала, но вместо данного символа вопросительный знак только получается.

Спасибо.
Обновление и НЕобновление связей между книгами
 
Тут разбирали подобное
https://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=45916
VBA. Событие изменения конкретных строк
 
Выражаю слова благодарности всем, кто принял участие в обсуждении данной темы.
Также спасибо модераторам за терпение!
Перешла на Calculate в автоматическом режиме, работает значительно быстрее, чем в VBA.
VBA. Событие изменения конкретных строк
 
БМВ, bedvit, спасибо!
Прописываю формулы, посмотрим, что получится :)
VBA. Событие изменения конкретных строк
 
БМВ, я видела эту штуку :) мощно :)
я правильно понимаю алгоритм, что нужно будет прописать формулы в расчетных ячейках, протянуть их на все 1000 строк моих, поставить ручную калькуляшку, и калькулировать уже конкретный диапазон строк?
VBA. Событие изменения конкретных строк
 
На данный момент штудирую Range.Dirty, но, что-то мне подсказывает, придется обойтись свободным столбцом, в нем помечать, что в данной строке были изменения через Target, и, следовательно, пересчитать только эти строки. Более простого решения пока не нашла.
VBA. Событие изменения конкретных строк
 
БМВ, простите, как-то упустила Ваше сообщение :)

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

Очень много параметров рассчитывается в одной строке :)

Т.е. идет список точек опробования льда в столбце 1, а в других столбцах - параметры, соответствующие точке опробования.
VBA. Событие изменения конкретных строк
 
Как много сегодня нового узнала :)

bedvit, Neufazendnik спасибо, что помогаете!
Цитата
Пока не совсем ясно. как изменяется ваш большой массив, пользователь вставляет данные сразу массивом? Как с ним работает пользователь?

Приложила более подробный пример.
Вводим данные путем поячейного ввода, как в толбец, так и в строку, либо путем копирования диапазона из одной книги в другую.

Например, ввели/изменили значение в D7, возникла необходимость посмотреть, как изменились значения в C7, F7, G7. Нажали кнопочку, все посчиталось. Поэтому необходим весь гигантский диапазон "под рукой".

Или, пакетно ввели информацию в ячейки D7:E17, нажали рассчитать, посмотрели, что получилось везде.

После сохранения, происходит выгрузка информации со всего листа в базу данных (это уже отдельная история, пока у меня просто копируется лист в новый файл, сохраняется в отдельную книгу, так как до БД мне далековато на VBA).

Перерасчет ячеек идет построчно, т.е. если значения менялись только в одной строке, то перерасчет будет только в этой же строке...
Изменено: Diana Tailor - 07.12.2018 14:28:36 (не то прикрепила :))
VBA. Событие изменения конкретных строк
 
Суть такова: в диапазоне (только он намного больше) изменяем ячейки, в этих же строках от измененных ячеек будут произведены дальнейшие вычисления. Вот и приходится искать строки, в которых были изменены ячейки, и в них уже принудительно в vba производить расчет
VBA. Событие изменения конкретных строк
 
Собственно, пример во вложении :)
VBA. Событие изменения конкретных строк
 
Если не получится отточить быстродейственный макрос, попрошу модератора перенести тему в форум основной :)
VBA. Событие изменения конкретных строк
 
Нашла пример, разбираю :)
https://www.extendoffice.com/ru/documents/excel/3961-excel-track-changes-without-sharing-workbook.ht...
VBA. Событие изменения конкретных строк
 
DenSyo, спасибо за комментарий.
Теперь буду искать материалы в этом направлении :)
VBA. Событие изменения конкретных строк
 
Calculate - это круто, конечно, но снова-таки, учитывая размерность моих данных - Range("A7:SW1006") тут любой calculate  загнется, поэтому расчеты происходят не автоматически, а в VBA по нажатию кнопки )

По поводу массивов - посмотрю, вроде у Димы Щербакова на сайте видела или у Игоря неплохие решения, вот ищу :)
VBA. Событие изменения конкретных строк
 
Jack Famous, здрасьте :)
Ситуация такая: имеем в загруженном интерфейсе лист Excel. Путем скрытия/открытия блокировки/разблокировки столбцов заносим туда разные данные.
От этих данных зависят другие данные, т.е. мы занесли какие-то значения, поменяли, и нужно пересчитать зависящие от измененных ячеек данные.
Так вот, чтобы из 1006 строк не пересчитывать все подряд, потребовалось пересчитать только те строки, в которых были произведены изменения.

Как-то так :)

Насколько я понимаю, нужно считать диапазон до изменения в массив, потом после изменения в массив. Потом сравнить массивы и, следовательно, получить измененные строки.
Вот ищу алгоритмы теперь как быстро сравнить два массива.
VBA. Событие изменения конкретных строк
 
DenSyo, спасибо. Пытаюсь разобраться
VBA. Событие изменения конкретных строк
 
Здравствуйте.

Имеется необходимость отследить строки, в которых изменились ячейки.
Собственно, простейший макрос:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox Target.Address
End Sub

Если мы по одной ячейке изменяем, все корректно. Если работаем с диапазоном – не очень.

Пример: пустой лист.
Код
Range(“A1”)=1
Range(“A3”)=1

Как видно, в ячейке A2 значений нет. Если выделить диапазон A1:A3 нажать Delete, то Excel считает, что изменения произошли во всем диапазоне, хотя по факту только в 1 и 3 строке.

Как отследить значения именно измененных строк? (т.е. если не было значений и удалились – это уже не изменение, а если были и удалились/поменялись – уже изменение).

Спасибо.
Изменено: Diana Tailor - 07.12.2018 12:16:39
Время выполнения макроса из панели значительно дольше
 
Проверила на других компьютерах сейчас:
Офис 2007 - время выполнения 0,06 сек. В обоих случаях.
Офис 2010 - время выполнения 0,06+/-0,02 сек в обоих случаях.
Офис 365 - от нескольких секунд через надстройку и 0,05+/-0,02 сек через Sub saveData()

Может, есть у кого предположения, где копать, чтобы в 365 пошустрее было? :)
Время выполнения макроса из панели значительно дольше
 
bedvit, спасибо.
Что же у меня-то не так... Буду искать дальше.
Время выполнения макроса из панели значительно дольше
 
Отпишитесь, пожалуйста, у кого получилось проверить.
У вас также разница во времени существенная?
А то, может, только у меня, буду искать причину. Нет возможности пока на другом компьютере проверить.
Время выполнения макроса из панели значительно дольше
 
Пример прилагаю
В моем случае сейчас через надстройку - 4,07 сек. Напрямую - 0,07 сек.

Перед запуском, сохраните, пожалуйста, все свои документы Excel!
Запускаем Книгу 1. Подключаем надстройку 1.
На панельке есть кнопочка – сохранить все.
Через нее макрос обрабатывается в разы дольше, чем запуск напрямую из VBA.
В функции calculateData сделан повтор вычислений для наглядности "торможения".
В результате работы макроса будет создаваться документ 1.txt.
Изменено: Diana Tailor - 03.12.2018 14:14:10
Время выполнения макроса из панели значительно дольше
 
Здравствуйте.
Появился вопрос, с которым я никогда не сталкивалась.
Имеется надстройка, кнопочки выведены через Ribbon.
Следовательно, имеется RibbonCallbacks.
В RibbonCallbacks имеется:
Код
'btn15 (компонент: button, атрибут: onAction), 2007
Sub NullSave1(control As IRibbonControl)
Savetest
End Sub
Если я запускаю макрос через панель (через кнопку) он выполняется 17 секунд.
Если его запустить через VBA (макрос Savetest) напрямую, то время выполнения составляет 0,4 сек.

В чем может быть причина?
Спасибо.
Установка пароля на открытие книги через VBA
 
Так не проще ли скомпилировать весь код в DLL? Или создать EXE файл?
Тогда уже сложнее будет и защиту открыть, и код посмотреть.
Лично я пользуюсь решениями от DoneEx. Они хоть и платные, зато не беспокоюсь, что кто-то прочитает мой код, потом еще, если разберется в нем, будет использовать в своих корыстных целях :)
Настройка vbe. Автозаполнение кода
 
насколько мне известно, штатных средств нет. В VB.net, C+ есть, например, в MS Visual Studio, в VBA вроде нет.
Через надстройки только.
Настройка vbe. Автозаполнение кода
 
https://forum.sources.ru/index.php?showtopic=184418

Как пример
VBA. Определение LastRow с учетом скрытых столбцов и форматирования
 
JayBhagavan, спасибо
но в моем примере она показывает "15", а должна быть "28".

метод ZVI из поста sokol92 решил проблему.
Код
' Aux function: max value of arguments
Function Max(ParamArray Values())
  Dim x
  For Each x In Values
    If x > Max Then Max = x
  Next
End Function

' Последняя строка на листе Sh
' Если Sh не задан, то используется активный лист
' Если VisibleOnly=True, то результат только для видимых ячеек
Function LastRow(Optional Sh As Worksheet, Optional VisibleOnly As Boolean) As Long
  Dim SpecCells(), x, a$, i&, Rng As Range
  SpecCells = Array(xlCellTypeConstants, xlCellTypeFormulas, xlCellTypeComments)
  On Error Resume Next
  If Sh Is Nothing Then Set Sh = ActiveSheet
  Set Rng = Sh.UsedRange
  If VisibleOnly Then Set Rng = Rng.SpecialCells(xlCellTypeVisible)
  For Each x In SpecCells
    a = Rng.SpecialCells(x).EntireRow.Address(0, 0)
    i = Max(i, CLng(Mid(a, InStrRev(a, ":") + 1)))
  Next
  LastRow = i
End Function

Sub sub1()
MsgBox LastRow
End Sub
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 33 След.
Наверх