Портал аспирантов

Портал аспирантов (http://www.aspirantura.spb.ru/forum/index.php)
-   Software (программное обеспечение) (http://www.aspirantura.spb.ru/forum/forumdisplay.php?f=107)
-   -   Помогите написать макрос в Excel (http://www.aspirantura.spb.ru/forum/showthread.php?t=7749)

Andriy 19.07.2011 21:48

gav, решил. Это не Вы были?:-)
у меня еще есть проблема, если Вы хорошо разбираетесь, могу обратиться?

если что, вот моя проблема:
http://www.planetaexcel.ru/forum.php...m=1#post242882

Тут в принципе тоже несложно должно быть. но тут уже надо задавать диапазон наверное, а то все-все скопировать (65000 записей) и вставить в другую книгу эксель сможет только один раз(

Добавлено через 5 часов 7 минут
и эту задачу решили уже..

Maksimus 16.01.2013 12:24

Не хочется создавать отдельную тему, напишу здесь.

Дано: Excel 2010.
Требуется:
1. Сделать так, чтоб в ячейке появлялась текущая дата.
2. Дата должна появляться только после клика на ячейку.
3. Дата д.б. фиксированной (с течением времени не должна самостоятельно изменяться).

Вопрос к корифеям: Реализуемо? Если да, то как?

Заранее спасибо.

Kayra 16.01.2013 18:13

Цитата:

Сообщение от Maksimus (Сообщение 310156)
Дано: Excel 2010.
Требуется:
1. Сделать так, чтоб в ячейке появлялась текущая дата.
2. Дата должна появляться только после клика на ячейку.
3. Дата д.б. фиксированной (с течением времени не должна самостоятельно изменяться).

Способ для чайников:
Запускаете запись макроса: в ячейку вводите функцию =СЕГОДНЯ(), копируете из ячейки это число и вставляете в другую ячейку как значение. Останавливаете запись макроса. Только вот можно ли сделать так, чтобы макрос запускался при клике на ячейку, не знаю. Можно создать кнопку, запускающую макрос при нажатии. Можно без марания ячеек, прописать в VBA и привязать к клику кнопки.
Только зачем нужен такой макрос, не проще ли набивать дату на клавиатуре ;)? Ползти в этом случае точно не будет.

Maksimus 16.01.2013 20:57

Цитата:

Сообщение от Kayra (Сообщение 310277)
копируете из ячейки это число и вставляете в другую ячейку как значение

Не, копирование не пойдет.

Цитата:

Сообщение от Kayra (Сообщение 310277)
Только зачем нужен такой макрос, не проще ли набивать дату на клавиатуре ?

Какие все любобытные :)
Хорошо, расскажу в чем смысл. Есть некий журнал в Excel, в котором должны фиксироваться дата и время определенного события (например, получение продукции). Поскольку продукции м.б. много, то вручную набивать дату-время трудозатратно. А вот одним кликом было бы удобно - щелкнул по ячейке, туда автоматом записались дата-время, щелкнул по другой - следующая.

Т.е. решить задачу можно только написанием доп.программы?

Добавлено через 16 минут
Зы. Нужен именно эксель. Любые другие программы не подойдут.

Hogfather 17.01.2013 10:04

Цитата:

Сообщение от Kayra (Сообщение 310277)
Способ для чайников

:facepalm:

(патетично) Мда. И это гордость отечественной науки. Вышел из забоя, глянул, а тут такой позор: элементарную вещь написать не могут...

Maksimus, только ради Вас оторвался от производства. Цените.
Код:

Option Explicit
' Обратите внимание! Это функция конкретного листа, она должна быть там, а не в модуле
' Откройте VBA проект, выберите лист и по правой кнопке мыши Viev Code
' В открывшееся окно скопируйте программу. Работает по двойному нажатию
'
' Копирайт (ц) 2013 Hogfather. Олл райтс резервед
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error GoTo ErrorEvent
' Только одна ячейка
If Target.Cells.Count > 1 Then
    Exit Sub
End If
' Чтобы избежать зацикливания
  Application.EnableEvents = False
' Если ячейка пустая -- ставим дату
    If Target.Offset(0, 0).Value = "" Or IsNull(Target.Offset(0, 0).Value) Then
        Target.Offset(0, 0).Value = Date
    End If
ExitNormally:
' Возвращаем всё взад
    Application.EnableEvents = True
    Exit Sub
ErrorEvent:
    MsgBox Err.Description
    Resume ExitNormally
End Sub


Jacky 17.01.2013 21:29

Есть еще такой способ, горячими клавишами.

Нажать последовательно ctrl+shift+4 (вставка даты), пробел, ctrl+shift+6 (вставка времени).

Hogfather 18.01.2013 13:27

Вложений: 1
Цитата:

Сообщение от Maksimus (Сообщение 310156)
Дано: Excel 2010.

Цитата:

Сообщение от Jacky (Сообщение 310652)
Есть еще такой способ, горячими клавишами.
Нажать последовательно ctrl+shift+4 (вставка даты), пробел, ctrl+shift+6 (вставка времени).

:facepalm:

Цитата:

Сообщение от Help
Вставка фиксированного значения даты или времени
Статическое значение на листе не изменяется при пересчете или открытии листа. При нажатии клавиш CTRL+; для вставки текущей даты в ячейку делается "снимок" текущей даты, который вставляется в ячейку. Это значение ячейки не изменяется, поэтому оно считается статическим.

1.Выделите на листе ячейку, в которую требуется вставить текущую дату или время.
2.Выполните одно из действий, указанных ниже.
Чтобы вставить текущую дату, нажмите клавиши CTRL+; (точка с запятой).
Чтобы вставить текущее время, нажмите клавиши CTRL+SHIFT+; (точка с запятой).
Чтобы вставить текущие дату и время, нажмите клавиши CTRL+; (точка с запятой), затем клавишу ПРОБЕЛ, а после этого — CTRL+SHIFT+; (точка с запятой).


Hogfather 18.01.2013 13:34

Maksimus, Чтобы работало только в одной колонке достаточно добавить следующий код (выделено жирным)

Код:

Option Explicit
' Обратите внимание! Это функция конкретного листа, она должна быть там, а не в модуле
' Откройте VBA проект, выберите лист и по правой кнопке мыши Viev Code
' В открывшееся окно скопируйте программу. Работает по двойному нажатию
'
' Копирайт (ц) 2013 Hogfather. Олл райтс резервед
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error GoTo ErrorEvent
' Только одна ячейка
If Target.Cells.Count > 1 Then
    Exit Sub
End If


' Только для пятой колонки. В остальных случаях ничего не делаем
If Target.Column <> 5 Then
    Exit Sub
End If



' Чтобы избежать зацикливания
  Application.EnableEvents = False
' Если ячейка пустая -- ставим дату
    If Target.Offset(0, 0).Value = "" Or IsNull(Target.Offset(0, 0).Value) Then
        Target.Offset(0, 0).Value = Date
    End If
ExitNormally:
' Возвращаем всё взад
    Application.EnableEvents = True
    Exit Sub
ErrorEvent:
    MsgBox Err.Description
    Resume ExitNormally
End Sub


Jacky 18.01.2013 14:19

Hogfather, не понял смайл после своей цитаты в предыдущем сообщении. Вы хотите сказать, что..?

Добавлено через 1 минуту
И знаете почему не понял? Потому что указанные мной варианты горячих клавиш работают надежно, а вот эти
Цитата:

Сообщение от Hogfather (Сообщение 310919)
Чтобы вставить текущую дату, нажмите клавиши CTRL+; (точка с запятой).
Чтобы вставить текущее время, нажмите клавиши CTRL+SHIFT+; (точка с запятой).
Чтобы вставить текущие дату и время, нажмите клавиши CTRL+; (точка с запятой), затем клавишу ПРОБЕЛ, а после этого — CTRL+SHIFT+; (точка с запятой).

зачастую не срабатывают и сообщений об этом много в интернете. Почему не срабатывают, неизвестно. У меня кстати тоже не работают.

Excel 2010.

Hogfather 18.01.2013 14:46

Jacky,
Элементарно. Зависит от раскладки клавиатуры и способа её переключения.
У меня переключение по Ctrl-Shift и Ваши комбинации не работают. Рекомендованные - работают на двух языках. Проверил.

На "4" на русском регистре ";", на 6 на русском регистре ":", по сути, Вы пытаетесь сделать то же самое, что написано в инструкции, но в русской раскладке.

Jacky 18.01.2013 15:08

Цитата:

Сообщение от Hogfather (Сообщение 310960)
У меня переключение по Ctrl-Shift и Ваши комбинации не работают.

Переключение по Ctrl+Shift и у меня не работает, если имеется в виду переключение языка клавиатуры (переключается по Alt+Shift). Тут я видимо не понял содержания цитаты. См. ниже последний абзац.
Цитата:

Сообщение от Hogfather (Сообщение 310960)
но в русской раскладке.

В любой раскладке.
Есть нюанс, нажимать цифры надо на основном алфавитно-цифровом блоке, на дополнительном правом цифровом -- работать не будет.

Добавлено через 56 секунд
Цитата:

Сообщение от Hogfather (Сообщение 310960)
по сути, Вы пытаетесь сделать то же самое, что написано в инструкции, но в русской раскладке.

Не совсем то же самое. Комбинации отличаются.

Короче говоря, желающие могут попробовать оба варианта, они равноценны, у кого что будет работать.

Добавлено через 15 минут
Hogfather, для полноты картины попробовал сменить у себя в системе переключение языка ввода с Alt+Shift на Ctrl+Shift и при этом комбинации ctrl+shift+4 и ctrl+shift+6 продолжают успешно работать в любой раскладке. Так что остается повторить:

Цитата:

Сообщение от Jacky (Сообщение 310964)
желающие могут попробовать оба варианта, они равноценны, у кого что будет работать.


Hogfather 18.01.2013 15:24

Цитата:

Сообщение от Jacky (Сообщение 310964)
Hogfather, для полноты картины попробовал сменить у себя в системе переключение языка ввода с Alt+Shift на Ctrl+Shift

Аналогично попробовал. У меня работает мой вариант. Ваш -- нет, дело явно не в способах переключения раскладки.

P.S. А тема вообще не о горячих клавишах, а о макросах. Макрос я написал. Dixi.

Дмитрий В. 09.05.2013 17:15

Спрошу тут, чтобы не создавать отдельную тему.
Коллеги, вводная такова. Имеется таблица в Excel, ячейки содержать в основном текст, в них разный цвет шрифта. Ячейки разного цвета идут вперемешку (к примеру, C1 красная, C2 красная, C3 зеленая, D1 синяя).
Внимание, вопрос: есть ли возможность весь текст определенного шрифта перенести налево от определенного столбца (допустим, B)?
Пока в голову пришла лишь такая идея - добавить к ячейкам определенного цвета какой-нибудь символ, например, ! , чтобы при сортировке они вылезли наверх, и переносить кусками. Возможно, есть что-то менее трудоемкой, т.к. столбцов там весьма немало?
P.S. Студенты принесли материалы, сделанные понятно как, вот сижу и думаю, придется ли говорить им все переделывать вручную или все же удастся обойтись без крайних мер.

Hogfather 09.05.2013 18:05

Дмитрий В., в последних Excel есть фильтрация по цвету.

kravets 09.05.2013 18:14

А я потерялся в Word 2003. Частая операция -
- правая кнопка на формуле
- формат объекта
- вкладка "размер"
- поле масштаба "по высоте" установить в 80 %
- ok

Начинаю записывать макрос - вот прямо по этим действиям. А получается невесть что, причем разное...


Текущее время: 04:01. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
© 2001—2025, «Аспирантура. Портал аспирантов»