Специальная вставка Excel

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Brat2005, Вообще-то Игорь Акопян дал ответ на Ваш вопрос. Например, если Вы разместите команду Вставить значения в меню Правка, то Вы сможете использовать горячие клавиши, только Вам придётся или удалить команду Вставить или назначить новую клавишу.
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

Brat2005,
По моему вам необходимо готовое решение,
может подойдет это:
скачиваете надстройку - http://avsha.narod.ru/PasteAsValue.rar
копируете в папку - C:\Documents and Settings\User_01\Application Data\Microsoft\AddIns
подключаете в среде Excel - Сервис\Надстройки\-->PasteAsValue

В этой надстройке 4 макроса на сочетания (Ctrl-B),(Ctrl-b),(Ctrl-и),(Ctrl-И).
Подключаете надстройку и стандартное сочетание Ctrl-B, которое по-умолчанию работает
на выделение шрифта полужирным теперь работает в качестве функции "Вставка как значение".

Код: Выделить всё

Sub Macros_PasteAsValue_01()
On Error GoTo err:
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
Exit Sub
err:
End Sub
Использование надстройки имеет преимущества - работает для всех книг Excel,
не вызывает окно предупреждения о наличии макросов, вы ее можете отключить,
передать другому пользователю.
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Avsha, Всё таки Вы не перестаёте меня удивлять, ведь я уже намекал, что автор вопроса, макросы в принципе не приемлет :P Тем более, что если основываться на ответе Игоря Акопяна и моих вынужденных комментариях, то количество нажатий клавиш можно уменьшить до трёх, и при этом совсем не нужно использовать макросы.

Но если применение макросов, по каким-то причинам, жизненно необходимо, то :
- Надстройку можно поместить в любую папку.
- В данном конкретном случае, рабочая книга PERSONAL.XLS справится со своей задачей не хуже. При этом выдача сообщения о наличии макроса, выдаваться не будет. Макрос также будет доступен во всех открытых рабочих книгах.
- Вдобавок, подобный макрос может записать любой человек, даже не знакомый с VBA. При этом не надо использовать уже существующие горячие клавиши, не надо использовать метод .OnKey и даже не нужно копировать диапазон, ни вручную, ни программно (хотя для последнего, всё же требуется некоторое представление о свойстве .Value)

Brat2005, Если у Вас что-то не заладится, то пишите мне в приват, и мы поставим точку в этом вопросе.
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

pashulka,
что автор вопроса, макросы в принципе не приемлет

Ну во первых, я от него этого не слышал, а во вторых я ему предлагаю готовую надстройку, такую же как пакет анализа, например.
По вашему, если пользователь не приемлет макросы, то он и надстройками не должен пользоваться?
Надстройку можно поместить в любую папку
Можно, но зачем? Если при сохранении надстройки Excel дружелюбно открывает папку надстроек конкретного пользователя и при подключении надстроек показывает как раз надстройки из этой папки?
В данном конкретном случае, рабочая книга PERSONAL.XLS справится со своей задачей не хуже. При этом выдача сообщения о наличии макроса, выдаваться не будет. Макрос также будет доступен во всех открытых рабочих книгах.
Может быть, но мне видяться некоторые недостатки при решении с PERSONAL.XLS:
1. включение (отключение) определенных макросов - здесь придеться ковыряться в макросах, а надстройку отключил и все,
2. если открываете еще один экземпляр Excel - начинает выходить сообщение, что PERSONAL.XLS уже открыта - уведомить/только чтение.
Добивает честное слово. А потом попробуйте перенести часть функций своей PERSONAL.XLS другому пользователю, у которого PERSONAL.XLS имеет свои индивидуальные макросы.
Вдобавок, подобный макрос может записать любой человек, даже не знакомый с VBA
Я надстройку создал с помощью механизма записи макроса, практически не притрагиваясь к коду, клавиши назначил тоже через стандартное окно, а Brat2005 получит надстройку вообще в готовом виде.

Да и по количеству вопросов в форуме и количеству ваших же ответов на мои вопросы вы должны были понять, что я не "СуперАС" :) в VBA.
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

1. Постоянное игнорирование предложений воспользоваться макросами, это и есть отношение к подобного рода решениям.

2. Когда Вы пишите, что нужно разместить именно в этой папке, то у любого читателя может сложиться превратное впечатление, что другими папками воспользоваться нельзя, а это безусловно не так. Вдобавок, для различных версий, различается и сам путь.
Так что резюмируя всё вышеизложенное считаю, что все читающие этот топик, должны иметь свободу выбора :wink:

3. Если прочитать более внимательно, то предложение обойтись без надстройки, было направленно применительно к данному конкретному случаю.
Что же касается минусов, то они есть в любом случае, даже в случае с применением надстройки, например, проф. надстройки содержат несколько макросов, поэтому отключить один единственный не получится.
Что касается вывода сообщения (при открытии второго экземпляра приложения) то это решается ... при желании можно поискать на форуме.
Перенести часть функций из одного персонала в другой можно, например, используя импорт - экспорт модулей.
Но в данном конкретном случае, вряд ли можно серьёзно, говорить о переносе макроса, записанного с помощью макрорекордера :P

Что касается создания подобного макроса, то здесь наши мысли идентичны. Только я бы копировал диапазон не вручную, перед запуском макроса, а программно и назначил бы сочетание клавиш CTRL+R (всё это также можно записать макрорекордером)
А если абстрагироваться от записи макроса, то можно и лучше (IMHO) вообще обойтись без копирования :lol:
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

pashulka,
- Про папку, где складываются надстройки ...
C:\Documents and Settings\User_01\Application Data\Microsoft\AddIns

Я привел стандартную папку, она все-таки является первичной по отношению к той, на которую заменит ее пользователь, если стандартная по каким-то причинам его не будет устраивать. У большинства пользователей "умолчальные" настройки так и остаются неизменными, это также некоторый агрумент ее не менять. Плюс в этот стандартный путь заложено изначальное деление на пользователей на одном ПК, да и в справке Excel "умолчальный" путь явно приводится.
Признаюсь, меня сперва тоже длинные пути напрягали, но позднее я сделал два простых ярлычка - на папку, где лежит PERSONAL.XLS и на папку - где лежат надстройки, и теперь даже не вспоминаю какой этот путь заковыристый.
А самое главное - папку по-умолчанию я указываю с той целью, чтобы показать, что она такая есть вообще для надстроек, а не чтобы ограничить свободу выбора.

- про недостатки PERSONAL.XLS ...
Вы наверно имеете в виду, что для решения проблемы назойливого окна при открытии второго экземпляра приложения Excel можно поставить атрибут "Только чтение" или установить, чтобы книги открывались только в одном Excel-e.
Я мужественно снимал/устанавливал атрибут "Только чтение" всякий раз, когда мне надо было избавиться от окна сообщения или подредактировать PERSONAL.XLS - этот вариант явно неприемлим.
А вот предложение открывать только один Excel только ради того, чтобы PERSONAL.XLS "не ругался" - вот это действительно искусственное ограничение свободы выбора. Может есть еще варианты?

Использование надстройки решило все эти проблемы, и книгой PERSONAL.XLS я в данный момент не пользуюсь, - хотя идея, что это общее место хранения макросов и данных для всех книг - абсолютно правильная.
Может дело все в свойстве - ЭтаКнига.IsAddin для PERSONAL.XLS?
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Avsha,
- про папку, где складываются надстройки …
У меня MS Excel 97 и указанной Вами папки нет, а значит почти всё что написано в её защиту, можно зачеркнуть. P.S. Имею мнение, что все должны знать о возможности подключения нескольких надстроек, хранящихся в различных папках, поэтому скрытие подобной информации считаю преступлением :P

- про недостатки PERSONAL.XLS …
Да, я действительно говорил именно о атрибуте "только для чтения", который достаточно установить только один раз (без редактирования).
Что касается напрягов по его снятию, то редактирование надстройки не менее напряжно, однако об этом минусе Вы умалчиваете. К тому же, Вы постоянно "переводите" локальный вопрос в глобальную проблему. Если рассматривать данный конкретный случай, то файл PERSONAL.XLS справится со своей задачей не хуже надстроек, хотя на мой взгляд, лучше вообще обойтись без использования макросов.
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

pashulka,
- про папку, где складываются надстройки …
Да, я ни привел путь для Excel 97, но легко провести аналогию и найти эту папку для прошлой версии.
К тому же, ваше высказывание, что путь к надстройкам может быть не тем, что я указывал, ЯВНО не говорило о возможности подключения НЕСКОЛЬКИХ надстроек. Так что можно поспорить о том, кто скрывает информацию.
Уж не я точно, о возможности подключении нескольких надстроек из разных путей узнал только сейчас из вашего поста.

- про недостатки PERSONAL.XLS …
редактирование надстройки не менее напряжно, однако об этом минусе Вы умалчиваете.
Да нет, в этом смысле надстройка несет в себе законченное решение (функцию), необходимось ее редактирования возникает гораздо реже чем в PERSONAL.XLS. Например, захотели реализовать новую функцию, создали и добавили еще одну надстройку.
Конкретный случай я давно уже выложил в сети, а глобальное и системное понимание проблемы как раз позволяет решать конкретные - локальные случаи таким образом, чтобы не было проблем.
Вот захочет пользователь передать свою функцию "Вставить как значение", реализованную на PERSONAL.XLS, своему товарищу и начинаются хлопоты по перетаскиванию макросов из одной PERSONAL.XLS в другую. С надстройками гораздо проще - скопировал и подключил. Вот тут вам глобальный подход и пригодится.
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Сначала найдите в MS Excel 97 свойство .UserLibraryPath, а потом и поговорим.

Что касается возможности подключения надстроек, то вот собственно цитата моя цитата - "Надстройку можно поместить в любую папку", и если внимательно прочитать, подумать и попробовать, то становится очевидным, что о скрытии информации не может быть и речи.

Значит один и тот же макрос в файле PERSONAL.XLS мы будем редактировать каждый день, а в надстройке один раз в год ... Ну а создавать для макроса, который содержит несколько строк, новую надстройку вообще несерьёзно :lol: в таком случае, через некоторое время их окажется больше, чем блох на бродячей собаке.

Лично для меня проблем импорта - экспорта модулей нет, а сам процесс, не сложнее подключения надстройки, которую также легко отключить и получить, например, значение ошибки в ячейках, которые используют функции, находящиеся в подобных надстройках. Вот Вам и минус надстроек.
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

pashulka,
"Надстройку можно поместить в любую папку"
Это ваше замечание принимаю, я упустил этот момент, но ни в коем случае не скрываю информацию от читающих форум.
Просто не обратил должного внимания на кнопку "Обзор" в окне подключения надстроек.
Да это делает использование этого механизма еще более универсальным!
Каждая надстройка может иметь свое собственное место расположения.
В одной папке вы храните свои личные надстройки, а также можете использовать общие надстройки, расположенные на общедоступном сетевом ресурсе. Кстати надо проверить использование этого варианта, надстройка одна, а к ней подключается несколько пользователей, чтобы каждый не копировал ее себе на ПК.

- Про реализацию функций через надстройки или PERSONAL.XLS
По-моему мы достаточно представили оба варианта и каждый кто будет работать выберет для себя то, что ему удобнее и целесообразней. Возможно, наиболее оптимальным вариантом окажется совместное использование этих средств.
Ответить