Случается, надо какой-нибудь текстик отхетемеелить вручную. Проставить теги HTML, я имею в виду, вы поняли. Случается также нужда в сложносочиненных ссылках с кучей параметров. Раньше я просто сохранял шаблончик в заметках или даже заметках. А потом вручную искал правильные места и копипастил в них требуемые параметры. Что есть очень глупо и небыстро, и противоречит основному тезису моего блога.

Идею писать скриптики я отбросил сразу: дело, может, и несложное, но для меня малопривычное. Кроме того, я хочу, чтобы все работало в браузере на любой машине, а такого рода скриптики — дело еще менее привычное. Для меня.

Остановился на документах Google. Создал табличку, в одни ячейки которой вставляю параметры, а из другой копирую готовую строку. Вот небольшой отрывок:

Сборка строк

Формула результирующей ячейки (A7): ="<a href='"&B7&"' title='"&D7&"'>"&C7&"</a>"

Обратите внимание: внутри строки, ограниченной кавычками, используется апостроф. Или это одинарная кавычка? Как правильно?

***
Все эти советы не будут иметь никакого смысла, если с вашим компьютером вдруг что-то случится. Тогда вам будет не до программ и сайтов, вы будете искать компьютерной помощи. На двери вашего подъезда всегда найдется рекламка того или иного специалиста, но не лучше ли заказать комплексный ремонт компьютеров в Петербурге с бесплатными консультациями, диагностикой и вызовом? По крайней мере, здесь сразу указаны ориентировочные цены на услуги, и можно сразу задать свой вопрос. Только если у вас один компьютер, перепишите заранее телефон. На бумажку — она не ломается.

Бывают такие программы, которые нужны раз в полгода. И все бы ничего, только их функциональность никак не следует из названия. А еще у разработчиков есть милая привычка подсовывать свою торговую марку в название программы. Поди догадайся, что какой-нибудь MediaClick Fortune 2009 на самом деле ищет одинаковые изображения на дисках (название выдумано).

Для решения проблемы я сделал себе «меню домохозяйки». Это просто папочка, лежащая в легко доступном месте, и содержащая ярлыки всех прикладных программ. То же, что и в папке «Программы» Windows. Отличие в том, что во-первых, там нет никаких вложенных папок, только плоский список, а во-вторых, имена программ дополнены краткими описаниями. Вместо «Fortune 2009» мы пишем «Удалить дубли фоток - Fortune 2009». И так для всех программ, как установленных, так и идущих без инсталлятора и не получивших ссылки из главного меню «Программы». Кстати, в процессе создания этой папочки можно столько всего поудалять!

Приведенный рецепт работает и в Windows XP, но в Vista и Windows 7 добавляется еще бонус: там можно запускать программы через поиск по названию. То есть можно прямо так и набирать «удалить дубли».

И еще кое-что: в окне свойств ярлыка есть поле «Комментарий». Если указать в нем категорию, к которой относится программа, например «Видео», «Фото», «Разработка», после можно будет при просмотре вашей папки в Проводнике сгруппировать ярлыки по этим категориям.

Кстати, вы не обязаны ограничиваться только ярлыками программ. По той же схеме можно наделать себе линков на полезные сайты. Например, «Учиться быстро - homework pro отзывы». Тем более, что и многие приложения нынче в сети.

Формат блога плохо подходит для выкладывания чего-либо, кроме текста. Но я ваяю еще и небольшие скриптики для облегчения рутинных действий. Расчесав репу, решил сделать посвященный этому делу подраздел. На DoItQ Tools переезжают макросы для Microsoft Office и родственных пакетов, обещаются новые, а также появляются отдельные маленькие программки. Ничего особенного, просто что-то, написанное для моего удобства, и выложеное для вашего. Добро пожаловать!

Люди, делайте бекапы! Я поменял офисный компьютер и думал, что учел все, но жизнь опять оказалась хитрее. Уже после того, как была дана отмашка на запихивание в шредер предыдущего винчестера, я запустил случайно Corel Draw. И тут вспомнил, что без любовно написанных макросов с этим, извините, редактором работать нельзя вообще. А макросы все остались в общей библиотеке. О которой я забыл. Так что приходится теперь потихоньку восстанавливать утраченное. Одно хорошо: есть возможность параллельно и описывать эти скрипты для читателей. Это куда проще, чем пытаться растолковать что-то, написанное год назад.

Итак, первая понадобившаяся мне вчера процедура — умножение. На большой схеме есть множество текстовых объектов, содержащих числа. Эти числа надо домножить на некие коэффициенты. Делать все вручную рехнешься, поэтому и был написан макрос. Мне требовалось также округлять числа до десятков, а вот проверять на ошибки в случае захвата объекта, содержащего текст, который нельзя конвертировать в число, совершенно не требовалось. Кому надо, дополняйте под себя. 

' Процедура Multiplicate
' Домножает значения в нескольких выбранных объектах на заданное число.
' Округляет результат до десятков и форматирует с разделителем тысяч.
' Пропускает нетекстовые объекты, но выдает ошибку, если текст
' не является числом.
'
Sub Multiplicate()
Dim sh As Shape
Dim Multi As Double
Dim UserInput As String
Dim OldVal As String
Dim NewVal As Long
' Спрашиваем у пользователя число, и выходим, если он передумал.
UserInput = InputBox("На что домножить:", "Домножение")
If UserInput = "" Then Exit Sub
' Заменяем в том, что ввел пользователь точку на запятую, чтобы
' не парить его переключением раскладок. Если в системе десятичный
' разделитель - точка, поменяйте в строке ниже точку и запятую местами.
UserInput = Replace(UserInput, ".", ",")
Multi = CDbl(UserInput)
' Перебираем все объекты, которые выделил пользователь перед вызовом
' процедуры
For Each sh In ActiveSelection.Shapes
    With sh
        ' Если имеем дело с текстом...
        If .Type = cdrTextShape Then
            ' Берем старое значение (до 100 символов - для числа хватит)
            OldVal = .Text.Range(0, 100)
            ' Чистим от форматирования пробелами
            OldVal = Replace(OldVal, " ", "")
            ' Умножаем и сразу округляем
            NewVal = Round((CDbl(OldVal) * Multi) / 10) * 10
            ' Форматируем и вставляем обратно
            .Text.Range(0, 100) = Format(NewVal, "### ##0")
        End If
    End With
Next

End Sub

Также читайте всю серию постов по VBA.

***

НКВД — это не только то, что вы подумали, но и то, что вам и в страшном сне не могло присниться. Это хостинг. Кстати, если вы поторопитесь, то успеете на раздачу доменов по смешным ценам.

Используете ли вы образы лазерных дисков в виртуальном дисководе вроде бесплатного Alcohol 52%? Именно 52%, потому что 120% стоит денег, а в плане функциональности домашнему пользователю мало что добавляет. У меня потихоньку готовится «возмущенное письмо в редакцию» по поводу необходимости держать на винчестере множество образов в угоду маразматическим защитам дрянного реноме от здравого смысла. Когда-нибудь выложу.

А пока, ребенок, способный сам установить игру (под ограниченной учетной записью, вам это удавалось? мне — нет), плохо понимает аналогию «вставить диск = подмонтировать образ с винчестера». Поэтому получил от папы набор ярлыков такого вида:

"C:\Program Files\Alcohol 52\AxCmd.exe" H: /M:"D:\Disk Images\JEDIOUTCAST.iso"

Первая часть — путь к исполняемому файлу алкоголя, H: — буква виртуального диска, а после /M: указан путь к образу диска, который нужно смонтировать. Поскольку речь идет о запуске уже установленных игр, можно взять иконку для ярлыка ту же, что и в ярлыке запуска игры, в «Программах».

Теперь достаточно запустить этот ярлык для смены «диска» в виртуальном дисководе. Не беспокойтесь, о том «диске», что был «вставлен» до запуска. Он сам предварительно отмонтируется.

***

Начните зарабатывать, посетив сайт www.eliteforex.ru.

Нарыл в загашнике еще одну интересную функцию для Excel. Возникла у меня нужда дать пользователю самому составить простенькую формулу с одной переменной (их, на самом деле строго две, но принцип понятен и на одной). Составить прямо на листе, не после знака «=», а чтобы видно было. Результат вычисления используется в многих других местах.

' strVar - значение переменной  
' strFormula - строка, содержащая саму формулу, место, куда надо
' подставить переменную, обозначено символами VAR

Function sheetFormula(strVar As String, strFormula As Variant) As Variant

' Если формула пустая, не тратим ресурсы
If strFormula = "" Then Exit Function

' Юзер - дурак, уберем крайние пробелы
strFormula = Trim(strFormula)

' Чем возиться с параметрами замены, проще все перевести
' в верхний регистр
strFormula = UCase(strFormula)

' Подставляем переменную простой заменой
strFormula = Replace(strFormula, "VAR", CStr(strVar))

' Мой (ну почему только мой?!) фирменный финт:
' заменяем запятую на точку, позволяя пользователю
' использовать любой из этих знаков
strFormula = Replace(strFormula, ",", ".")

' Вычисляем все с помощью функции Evaluate.
' Конструкция выглядит загадочно, но только так я
' добился от этой функции стабильной работы.
' Что она там себе думает, не знаю.
sheetFormula = Evaluate(CStr(strFormula) + "+0")

End Function

Теперь можно попросить пользователя в одной ячейке вбить значение переменной, в другой — формулу, а результат использовать по всей книге.

Между прочим, кого-то из вас поджидает вакансия в Проф-Медиа Business Solutions. Кого?

Также читайте всю серию постов по VBA.

Признаться, не люблю Corel Draw. Но вынужден иногда в этой программе работать. И здесь, как никогда, требуется обработка напильником. Вот скрипт, написанный на днях, который поворачивает каждый из выделенных объектов на 180 градусов. Заметьте: каждый по отдельности. Все скопом можно легко повернуть, выделив их и введя новый угол в соответствующее поле на панели, но в этом случае они будут вращаться относительно общей оси. Стандартного способа повернуть объекты каждый вокруг своего центра, не сдвигая их, я не нашел. Возможно, плохо искал, тем не менее скрипт.

' Поворот выделенных объектов по отдельности на 180 градусов

Sub Rotate180()
Dim sh As Shape
Dim centerX As Double, centerY As Double

' Перебираем все shape в выделении
For Each sh In ActiveSelection.Shapes
    With sh

        ' Ищем центральную точку, вокруг которой будем вращать
        centerY = (.TopY - .BottomY) / 2 + .BottomY
        centerX = (.RightX - .LeftX) / 2 + .LeftX

        ' Вращаем
        .RotateEx 180, centerX, centerY

    End With
Next

End Sub

Не забывайте про возможность поиграть с группировкой. Если при повороте нужно сохранить положение нескольких фигур относительно друг друга, их можно сгруппировать, и только потом поворачивать. Или вернуться к полю ввода угла, — как вам удобнее.

Также читайте всю серию постов по VBA.

Посмотрим, как делать собственные функции в дополнение к встроенным в Excel.

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

Читать запись полностью »

Маленькая программка для подсчета количества символов и слов в тексте.

Использовать крайне просто:

  1. копируете нужный текст
  2. запускаете программу
  3. получаете результат в таком виде:

Читать запись полностью »

Для тех, кто использует систему навигации ГИС РУССА под Windows, будет полезен этот скрипт, делающий навигацию более удобной, а именно: колесико мыши меняет масштаб, Ctrl + F открывает окно поиска. Скрипт написан на AHK, следовательно сам AutoHotKey должен быть установлен.

Читать запись полностью »

Продолжим разбирать простенькие примеры скриптов на VBA для Excel. Первая часть.

Иногда возникает надобность добавить одно число к куче разных ячеек, или домножить их на какой-то коэффициент.

Читать запись полностью »

Пришла мысль выложить мои маленькие скрипты для Excel. Постараюсь идти от простого к сложному (ну... от маленького к большему) - вдруг кому изучить поможет. Впрочем, скриптов у меня мало.

Итак, в приложения Microsoft Office встроен язык Visual Basic for Application (VBA) - близнец обычного Visual Basic (по крайней мере до 6 версии VB включительно). Его можно и нужно использовать для автоматизации рутинных операций. Все нижеизложенное относится к Excel 2003.

Читать запись полностью »

MS Visio - очень мощная и удобная программа. Позиционируется она как векторный редактор в первую очередь для всяческих диаграмм и схем, скирпиченных из блоков, но я осмелюсь утверждать, что область ее применения несколько шире. Для меня это идеальный инструмент подготовки иллюстративного материала в ситуации, когда Corel Draw или Illustrator слишком «художественные», а AutoCAD слишком «инженерный». В Visio же можно нарисовать и точно и красиво (для начальства, да). Максимум кайфа, конечно, если рисунки однотипные, и вы заранее продумали и создали обьекты, из которых они будут собираться.

Впрочем, некоторые мелкие удобства разрабочиками упущены. В связи с этим выкладываю пару своих скриптов: форму, позволяющую копировать выделенные объекты на другую страницу с сохранением положения объектов относительно страницы, и процедуру, создающую дубликат выделенных объектов на том же месте. Скачать.

Простенький bat-скрипт, создающий папку с именем, отображающим сегодняшнюю дату. Для тех, кому требуется раскладывать файлы по дням.

@echo off
for /f "tokens=1-3 delims=." %%i in ("%date%") do (
mkdir "%~1\%%k-%%j-%%i"
)

Сохраните текст в файл, к примеру, todayfolder.bat, и запускайте, передавая ему имя родительской папки как параметр.

Читать запись полностью »