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

Страницы: 1 2 3 4 5 6 След.
Удаление строк в умной таблице, Удаление последней строки макросом
 
Sanja, Спасибо!
Всё работает отлично 👍👍👍👍
Удаление строк в умной таблице, Удаление последней строки макросом
 
Всё, ошибка найдена )))
Код
Sub УдалитьСтроку()
    Dim r As Integer
    r = Selection.ListObject.ListRows.Count
    Selection.ListObject.ListRows(r).Delete
End Sub
Переменной не указал где делать подсчёт строк.

Но теперь если курсов не на умной таблице, то макрос ругается и вылетает. Как избежать сей проблемы? Какой запустить алгоритм/, что бы проверял, что курсор стоит на умной таблице а не в пустом поле ))
Изменено: Sheriff - 01.11.2025 03:01:19
Удаление строк в умной таблице, Удаление последней строки макросом
 
Всем доброго времени суток!

На листах имеются умные таблицы. Требуется без привязки к определённой таблице удалять последнюю строку. Т.е. ставлю курсор на таблицу и запускаю макрос, который удаляет строку в активной таблице.

Добавлять строку не составляет труда:
Код
Sub ДобавитьСтроку()
    Selection.ListObject.ListRows.Add
End Sub
Думал и удалить не будет проблем. Создал переменную, выполняю подсчёт строк и удаляю последнюю, но не работает моя идея:
Код
Sub УдалитьСтроку()
    Dim r As Integer
    r = ListObject.ListRows.Count
    Selection.ListObject.ListRows(r).Delete
End Sub
Где допускаю ошибку, не могу понять. Или что то не правильно вообще делаю?
Очистка ячеек на листе, Очистка ячеек на листе, цикл со смещением.
 
Дмитрий(The_Prist) Щербаков, Спасибо. Внёс корректировки. Определил изначально ячейку без объединения, и всё заработало как часы. )))
Код
Sub Clear_All()
Dim i As Long
    Dim StartRow As Range
    Dim DelRow As Range
    'B12:B21, E12:S21, AE12:AE21, C4:G4, Q5:T5, G5:K5
    For i = 0 To 9
        Set StartRow = ActiveSheet.Range("G5").Offset(i * 25, 0)
        'Set DelRow = Union(StartRow.Offset(8, -1), StartRow.Offset(8, 2), StartRow.Offset(8, 28), StartRow, StartRow.Offset(1, 14), StartRow.Offset(1, 4))
        Set DelRow = Union(StartRow.Resize(1, 5), StartRow.Offset(-1, -4).Resize(1, 5), StartRow.Offset(0, 10).Resize(1, 4), StartRow.Offset(7, -5).Resize(10, 1), StartRow.Offset(7, -2).Resize(10, 15), StartRow.Offset(7, 24).Resize(10, 1))
        DelRow.Select
        Selection.ClearContents
    Next i
            
End Sub

Указа на объединённые ячеки как на диапазон.
Заработала шарманка ))
Очистка ячеек на листе, Очистка ячеек на листе, цикл со смещением.
 
Или может другой есть вариант очистки? Более простой.
Очистка ячеек на листе, Очистка ячеек на листе, цикл со смещением.
 
На форме ячейка C4, которую я беру за начальную, объеденинена. Возмоно, что offset не правильно отсчитывает смещение из-за этого?
Очистка ячеек на листе, Очистка ячеек на листе, цикл со смещением.
 
МатросНаЗебре, работает, но с каким то смещением не понятным... Первоначальный блок очищает, а последующие убегают...

В свой нес правки:
Код
Sub Смещ_Del()
    Dim i As Long
    Dim StartRow As Range
    Dim DelRow As Range
    'B12:B21, E12:S21, AE12:AE21, C4, Q5, G5:K5
    For i = 0 To 9
        Set StartRow = ActiveSheet.Range("C4").Offset(i * 25, 0)
        Set DelRow = Union(StartRow.Offset(8, -1), StartRow.Offset(8, 2), StartRow.Offset(8, 28), StartRow, StartRow.Offset(1, 14), StartRow.Offset(1, 4))
        Set DelRow = Union(DelRow, StartRow.Offset(8, -1).Resize(10, 1), StartRow.Offset(8, 2).Resize(10, 15), StartRow.Offset(8, 28).Resize(10, 1), StartRow.Offset(1, 4).Resize(1, 5))
        DelRow.Select
        Selection.ClearContents
    Next i
            
End Sub
Тоже заработал через одно место. Смещение не правильное, хотя всё проверил вручную.
Очистка ячеек на листе, Очистка ячеек на листе, цикл со смещением.
 
Есть группа ячеек: B12:B21, E12:S21, AE12:AE21, C4, Q5, G5:K5 - которые нужно очистить.

Через 25 строк, блок ячеек посторяется со смещением вниз на 25 строк, через 25 строк еще один блок ячеек и таких блоков 10.

Написал код, перебрав все ячейки, во всех 10 блоках, и очищение. Работает. Решил его адаптировать. Вдруг добавлю ещё 10 блоков, и прописывать ещё кучу диапазонов не хотелось.
Но не выходит у меня каменный цветок, как только код не переписываю.
Вот один из вариантов:
Код
Sub Clear_All()
    Dim i As Long
    Dim StartRow As Range
    Dim DelRow As Range
    'B12:B21, E12:S21, AE12:AE21, C4, Q5, G5:K5
    For i = 0 To 9
        Set StartRow = ActiveSheet.Range("C4").Offset(i * 25, 0)
        Set DelRow = Union(StartRow.Offset(8, -1), StartRow.Offset(8, 2), StartRow.Offset(8, 28), StartRow, StartRow.Offset(1, 14), StartRow.Offset(1, 4))
        Set DelRow = Union(DelRow, StartRow.Offset(8, -1).Resize(10, 1), StartRow.Offset(8, 2).Resize(10, 15), StartRow.Offset(8, 28).Resize(10, 1), StartRow.Offset(1, 4).Resize(1, 5))
        DelRow.ClearContents
    Next i
            
End Sub
Он вообще выдаёт ошибку, а в чём проблема, не могу понять ((.
Изменено: Sheriff - 22.10.2025 17:49:55 (ошибка в коде)
Остаток от деления, Проблема в вычислении
 
Цитата
написал:
=ОСТАТ(2*10;0,4*10)
Помогло. Спасибо большое.

Не понял как это работает, но сработало отлично))).

Цитата
написал:
=2-0,4*ЦЕЛОЕ(2/0,4)
Так тоже работает без бага )))
Спасибо за помощь.
Остаток от деления, Проблема в вычислении
 
Это частный случай. В чеслителе не всегда 2 бывает. Там ссылка на ячейку. Заметил ошибку в числах, кратным двум.
Изменено: Sheriff - 26.08.2025 19:11:24
Остаток от деления, Проблема в вычислении
 
Всем привет!
Столкнулся со следующей проблемой. Вроде пустяк, но расчёт excel почему то делает не верный, а как исправить, не могу понять.

Вот в чём вопрос:
Есть формула, внутри которой условие, если остаток от деления 0, то выполнять действие такое-то, в противном случае иное.
Но при вычислении деления 2 / 0,4 — остатка быть не должно. Делиться ровно на 5 частей, но формула:
Код
=ОСТАТ(2;0,4)

выдаёт остаток 0,4, и дальнейший расчёт летит в трубу. В чём подвох, и как его исправить???

Изменено: Sheriff - 26.08.2025 18:48:44
Печать нескольких листов одним кликом, Макрос для выбора нескольких листов для вывода на печать
 
MikeVol, Спасибо. Но с данным методом что то не так. Он мне 2 страницы - на 28 страниц разбил, как Бог на душу ему положил. Воедино не собрать.
Не получится, буду по одной странице выводить на печать.

Я с формулами работаю хорошо. Не супер профессионал конечно, но для меня более чем достаточно, а вот vba -полный лес, хоть и пытаюсь иной раз код какой нибудь применить у себя.

Так что, не обессудьте.
Изменено: Sheriff - 04.11.2024 00:14:28
Печать нескольких листов одним кликом, Макрос для выбора нескольких листов для вывода на печать
 
MikeVol, Данный вариант выводит всё в формат pdf, не спрашивая. По умолчанию. Мне нужно, выделить два листа и запустить на печать... Каким принтером не важно. Октыться должен просмотрщик и печать.
Печать нескольких листов одним кликом, Макрос для выбора нескольких листов для вывода на печать
 
nilske, Нет, не забыл. Статья «Как распечатать несколько листов Excel в одном файле PDF с помощью VBA (методы 6)». Но мне не нужно печатать в pdf. Ещё раз говорю, я привёл данный пример, как показательный.  
Печать нескольких листов одним кликом, Макрос для выбора нескольких листов для вывода на печать
 
MikeVol, Ваш макрос очень для меня сложный оказался. Он запускает на компиляцию сразу два листа в pdf, но на при выборе принтера печатает их опять по очереди.
Вычленить объединение листов из кода, к сожалению у меня не хватает ума.  
Печать нескольких листов одним кликом, Макрос для выбора нескольких листов для вывода на печать
 
Цитата
написал:
Ну про PDF речи не было, а про
Вы меня не правильно поняли. Вариант с pdf, привёл как пример, для наглядности.
Командой:
Код
Application.Dialogs(xlDialogPrinterSetup).Show
я вызываю окно выбора принтера. И выбираю или принтер, или программу компиляции файла в формат pdf.

У меня макрос:
Код
Sub PrintAll()
    Set PList1 = ThisWorkbook.Worksheets("стр1")
    Set PList2 = ThisWorkbook.Worksheets("стр2")
    PList1.Calculate
    Application.Dialogs(xlDialogPrinterSetup).Show 'выбор принтера для печати
    PList1.PrintOut
    PList2.PrintOut
End Sub
выбирает один лист (стр1), потом второй (стр2) и выводит их по очереди на печать:
   

Вами предложенные варианты, выполняют аналогичный алгоритм

А у меня задача, вывести оба листа одновременно:

Тогда при просмотре появляется сразу 2 страницы:

 И я могу хоть на принтер отправить, хоть в программу для компиляции в pdf.
Изменено: Sheriff - 03.11.2024 18:01:41
Печать нескольких листов одним кликом, Макрос для выбора нескольких листов для вывода на печать
 
Спасибо большое. Но такой метод вывода на печать (все три варианта) - последовательный. Т.е. печатается одна страница, потом вторая. Если я запускаю печать в pdf например, то создаются два файла.
У меня так тоже получается разными способами.
Задача напечатать сразу два листа.
Если без макроса, то я выделяю два листа книги и кликаю Ctrl+P. У меня сразу на печать два листа. Если я вывожу печать в pdf, у меня получается один файл с двумя листами.
И вот именно такой финт, у меня не получается исполнить с помощью макроса.
Изменено: Sheriff - 03.11.2024 13:46:26
Печать нескольких листов одним кликом, Макрос для выбора нескольких листов для вывода на печать
 
Дорогие форумчане!
Подобные решения есть, но ни как не могу применить к моей задачи. Прошу помощи.
Есть у меня такие макросы для вывода на печать листов:
Код
Option Explicit
Dim PList1 As Worksheet
Dim PList2 As Worksheet

Sub Print_PList1()
    Set PList1 = ThisWorkbook.Worksheets("стр1")
    PList1.Calculate
    Application.Dialogs(xlDialogPrinterSetup).Show
    PList1.PrintOut
End Sub

Sub Print_PList2()
    Set PList2 = ThisWorkbook.Worksheets("стр2")
    PList2.Calculate
    Application.Dialogs(xlDialogPrinterSetup).Show
    PList2.PrintOut
End Sub
Хочу, подправить макрос, что бы он выводил на печать сразу оба листа. Но что бы не делал, выдаёт ошибку. По одному - работают отлично.
Печать подписи в конце длинной таблицы
 
Я даже пробовал область печати задавать динамически изменяемой формулой, сцепляя две области. Но он печатает все страницы одной области, а страницу с подписями выводит на отдельную.
Может можно макросом как-то скрывать пустые строки таблицы, тогда получится, но как этого сделать я не знаю. Но идея кажется рабочей.
Объединение ячеек по условию, Объединение ячеек по условию с помощью макроса
 
Sanim, Формулами указать первый и последний день месяца, проблемм нет. Проставить везде 31, а в зависимости от месяца прописывать фактически сколько дней можно, но это только шапка айсберга. Из 3 строки собираются данные по дням и окрашиваются ячейки графика. Выложил часть, с которой у меня сложности. Всё остальное реализовано.

Приходится выкручиваться с постоянным объединением. Если бы ещё не было высокостного года... а так много условий. Вот и подумал, что можно было бы объединить ячейки макросом по условию.
Создать кнопку и в зависимости от месяца начала и продолжительности графика, объединить ячейки в 1 и 2 строках. В интернете нашёл только такой вариант: https://exceltable.com/vba-macros/kak-obedinit-yacheyki-makros, но к решению  моей задачи применить не смог.
Объединение ячеек по условию, Объединение ячеек по условию с помощью макроса
 
Всем доброго времени суток!

Сталкнулся со следующей задачей, как реализовать, не знаю. Может кто подскажет, буду крайне благодарен.

Есть строка, в которой указывается дата начала, и далее все ячейки +1 к данной дате. Получается период начала и окончания. (это строка 3)
В строке 1, объединённые ячейки групируют месяц, и формулой я подгружаю из строки 3, имя месяца и год
В строке 2, в объединённых ячейках указываю периоды месяца: 1-10, 11-20, 21 - 30(31, 28, 29)
В зависимости от того, какой месяц, мне приходится в ручную переобъединять ячейки с месяцем и датами.

Вопрос, можно ли, в зависимости от месяца, по условию макросом объединять ячейки в 1 строке (1-30, 1-31, 1-28 (29)) и во второй строке аналогично?
Файл прилагаю.
Изменено: Sheriff - 08.04.2024 20:25:50
Имя Умной таблицы в ячейке
 
ddmax, а можно поинтересоваться, как указали имя умной таблицы с помощью формулы?

А по вашему вопросу, я через фунццию ДВССЫЛ() ссылку прописываю. Если "Умная таблица" из одного столбца, то просто указываю ссылку на ячейку где её имя, если несколько, то комбинирую.

например имя Умной таблицы - QWA и у меё 3 столбца: Столбец_1, Столбец_2 и Столбец_3.
Мне нужно найти значение в Столбец_3 на основании данных из Столбец_1.
В ячейке скажем A1 указано имя Умной таблицы. Формула следующая:

Код
=ВПР(Искомое_значение;ДВССЫЛ(A1&"[Столбец_1]");3;)


И всё будет работать. Но лучше пользоваться через ИНДЕКС, больше возможностей и гибче:

Код
=ИНДЕКС(ДВССЫЛ(A1);ПОИСКПОЗ(Искомое_значение;ДВССЫЛ(A1&"[Столбец_1]"););3)
Изменено: Sheriff - 07.02.2024 17:43:13
Разбить строку на 2 части по количеству символов, запустить цикл по разделению длинной строки на части
 
New, спасибо!!!!!
Разбить строку на 2 части по количеству символов, запустить цикл по разделению длинной строки на части
 
Jack Famous, Да не нужны мне ячейки, сам с ними справлюсь.
Не получается переделать, как только не пробовал.
И так:
Код
Sub test()
Dim x, tx$
    tx = UserForm1.TextBox1.Value
    x = SplitBy58(tx): If Not IsArray(x) Then UserForm1.TextBox2.Value x = vbInformation: Exit Sub
    UserForm1.TextBox2.Value x(1) = vbInformation: UserForm1.TextBox3.Value x(2) = vbInformation
End Sub
И так:
Код
Sub test()
Dim x, tx$
    tx = UserForm1.TextBox1.Value
    x = SplitBy58(tx): If Not IsArray(x) Then UserForm1.TextBox2.Value = x, vbInformation: Exit Sub
    UserForm1.TextBox2.Value = x(1), vbInformation: UserForm1.TextBox3.Value = x(2), vbInformation
End Sub
И так:
Код
Sub test()
Dim x, tx$
    tx = UserForm1.TextBox1.Value
    x = SplitBy58(tx): If Not IsArray(x) Then UserForm1.TextBox2.Value = vbInformation: Exit Sub
    UserForm1.TextBox2.Value = vbInformation
    UserForm1.TextBox3.Value = vbInformation
End Sub
Какие ещё есть варианты?
Разбить строку на 2 части по количеству символов, запустить цикл по разделению длинной строки на части
 
Msi2102, Я вас услышал. Но как из textbox перенести в ячейку, я знаю, а как при этом обработать запрос и разделить в разные ячейки таблицы, для меня тёмный лес.  
Разбить строку на 2 части по количеству символов, запустить цикл по разделению длинной строки на части
 
Msi2102, Да я так и собирался. Но что бы проще объяснить что мне нужно, описал суть проблемы, что нужно и как разбить.
Но как это сделать с вашими примерами, я так и не понял. Пока понимаю VBA на примитивном уровне.

Jack Famous, отлично написан макрос! в окнах выскакивает как мне нужно! И я вместо MsgBox прописываю UserForm1.TextBox2.Value - И у меня ошибка.
Понимаю, что ни так как то нужно. А как правильно, не знаю.

Всем спасибо.  
Разбить строку на 2 части по количеству символов, запустить цикл по разделению длинной строки на части
 
Jack Famous, То что нужно, работает отлично, но это окна, а как с textbox связать?

Подскажите, файл во вложении.
Разбить строку на 2 части по количеству символов, запустить цикл по разделению длинной строки на части
 
Msi2102, нет, там не ручной ввод. Я ComboBox-ами выбираю, город, улицу, объект.
все данные соединяются  в textbox1. И должны по нажатию кнопки заполнить форму в excel. Но длина строки в форме вмещает не более 58 символов.
вот и нужно сделать перенос на другую строку.
Разбить строку на 2 части по количеству символов, запустить цикл по разделению длинной строки на части
 
Всем доброго времени!

Есть три textBox. В один, скажем textbox1 записывается адрес. Если адрес более определённого количества символов (более 58), то нужно разделить текст на 2 части. До 58 символов в textbox2 и весь остаток в textbox3.

Но есть одна заковырка, если 59 символ является продолжением не законченного слова, то нужно найти начало этого слова, и перенести его в textbox3 целиком, а в textbox2 записать соответственно не 58 символов, а меньше, до начало слова.

Пример:
г. Санкт-Петербург, ул. Бухарестская, 27 корп.12, (м-н Старая Деревня)          'текст который в textbox1. Всего 71 символ
г. Санкт-Петербург, ул. Бухарестская, 27 корп.12, (м-н                                        'текст который должен попасть в textbox2 - 55 символов
Старая Деревня)                                                                                                     'остальной текст в textbox3

Мои мысли, проверить 59 символ, если пробел, то всё ОК. 58 символов в textbox2, остальное в textbox3. Если нет, то проверяем 57 символ, потом 56, 55, 54 и т.д. пока не найдём пробел. Как только пробел найден, то осуществляем деление на 2 части.
Но как это написать кодом? Подскажите пожалуйста.
Изменено: Юрий М - 30.08.2022 16:02:14
=ВПР ошибка #Н/Д, В чём может быть причина? =ВПР ошибка #Н/Д
 
Руслан Колесниченко, ВПР не работает слева на право. Тебе нужно поменять столбцы местами или формулу другую применить, не ВПР а ИНДЕКС:

=ИНДЕКС(A2:B5;ПОИСКПОЗ(G5;B2:B5;);1)

Страницы: 1 2 3 4 5 6 След.
Наверх