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

Страницы: 1 2 3 4 След.
Заполнить ячейки датами с первого по последнее число
 
buchlotnik,что-то не заметил вначале. Пробую применить...
Через пять минут:
Работает! Моя благодарность.
Изменено: MrBrown - 12 сен 2020 22:03:42
Заполнить ячейки датами с первого по последнее число
 
buchlotnik, Благодарю, ушёл разбираться.
Через пару минут:
Начало месяца - работает! Спасибо. Думаю с окончанием разберусь по образу и подобию.
Ещё раз моя благодарность.
Ещё через пять минут:
Увы, не получается. Как указать конец месяца, когда 30, 31, 28 и 29 дней?
Изменено: MrBrown - 12 сен 2020 21:46:44
Заполнить ячейки датами с первого по последнее число
 
Здравствуйте!

Мой макрос строит график Ганта.

В нём:
начальная дата - dtmin (допустим, 16.4.2020)
конечная дата - dtmax (допустим, 20.8.2020
разница между ними - dtDiff

Нижеприведённый код заполняет ячейки от dtmin до dtmax (со сдвигом на 10 ячеек, но это не суть важно):
Код
    Plus = dtmin
    For k = 10 To dtDiff + 10
        With Cells(1, k)
            .Value = Plus
            .NumberFormat = "m/d/yyyy"
        End With
    Plus = Plus + 1
    Next
Как получить заполнение ячеек:
не от 16.4.2020 до 20.8.2020,
а от 01.4.2020 до 31.8.2020, т.е. от начала начального месяца до конца конечного?
Чувствую, что нужно задействовать функцию определения месяца month(dtmin) и month(dtmax) и использовать её при заполнении ячеек с первого числа апреля до конечного числа августа. Как конкретно - ума не приложу. Прошу помощи.
Спасибо.
[ Закрыто] Макрос выполнять на листе, соответствующем нажатой кнопке
 
Будущий, как говорится, интерфейс, должен иметь такой вид при четырёх картинках (см. файл)
Изменено: MrBrown - 14 авг 2020 21:45:45
[ Закрыто] Макрос выполнять на листе, соответствующем нажатой кнопке
 
Цитата
Mershik написал:
а "анимация" (скорость работы) обязательная?
Mershik, честно говоря, сам ещё не понял. Думаю, что скорость должная быть максимальной. Замедлить всегда можно.
[ Закрыто] Макрос выполнять на листе, соответствующем нажатой кнопке
 
vikttur, Да вот, что-то не получается. С грамматикой кода я слабоват. Пробую дальше.
[ Закрыто] Макрос выполнять на листе, соответствующем нажатой кнопке
 
Ладно, чтобы совсем было ясно, раскрою секрет:
 
ваяю простую детскую развлекалку - смена картинки. В приложенном файле по нажатию кнопки картинка меняется на другую, с листа2.
На листах 3, 4, 5 и т.д. (их ещё нет) будут другие картинки, а на листе 1 будут ещё кнопки. По нажатию определённой (например 6-й) кнопки картинка на первом листе заменится картинкой с 6-го листа. Вот мне и нужно переделать существующий макрос в модуле так, чтобы он был только один, но работал по-разному от разных кнопок - брал картинку с разных листов.
Благодарю всех за участие.

p.s Приглашаю всех желающих улучшить мою игрушку.
[ Закрыто] Макрос выполнять на листе, соответствующем нажатой кнопке
 
Что-то не получается...
На самом первом, скажем, "нулевом", листе находится с десяток кнопок, а в предложенном макросе я вижу только одну - CommandButton1_Click()
У меня непонятка, как задействовать оставшиеся CommandButton2, 3, 4 и т.д., чтобы при нажатии на кнопку с надписью "6" макрос отрабатывал на листе "6".
[ Закрыто] Макрос выполнять на листе, соответствующем нажатой кнопке
 
Здравствуйте!
Помогите, пожалуйста, с "грамматикой" кода.
Ваяю примерно так:
Код
Sub Start()

    Dim i As Integer, j As Integer, a As Long, x As New Collection, y As Range, N As Long
    N = CommandButton.Application.Caller
    
    With Sheets(N)
...
нужно, чтобы макрос выполнялся  на листе, одноимённом с названием кнопки CommandButton ActiveX (свойство "Caption").
Прошу помочь с определением переменной "N".
Спасибо.
Найти крайнюю ячейку относительно границы рамки
 
Андрей VG, Работает! Моя благодарность - словами не описать.
Цитата
Андрей VG написал:
Предупреждать надо, что вы программист Ctrl+C, Ctrl+V
Класс! Я восхищён таким точным определением дилетанта от программирования. :)
Возьму на вооружение. :D  
Изменено: MrBrown - 5 июн 2019 14:12:41
Найти крайнюю ячейку относительно границы рамки
 
Вот частный случай:
надо найти ячейку АМ56 (закрашена жёлтым).

Андрей VG, благодарю за код. Но, как ни пытался использовать функцию, вставлять её в процедуру "Sub", - не получилось.
Знаний мало. Подскажите, что вписать в скобки после наименования функции:
Код
Sub test()
    getBottomRightOutsideBorderCell
    MsgBox result
End Sub
Изменено: MrBrown - 5 июн 2019 12:10:55
Об уведомлениях о новых ответах на посты
 
Виноват. Прошу модератора произвести известные телодвижения по переносу моего поста.
(Или по его ликвидации - мне всё стало ясно)
Спасибо.
Найти крайнюю ячейку относительно границы рамки
 
RAN, крайняя - правая нижняя ячейка. Это С10.
Согласен, тут приведён прикольный вариант с бордюрами.
В таком случае макросу надо дать возможность самому виртуально построить рамку вокруг всех ячеек, имеющих части бордюра.
Об уведомлениях о новых ответах на посты
 
Здравствуйте!
Пожалуйста, покажите, где ковырнуть в настройках, чтобы на мою почту приходили уведомления о новых ответах на посты, в которых я принимал участие.

Пока приходится ежедневно открывать форум и отслеживать "ручками".
И есть ли функция "отписки" от конкретных постов, которые для меня уже утратили актуальность.
Спасибо.
Изменено: MrBrown - 4 июн 2019 09:45:49
Найти крайнюю ячейку относительно границы рамки
 
Ігор Гончаренко, здесь - ячейка C3.
пересечение ПРОДОЛЖЕНИЯ крайнего правого и ПРОДОЛЖЕНИЯ нижнего бордюра, и - смещение вправо вниз на ячейку.
(вариант - ячейка В2. Это та, которая остаётся внутри пересечения.)
Мне подошёл бы любой вариант.

Sanja, а можно так? (см. ответ Игорю Гончаренко).
Изменено: MrBrown - 4 июн 2019 09:23:16
Найти крайнюю ячейку относительно границы рамки
 
Sanja, спасибо, но годится только для одинарной рамки ("внешние границы").
А если сделать несколько вложенных рамок или вообще замостить бордюрами ("все границы"),
то макрос определяет каждую ячейку с бордюром.
А надо - только одну, самую правую и нижнюю.
Найти крайнюю ячейку относительно границы рамки
 
Цитата
Sanja написал:
Муторное это дело
ОК, тогда так (чтобы не перебирать все миллионы ячеек):
организовать цикл справа налево, снизу вверх, начиная с сотой ячейки  в строке и в столбце - "CV:100".
Этого будет более, чем достаточно.
Как макрос упирается в первую попавшуюся ячейку с бордюром (даже если ячейка касается бордюра только точечно, уголком) , так - три зелёных свистка и - msgbox "Вот она!!! Поймал!!!"
Изменено: MrBrown - 3 июн 2019 16:55:28
Найти крайнюю ячейку относительно границы рамки
 
Здравствуйте!
Как найти последнюю заполненную ячейку - есть много постов.
А мне нужно найти адрес правой нижней ячейки диапазона, ограниченного рамкой.
К примеру, рамка охватывает диапазон A1:G18.
Макрос должен найти ячейку G18 или, лучше, первую ячейку вне диапазона - H19.
(независимо, заполнена ячейка или пустая)
Подскажите, пожалуйста, какие команды можно использовать, чтобы макрос опирался на расположение рамки.
Спасибо.
p.s. Если на листе несколько рамок, то ищется самая крайняя ячейка (пересечение - крайний правый столбец, имеющий хотя бы единственную обрамлённую ячейку, и такая же крайняя нижняя строка).
p.p.s Догадываюсь, что нужно использовать слово "Borders", а как именно - ума не приложу.
Изменено: MrBrown - 3 июн 2019 16:48:26
Макрос печати по условию
 
Не-а, не удобно. Я сделал по-другому: скрыл базы данных ("остекление) и заставил макрос при печати выбирать только видимые листы:
Код
Sub Print_Area()
  Dim wb As Workbook: Set wb = ActiveWorkbook
    Dim Ws As Worksheet
    Dim Ma, rngEnd As Range
Application.ScreenUpdating = False


For Each Ws In wb.Worksheets


    Set Ma = Range("MEM").MergeArea
    'MsgBox Ma.Address
    Set rngEnd = Ma.Cells(Ma.Rows.Count, Ma.Columns.Count)
    'MsgBox rngEnd.Address
    ActiveSheet.PageSetup.PrintArea = Range("A1", rngEnd).Address
    
        If Ws.Visible = xlSheetVisible Then
            Ws.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
        End If
Next


Application.ScreenUpdating = True

End Sub
Вот теперь - годится!
Изменено: MrBrown - 19 апр 2019 16:34:16
Макрос печати по условию
 
Sanja, Благодарю. Работает.
Ну, с отслеживанием добавлений новых листов, не предназначенных к печати, можно смириться: разок добавил в макрос и забыл.
Спасибо!
______________________
ан, не работает.
при перемещении листа "остекление" между печатаемыми листами, макрос печатает только первые листы, которые до "остекления".
Ну, это, наверное, уже другая задача.
Спасибо.
Изменено: MrBrown - 19 апр 2019 12:38:36
Макрос печати по условию
 
Убрал именованную ячейку "first".
Осталось сформировать условие наличия на листе ячейки "МЭМ":
Код
Sub Print_Area()
  Dim wb As Workbook: Set wb = ActiveWorkbook
    Dim Ws As Worksheet
    Dim Ma, rngEnd As Range
Application.ScreenUpdating = False

For Each Ws In wb.Worksheets

    Set Ma = Range("MEM").MergeArea
    'MsgBox Ma.Address
    Set rngEnd = Ma.Cells(Ma.Rows.Count, Ma.Columns.Count)
    'MsgBox rngEnd.Address
    ActiveSheet.PageSetup.PrintArea = Range("A1", rngEnd).Address
    

'If (условие наличия на листе ячейки с именем "MEM" или содержанием "МЭМ") Then
     'Ws.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
' End If
Next
Application.ScreenUpdating = True

End Sub
Макрос печати по условию
 
Мда, трусы с граблями - это не вариант.

Посоветуйте, как сделать.
Задача простая:

печатать всё внутри чертёжной форматки.
Левый верхний угол - первая ячейка.
В нижнем правом углу всегда стоит "МЭМ". Но лучше этот угол форматки определить как-то по-иному: мало ли, наименование фирмы поменяется.

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

Как-то так...

p.s. да, ещё: количество строк и столбцов, в зависимости от контента, может меняться.
Поэтому нижний правый угол форматки нельзя привязывать к конкретным ячейкам.
Изменено: MrBrown - 19 апр 2019 11:29:28
Макрос печати по условию
 
И как теперь убрать из книги, оставив только на листах?
Может из-за этого и не работает.
Макрос печати по условию
 
А можно, наверное, вообще исключить имя первой ячейки?
Просто задавать диапазон печати от Cells(1,1) до ячейки с Name="MEM".
p.s. "first" на книгу я не ставил. Как-то само проставилось.
Изменено: MrBrown - 19 апр 2019 11:13:05
Макрос печати по условию
 
Как-то так...
Макрос печати по условию
 
Поставил условие в начало цикла.
Код
For Each Ws In wb.Worksheets
If Ws.Cells(1, 1).Name = "first" Then
Печатает правильно, но в конце появляется окно отладки макроса.

Макрос печати по условию
 
Так печатает только последний лист с поименованной ячейкой.
Макрос печати по условию
 
Код
Sub Print_Area()
  Dim wb As Workbook: Set wb = ActiveWorkbook
    Dim Ws As Worksheet
    Dim Ma, rngEnd As Range
Application.ScreenUpdating = False

For Each Ws In wb.Worksheets

    Set Ma = Range("MEM").MergeArea
   
    Set rngEnd = Ma.Cells(Ma.Rows.Count, Ma.Columns.Count)
   
    ActiveSheet.PageSetup.PrintArea = Range("first", rngEnd).Address
    
    If Ws.Cells(1, 1).Name = "first" Then Ws.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False

Next
Application.ScreenUpdating = True


End Sub
Пожалуйста:
Макрос в цикле устанавливает на листах область печати, ограниченную самой первой ячейкой ("first") и нижней правой ("MEM").
А печатать не желает. То есть если без условия If-Then, то печатает, но вообще все листы, а мне надо только те, у которых есть "first".
____________________
p.s. а, может быть, сделать условие существования поименованной ячейки, типа exist?
Сейчас попробую....  
Изменено: MrBrown - 19 апр 2019 10:04:30
Макрос печати по условию
 
Здравствуйте!
Строка из цикла по листам книги:
Если первая ячейка на очередном листе Ws поименована как "first", то - печатать.
Почему не работает?
Код
Dim Ws As Worksheet
.... 
If Ws.Cells(1, 1).Name = "first" Then Ws.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
Изменено: MrBrown - 19 апр 2019 09:50:45
Увеличить область печати на один столбец вправо и на пару строк вниз
 
Здравствуйте!
Есть пара поименованных ячеек:
Левая верхняя - "first", правая нижняя - "end".
Такой код :
Код
ActiveSheet.PageSetup.PrintArea = Range("first", "end").Address
прекрасно работал бы, если бы ячейка "end" была простой, а она в действительности состоит из объединённых ячеек.
Ну и получается вот такая область печати, как на приложенной картинке. Угловой штамп не входит полностью в область печати.
Попытался сделать что-то вроде:
Код
ActiveSheet.PageSetup.PrintArea = Range("first", Cells(Cells.Name = "end").Offset(1, 2)).Address
Ан не получилось. Другие танцы с бубном - тоже.
Как изменить строчку кода, чтобы область печати увеличилась на столбец вправо и на пару строк вниз?
Догадываюсь, что нужно использовать MergeArea, но как - ума не приложу.
Спасибо.
_______________________________
Сам нашёл:
Код
Set Ma = Range("end").MergeArea
'MsgBox Ma.Address
Set rngEnd = Ma.Cells(Ma.Rows.Count, Ma.Columns.Count)
'MsgBox rngEnd.Address
ActiveSheet.PageSetup.PrintArea = Range("first", rngEnd).Address
Изменено: MrBrown - 27 мар 2019 12:59:03
Страницы: 1 2 3 4 След.
Наверх