Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 След.
Out of Memory при добавлении строк в код
 
Спасибо Всем за ответы.
Буду пробовать.
Спасибо.
Out of Memory при добавлении строк в код
 
Уважаемый Anchoret.
Благодарю за ответ. В течении недели файл отлаживался
В конкретно взятом файле, о котором идет речь в первом сообщении темы, запись кода впринципе отстутствовала.

Уважаемый vikttur.
Благодарю за ответ.
Поймите пожалуйста правильно.
Файл в достаточной степени громоздкий по содержанию и по "количеству кода". Такое  стало возникать во время отладки.
Почему именно я понять не могу.
Изменено: IgorBoot - 22 Фев 2019 14:06:30
Out of Memory при добавлении строк в код
 
Добрый день Уважаемые эксперты.
Может быть кто то сталкивался с подобной проблемой.
При попытке в рабочем файле в редакторе VBE внести дополнительную строку возникает ошибка "Out of Memory".
Я понимаю что ошибка сигнализирует о недостатке памяти. Но в решении проблем по этой ошибке, насколько я смог составить
свое суждение, Подобные ошибки возникают все-таки при компиляции, а не при попытке внести в код дополнительную строку.
Подобная ошибка возникает только в одном файле.
Файл относительно небольшой по вместимости (5 МБ) но все равно, с точки зрения правил форума,  выходит за уровень верхне-допустимой границы размещения.
Так вот была у кого нибудь это ошибка именно при попытке добавить в код дополнительные строки?

Благодарю Вас.
Пополнение массива из отфильтрованного диапазона
 
Добрый день Уважаемые Эксперты.

Позвольте у Вас уточнить возможно ли заполнение массива из отфильтрованного диапазона,
по технологии подобной следующей:
Код
A = Range("A2:A26").SpecialCells(xlCellTypeVisible)
В принципе массив заполняется, но только до наступления фильтра.
В кратце о диапазоне(диапазон довольно прост, в нем есть числа 1 2 3 4 5, каждое повторяется по 5 раз. Фильтром исключено число 4.
Вот мой вариант кода:

Код
Sub Popolnenie_Otfiltrovannym()
Dim A() As Variant

' Проверка копированием
Range("A2:A26").SpecialCells(xlCellTypeVisible).Copy
Range("H30").Select
ActiveSheet.Paste

' Проверка копированием
A = Range("A2:A26").SpecialCells(xlCellTypeVisible)[E30].Resize(UBound(A)).Value = A
End Sub
Копирование проходит правильно, а массив же заполняется только до наступления фильтра.
В общем подскажите массив вообще возможно заполнять методом :
Код
.SpecialCells(xlCellTypeVisible)
Если без дополнительных манипуляций не возможно тогда:
- или циклическое заполнение массива
- или предварительное копирование в другое место с отключением фильтра( или копирование на другой лист) с заполнением массива
- или помещение в массив всей базовой выборки с дальнейшей фильтрацией массива функцией Filter.

Прошу помочь разобраться.

Благодарю Вас.
VBA последний заполненный столбец в диапазоне.
 
Уважаемый Sceptic.

Вот это класс так класс. Спасибо Вам.


Уважаемый Sceptic, скажите, а зачем столько запятых?


Я понял почему, это пропуски остальных параметров функции Find
Изменено: IgorBoot - 14 Фев 2019 13:12:16
VBA последний заполненный столбец в диапазоне.
 
Уважаемый Kuzmich.

Благодарю Вас за ответ. Предложенное Вами решение к сожалению ищет последние заполненные на листе, а не в границах диапазона.
Все равно Спасибо Вам большое.


Уважаемый Михаил Лебедев.
Благодарю за наводку. обязательно изучу.
VBA последний заполненный столбец в диапазоне.
 
Уважаемый Михаил Лебедев.
Благодарю Вас за ответ.

Позвольте у Вас уточнить, где идет присвоение rng2? Я этого к сожалению не вижу.

VBA последний заполненный столбец в диапазоне.
 
Уважаемый Sanja.
Источник Вы указали правильно.))

Уважаемый Михаил Лебедев
Значения, ну т.е. константы.

И в принципе если к Range() ничего нельзя добавить, чтобы был адекватный поиск, т.е. уходить на циклы.
то решение я сам докумекаю.

Скажите мне пожалуйста можно все таки с помощью Range() в указанном диапазоне найти последние заполненные строки/столбцы или нет?
VBA последний заполненный столбец в диапазоне.
 
Еще раз Здравствуйте Уважаемые Эксперты.
Подскажите возможно ли вообще в Диапазоне найти последний заполненный столбец?
Не на листе а в диапазоне?
Я заимствовал с одного схожего сайта конструкцию и на основе ее соорудил следующий код:
Код
Sub Posl_stroka()

Dim rF As Range
Dim lLastRow As Long, lLastCol As Long

Set rF = Range("A5:J16").Find("*", , xlValues, xlWhole, xlPrevious)
   lLastRow = rF.Row    'последняя заполненная строка
   lLastCol = rF.Column 'последний заполненный столбец

MsgBox lLastRow
MsgBox lLastCol

End Sub
По его итогу последней строкой оказалось 7, а столбцом 1. Хотя "Глазами" видно что последний заполненный столбец это 8, а строка 9. Складывается такое ощущение, что дальше 1 столбца предложенный выше вариант не анализировал.
Прошу уточнить, возможно ли именно в диапазоне, т.е. в объекте Range(),  найти последнюю заполненную строку и столбец?
Если не возможно, то остаются только циклы?

Прошу помочь разобраться.

Благодарю Вас?
VBA. Как записать формулу с кавычками внутри?
 
Уважаемый  V. Спасибо Вам за ответ.
Опять я на эти Двойные кавычки попадаюсь)).

Уважаемый Sanja. Вам тоже спасибо за ответ.
Изменено: IgorBoot - 14 Фев 2019 12:24:33
VBA. Как записать формулу с кавычками внутри?
 
Добрый День Уважаемые Эксперты.

Подскажите пожалуйста такой момент. Имеется два схожих между собой варианта заполнения диапазонов через VBA:
Код
Sub Proverka_Formula_Local()
Range("B3:B8").FormulaLocal = "=ЕСЛИ((RC[-1]-R[-1]C[-1])<=R2C5;0;RC[-1])"   '1 случай
Range("B3:B8").FormulaLocal = "=ЕСЛИ((RC[-1]-R[-1]C[-1])<=R2C5;"";RC[-1])"  '2 случай
End Sub
В первом случае в случае не выполнения условия в ячейку добавляется 0. Во втором случае пустота.
Первый случай выполняется, второй уходит на ошибку 1004. Если вводить формулу из второго случая на листе, то она работает. А через VBA не почему то не хочет.
Подскажите что нужно изменить или добавить, чтобы отработал второй случай?

Прошу помочь разобраться.
Благодарю Вас.
Вывод массива на лист без циклическим способом
 
Уважаемый Nordheim Благодарю Вас за ответ.
Вы Правы, второй цикл не имеет вообще никакого назначения, он был для проверки правильности вывода.
Спасибо за предложенное решение. Впредь буду более грамотно работать с массивами.
Спасибо Вам.
Вывод массива на лист без циклическим способом
 
Уважаемый k61  Благодарю Вас за ответ.
Все работает. Transpose это ведь транспонирование?
Вывод массива на лист без циклическим способом
 
Добрый День Уважаемые Эксперты.

Подскажите пожалуйста есть ли способ вывести на лист массив заполненный с помощью цикла, без циклическим способом?
Вот пример небольшого кода:
Код
Sub Obmen_Massivami()

Dim Peremennaya_Massiva As Variant
Vsego_Elementov = 10
    
     ReDim Peremennaya_Massiva(1 To Vsego_Elementov)

For i = 1 To Vsego_Elementov
  Peremennaya_Massiva(i) = Cells(i, 1)
Next i

For i = 1 To Vsego_Elementov
   Cells(i, 3) = Peremennaya_Massiva(i)
Next i

[E1].Resize(UBound(Peremennaya_Massiva)).Value = Peremennaya_Massiva     

End Sub
Подскажите что нужно дописать к строке:
Код
[E1].Resize(UBound(Peremennaya_Massiva)).Value = Peremennaya_Massiva
Чтобы выводился весь заполненный первым циклом массив? А не только его Первое(Верхнее) значение.
Т.е. еще раз, как вывести на лист массив, не циклическим способом, но при этом заполненным с помощью цикла?
Или даже так, Есть объект Range(), к нему можно обратиться например так Range(Cells(1, 1), Cells(10, 1)), из этой записи понятно что объект Range обращается к диапазону (A1:A10), а как сделать подобное обращение в массиву и вывести на лист?

Прошу по возможности помочь разобраться.

Благодарю Вас.
Определение значения конкретной позиции массива
 
Уважаемый БМВ Благодарю Вас за ответ и пояснение.

Уважаемый Sanja Благодарю Вас за ответ  и предоставленные конструкции.
Определение значения конкретной позиции массива
 
Добрый день Уважаемы Эксперты.

Подскажите пожалуйста такой момент. Если идет заполнение массива из диапазона взятого на листе
по следующей технологии:
Код
Dim a As Variant
a = Range("A1:A10")
Подскажите в данном одномерном массиве возможно узнать что будет в значении a(5).
Точнее так, можно ли узнать значение определенного места(например a(5)) массива, если при этом массив заполняется не циклическим способом?
Код
Sub Massiv_Diap()

Dim a As Variant
a = Range("A1:A10")

Cells(1, 3) = a(5)

End Sub

И на строке:
Код
Cells(1, 3) = a(5)
получил ошибку Subscrip out of range. Видимо не прав, или в синтаксисе или это вообще не возможно.
Прошу прощения за название темы лучше пока не придумал.

Прошу помочь разобраться.


Благодарю Вас.
Циклическое перемещение диапазона с помощью массивов VBA
 
Вот что я хотел в итоге:
Код
Sub Maassive()

Dim A As Variant

   Nom_grup = 3
     ReDim A(1 To Nom_grup)

'A = Range("F4:G9")

'Range("I4:J9") = A

 k = 3
 m = 3
 
Shag_cikla2 = Nom_grup
Nom_grup = 0

For i = 1 To Shag_cikla2
    
    k = k + 1
    Nom_grup = Nom_grup + 1
    'A(Nom_grup) = Range("F4:G5")
    A(Nom_grup) = Range("F" & Cells(k, 3) & ":G" & Cells(k, 4))
    
Next i

Shag_cikla2 = Nom_grup
Nom_grup = 0

For i = 1 To Shag_cikla2

   m = m + 1
   Nom_grup = Nom_grup + 1

   'Range("I4:J9") = A(Nom_grup)
   Range("I" & Cells(m, 3) & ":J" & Cells(m, 4)) = A(Nom_grup)

Next i

End Sub
Спасибо Всем за участие
Изменено: IgorBoot - 2 Фев 2019 17:49:58
Циклическое перемещение диапазона с помощью массивов VBA
 
Уважаемый Nordheim

В ячейке C4 или Cells(4, 3)
В ячейке D4 или Cells(4, 4)

Находится Границы массивов, в данном случае это будет "F4:G5".
Подскажите как в строке:
Код
arr = [f4:g9].Value
Задать тоже самое но динамическим диапазоном, т.е. 4 и 9( в данном случае 5) брать из ячеек C4 и D4?
Благодарю Вас.
Изменено: IgorBoot - 1 Фев 2019 15:01:20
Циклическое перемещение диапазона с помощью массивов VBA
 
Уважаемый Nordheim.
Пример задачи, если учебной, то Перемещение только 1 и только 3 элмента массива, т.е. общий массив (6х2, разбивается на 3 участка, по 2Х2 и небходимо,
в условное место вывести нужные элементы массива. В реальной задаче просто выборка объемнее. Там в файлике в заглавном посте, был диапазон C4:D6, в котором были границы строк отбора. Т.е. в столбце C начало отбора диапазона, в стоблце D конец отбора диапазона.
Подскажите пожалуйста, тогда как строку из предложенного Вами кода:
Код
arr = [f4:g9].Value
Задать с помощью динамического диапазона?.
Благодарю.
Изменено: IgorBoot - 1 Фев 2019 14:30:57
Циклическое перемещение диапазона с помощью массивов VBA
 
Уважаемый Nordheim благодарю Вас за ответ.
А не подскажите как это делать по частям? и динамическими диапазонами?
Благодарю за ответ еще раз.
Код
Sub Maassive1()
    Dim arr()
    'arr = [f4:g9].Value
    A1 = Cells(4, 3)
    A2 = Cells(4, 4)
    
   ' arr = ["f" & Cells(4,3) & ":g" & Cells(4,3)].Value
   arr = ["f"&A1&":g"& A2].Value
    
    [i4].Resize(UBound(arr), UBound(arr, 2)).Value = arr
End Sub
На строрке:
Код
arr = ["f"&A1&":g"& A2].Value
возникает ошибка объект не обнаружен.
Что делаю не так, мне не ясно.
Прошу помочь доразобраться
Изменено: IgorBoot - 1 Фев 2019 14:10:46
Циклическое перемещение диапазона с помощью массивов VBA
 
Добрый день Уважаемые Эксперты.

Прошу помочь разобраться в следующем вопросе.
У наc имеется диапазон  Range("F4:G9")
Подскажите пожалуйста как с помощью массивов в три захода его перенести в соседний диапазон Range("I4:J9")?
Под речевым оборотом в три захода, я имею ввиду естественно цикл. Т.е. если у нас массив размерностью 6х2 (6 строк Х 2 столбца), то по задумке желательно, чтобы
присваивание шло в переменные массива 2х2 (2 строки и 2 столбца). Координаты начала и конца каждой строки распологаются в диапазоне Range("C4:D6")
Вообщем вот мой вариант:
Код
Sub Maassive()
Dim A As Variant
   Nom_grup = 3
     ReDim A(1 To Nom_grup)

 k = 3
 m = 3

For i = 1 To Nom_grup
    
    k = k + 1
    A(Nom_grup) = Range("F" & Cells(k, 3) & ":G" & Cells(k, 4))
    
Next i

Shag_cikla2 = Nom_grup
Nom_grup = 0

For i = 1 To Shag_cikla2

   Nom_grup = Nom_grup + 1
   m = m + 1
   Range("I" & Cells(m, 3) & ":J" & Cells(m, 4)) = A(Nom_grup)

Next i

End Sub
По факту выполнения данного кода заполнятся только диапазон  Range("I8:J9"), т.е. тот A(Nom_grup), при котором Nom_grup = 3.
Соответственно, а как собственно говоря необходимо дополнить или видоизменить данный код, чтобы A() при Nom_grup = 1 и 2, тоже заполнялись?
на свои места, т.е.  Range("I4:J5") и Range("I6:J7")?
Признаю что формулировку проблемы вряд ли можно отнести к разряду удачных, за это отдельно прошу прощения.
Попробую попроще, как диапазон(6Х2) с помощью трех массивов(2Х2) перенести в соседний диапазон с помощью VBA.

Прошу помочь разобраться.

Благадарю Вас.
 
VBA подсчет выделенных листов
 
Уважаемый magistor8.
Спасибо большое все работает.
Кто принимал участие тоже большое Спасибо.




Уважаемый Юрий М
Вам тоже Спасибо.
Изменено: IgorBoot - 15 Янв 2019 15:06:29
VBA подсчет выделенных листов
 
Добрый день Уважаемые Эксперты.

Подскажите пожалуйста как в Экселе с помощью VBA подсчитать выделенные листы?
Только количество. Притом даже если есть функция которая считает именно выделенные листы, прошу указать как это сделать перебором.
Мой вариант:
Код
Sub Podchet_Vydelennyh()

   Vsego_Listov = Worksheets.Count

  For i = 1 To Vsego_Listov

    If Sheets(i).Selection = True Then

       Count_Selestion = Count_Selection + 1
    
    End If

  Next i

MsgBox Count_Selestion

End Sub
На вот этой строке:
Код
If Sheets(i).Selection = True Then
Процедура уходит на 438 ошибку. Что говорит, о том что критерий выделено/не_выделено определяется иным образом.
Как именно я к сожалению сказать не могу.

Прошу помочь разобраться

Благодарю Вас
Остановка процедуры с повторением всей процедуры по времени.
 
Уважаемый Ігор Гончаренко, Уважаемый БМВ Признателен Вам за ответы.
Спасибо Вам.
Уважаемый Ігор Гончаренко будьте добры подскажите как следует понимать,
-эту строку:
Код
CTp = Application.Calculation:   Application.Calculation = xlCalculationManual
-и эту:
Код
Application.Calculation = CTp
Насколько я понимаю, первая строка говорит о том что все расчеты производятся только "вручную", ну или в данном случае по команде. А во втором случае активировать пересчет, притом пересчитан будет весь лист?
И правильно ли я понимаю что если мы хотим пересчитывать именно Cells(8, 7),  то вторую строку нужно чуть подредактировать:
Код
Cells(8, 7).Application.Calculation = CTp
Признаю в первом сообщении темы и в самом названии темы этого и близко не было. Но Вы конструкцию показали, о которой я даже и не догадывался, а как именно она работает, и как ее в дальнейшем можно применить понимания в принципе нет.

Еще раз Благодарю за ответы.
Остановка процедуры с повторением всей процедуры по времени.
 
Уважаемый БМВ, Благодарю Вас за ответ и за подсказанные направления.

Подскажите, если идти по первому сценарию, т.е.:
Цитата
Schedule:=false отменит назначенную задачу, но для этого требуется знать время и процедуру
Возможно ли ввести в конструкцию текущее время? Я попробовал подобным образом:
Код
A = Now()
Application.OnTime TimeValue(CStr(A)), Procedure:="test_1", Schedule:=False
И у меня не получилось.

В принципе возможно ли конкретно для конструкции OnTime Schedule:=False взять текущее время для остановки?.
Благодарю еще раз.
Остановка процедуры с повторением всей процедуры по времени.
 
Добрый вечер Уважаемые Эксперты.

Как более старшие и опытные товарищи помогите пожалуйста советом.

Для работы некоторых макросов, необходимо "Циклическое выполнение всей процедуры".
Я имею ввиду прописанные в теле процедуры примерно такой конструкции:
Код
Application.OnTime Now() + TimeSerial(0, 0, 1), "Sub_Name" ' где Sub_Name - Имя процедуры
Подскажите пожалуйста, какие есть способы остановки макросов, с подобным циклическим обращением ко всей процедуре?. Кроме прерывания.
Точнее даже так, если макрос который содержит подобную конструкцию вывести на кнопку, то чтобы его остановить, можно ли обойтись этой кнопкой.
Вообщем будьте добры для начала ответьте каким образом можно останавливать подобные процедуры.

P.S. Прошу прощения перед Админами и старожилами, за отсутствие файла примера. Файла пример не создал, поскольку нет понимания как его сделать. И заранее прошу прощения за название темы, лучше в голову не пришло. Я постараюсь насколько возможно оставаться в рамках темы.

Прошу помочь разобраться.

Благодарю Вас.
Изменено: IgorBoot - 11 Янв 2019 20:33:49
VBA. Применение Indirect в стиле R1C1
 
Уважаемый buchlotnik, Спасибо Вам.
Знал бы сразу, что все так просто.
VBA. Применение Indirect в стиле R1C1
 
Добрый день Уважаемые Эксперты.

Прошу помочь разобраться в нюансах вывода функции Indirect(двссыл) с помощью VBA на лист.
Есть файл пример, и есть предполагаемая конструкция, которая работает на листе, но в VBA подсвечивается красным,
я так полагаю для стиля R1C1 есть свой отличительный нюанс, который я по всей видимости не знаю.
Сама конструкция вот:
Код
Cells(6, 7).FormulaR1C1 = "=Indirect("RC[-3]",False)"
В редакторе VBE данная строка подсвечивается красным, почему именно подсвечивается красным я сказать к сожалению не могу. Сама конструкция показана в ячейке Cells(7, 7).

Прошу помочь разобраться.

Благодарю Вас.
VBA. Склеивание названия переменной
 
Уважаемый vikttur
Спасибо за ответ.
Вы правы, не получилось, я просто это в тексте не указал, впредь буду указывать, Ваша конструкция для файла примера работает отлично. Спасибо.

Уважаемый Казанский.
Спасибо за ответ.
Пойду читать. А то стыдно даже как-то стало. Вроде какие то не самые легкие штуки получаются, а основ до конца не знаю.
Спасибо за ссылку.
VBA. Склеивание названия переменной
 
Код
Dim Count(0 To 1)
Подскажите а подобные массивы можно задать от 1 до i, и прогнать циклом, наподобие того как выполнено здесь:
Код
Sub test1()
Dim Count(1 To i)

For i = 1 To 4
 Cells(i, 6) = Count(i)
Next i

End Sub
Изменено: IgorBoot - 24 Дек 2018 12:05:22
Страницы: 1 2 3 4 След.
Наверх