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

Страницы: 1
Приравнивание части массива другому массиву без цикла
 
собственно на листе есть столбец чисел.

мне нужно скользящее среднее геометрическое по этим числам.
чтобы воспользоваться встроенной функцией
Код
Application.WorksheetFunction.GeoMean(arrayMy) 

я в цикле заношу в массив  arrayMy числа из столбца.

А хотелось бы как-то так:
Код
redim arrayMy(1 to iMax)
arrayMy=MyArray(i..i+iMax)

Как правильно это записать?
Возможно ли изменить диаграмму не активируя книги?
 
макрорекордер записывает:
Код
    ActiveSheet.ChartObjects("Диаграмма 1").Activate
    ActiveChart.SetSourceData Source:=Range("ttt!$N$1:$P$15")
я пытаюсь сделать это не выделяя конкретного листа и книги:
Код
    Workbooks("rez.xlsx").Sheets("ttt").ChartObjects("Диаграмма 1").Chart.SetSourceData Source:=Range("ttt!$N$1:$P$14")

если активирована та же книга, код работает. А как его изменить чтобы можно было изменить диаграмму, находясь в другой книге?

Изменено: andre_bae - 05.11.2017 16:08:10
запуск процедуры с параметрами
 
Извините за глупый вопрос, но как запустить процедуру с параметрами?
Как правильно написать команду?
У меня ни
Код
Application.OnTime  times1, "test(param)", , true

ни
Код
Application.OnTime  times1, "test, param", , true

не получается. говорит что нет такой процедуры
как связать checkbox с ячейкой в фоне?
 
Если записать макросом, то он делает так:
Код
Workbooks("b1.xlsm").Activate 
Sheets("f").Select

ActiveSheet.Shapes("CheckBox 6").Select
       With selection
         .Value - xlOff
         .LinkrdSell = "$D$8"
     End With
Хочется обойтись без конструкции With и делать все это в фоне, не активируя листа и книги.
Однако попытка сделать это "в лоб" не удается:
Код
Workbooks("b1.xlsm").Sheets("f").Shapes("CheckBox 6").LinkrdSell = "$D$8"
выдает ошибку.
Как исправить?
как изменить формат ячеек по умолчанию?, периодически случайные ячейки меняют свой формат на временной. как избавиться?
 
Периодически обнаруживаю то в одном то в другом из файлов экселя, с которыми работаю, что произвольные ячейки (каждый раз разные) неожиданно меняют свой формат на временной.
Мне это очень неудобно, так как большинство ячеек отформатировано в соответствии с теми данными которые в них хранятся и это как правило не время.
Excel2007, если  это важно.

Подозреваю, что где-то есть место где задается формат ячеек по умолчанию.
Так что вопроса фактически два:
1. где найти такое место? (папочка XLSTART у меня пуста)
2. может есть информация что может вызывать принудительную замену формата ячеек, формат которых задан вручную и многократно сохранялся в файле?
Изменено: andre_bae - 17.11.2015 17:11:01
Как убрать лишнее поле на листе
 
на одном из листов под строкой формул над заголовками столбцов появилось поле серого цвета, слева на нем кнопки с номерами от 1 до 8, над заголовками столбцов начиная с J стоят точки...
Простите за чайниковский вопрос, но что это за поле и как от него избавиться?! Уже все настройки экселя перебрал...
как задать переменную для конкретного листа
 
Дурацкий вопрос, сам понимаю, но что-то заклинило, никак не разберусь.
Просьба ногами не бить.

По аналогии с использованием переменной для книги
Код
dim wb as workbook
set wb=workbooks("Книга1.xlsm")
....
set wb=nothing

есть желание создать такое же имя для конкретного листа, например
Код
workbooks("Книга1.xlsm").sheets("Лист1")
подскажите чайнику, как это сделать?
как избавиться от долей секунд?
 
есть столбец в который записывается время в текстовом виде в формате "12:30:25" по нескольку раз за секунду.
пытаюсь макросом с помощью маски искать в нем первое вхождение каждой секунды:

Код
Dim msk as Date
....
msk=#10:00:59 AM#
...
msk=msk+TimeSerial(0,0,1)
Do While Cdate(Cells(i,1))<msk
     i=i+1
Loop
не работает.
поставил

Код
Debug.Print CDate(Cells(i,1))-msk
обнаружил, что при равенстве маски и значения в ячейке все равно результат не 0, а что-то типа -5,5Е-17

вопрос: как "грамотно" отсечь доли секунды чтобы находить первое вхождение каждой секунды?
запись в текстовую переменную значения времени из ячейки
 
Дано:
в ячейке А1 записана дата 30.10.2013 (ячейке имеет формат даты)
в ячейке В1 записано время 18:30 (ячейка имеет формат времени)
Требуется:
записать их значения в текстовую переменную.

Делаю так:
Код
Dim t as string
t=CStr(Range("A1"))+" "+CStr(Range("B1"))


получаю t=30.10.2013 0,7708333333333333
почему дата нормально отображается а время - нет?

исправив на
Код
t=CStr(Range("A1"))+" "+CStr(CDate(Range("B1")))

получаю что и хотел, но "подозреннье мучает меня" что решаю задачу "криво" и есть более прямой и красивый путь.
Подскажите, а?
потерялось имя ячейки в другой книге
 
Ламерский вопрос. После обрыва питания формула в макросе вида
Код
    Windows("book1.xlsm").Activate
Sheets("list1").Select
Cells(i, 3) = Range("MYDATA").Value

перестала работать.
пишет "metod 'range' of object _Global failured".
Ячейка MYDATA находится в другой открытой книге и прекрасно виделась из book1,
может я некорректно код записал?
Да, если посмотреть через "вид - перейти в другое окно" - все книги видны...
как поймать обновление по DDE "приостановив" макрос?
 
Боюсь, не совсем корректно сформулировал вопрос.
По сайту прочел все темы, найденные по запросу "обновление по DDE",
там все о выполнении макроса при изменении ячейки по DDE,
может, мне просто не хватило знаний, но не смог применить их
к моей задаче:

у меня на отдельный лист L2 по DDE из сторонней программы добавляются строки данных,
по нескольку строк в секунду.

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

Ухищрения типа:
Код
Sheets("L1").Cells(1,1) = Sheets("L2").Cells(Rows.Count, 2).End(xlUp).Row
Application.Wait (Now + TimeValue("00:00:10"))
Sheets("L1").Cells(1, 2) = Sheets("L2").Cells(Rows.Count, 2).End(xlUp).Row

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

P.S.
на листе L2 пробовал сделать (добавив туда ячейку с расчетом, зависящую от вводимых данных)
Код
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
Sheets("L1").Range("I15").Value = Sheets("L1").Range("I15").Value + 1
Application.EnableEvents = True
End Sub

в ячейке I15 счетчик визуально считает, но когда пытаюсь в макросе дождаться его увеличения
хотя бы на 1 - ячейка I15 все время дает одно и то же значение.
Изменено: andre_bae - 20.06.2013 18:05:17
возможен ли самомодифицирующийся код?, не удается программно менять диапазон для графика
 
Надоело руками каждый раз менять диапазон для вывода графика при добавлении данных на листе.
попробовал в лоб:
Код
 Dim t As String
    '
    t = "Sheets(""Лист1"").Range(""B1:B" + CStr(iLastRow + 2) + ",G1:G" + CStr(iLastRow + 2) + ",I1:J" + CStr(iLastRow + 2) + """)"
    Sheets("график").Select
    ActiveSheet.ChartObjects("Диаграмма 1").Activate
    ActiveChart.SetSourceData Source:=t


получил "type mismatch".

что с этим делать дальше - не могу сообразить.
или этот вопрос можно как-то по другому решить?
присвоение текстовой переменной значения ячейки "время"
 
требуется получить в текстовой переменной значение времени, записанное в ячейке таблицы, отформатированной как "время". Как это сделать _правильно_?

что получается у меня:

Код
 Dim m_time As Date
 Dim mstring1 As String, mstring2 As String, mstring3 As String

'ячейка Range("my_time")  имеет формат time "чч:мм:сс" там записано 11:00:00

 mstring1 = Range("my_time")                 ' получаю вещественное значение ячейки: "0,45833333"

' извратившись, мне удается получить желаемое. Но гложет подозрение, что есть более прямой путь?

 m_time = Range("my_time")  
 mstring2 = m_time                     ' получаю что и требовалось: "11:00:00"

 mstring3 = CStr(CDate(Range("my_time")))         ' получаю что и требовалось: "11:00:00"
Изменено: andre_bae - 13.06.2013 11:14:46
Ошибка при записи макроса: #ИМЯ?
 
Помогите, пожалуйста,
в макросе заношу значение в ячейку:
Range("G17";).Value = "=СУММ(F" + CStr(17 - fst + 1) + ":F17)/" + CStr(fst)

где fst- целое число, например 2.

В результате в ячейке появляется #ИМЯ?
и избавиться от него удается только встав на эту ячейку и нажав Enter.
ни Range("G17";).Calculate ни прочие танцы с бубном не помогли.
что я делаю некошерно?
как в vba реализовать ПОИСКПОЗ?
 
Собственно, требуется в столбце, в который записано значение времени, упорядоченное по возрастанию,
найти ячейку со значением равным заданному или максимально близким, если равного нет.
Желательно это сделать оптимальным по скорости исполнения алгоритмом, перебором-то я найду, но чувствую, что должна быть какая-то функция, ускоряющая процесс...
Страницы: 1
Наверх