Время на прочтение
7 мин
Количество просмотров 312K
Приветствую всех.
В этом посте я расскажу, что такое VBA и как с ним работать в Microsoft Excel 2007/2010 (для более старых версий изменяется лишь интерфейс — код, скорее всего, будет таким же) для автоматизации различной рутины.
VBA (Visual Basic for Applications) — это упрощенная версия Visual Basic, встроенная в множество продуктов линейки Microsoft Office. Она позволяет писать программы прямо в файле конкретного документа. Вам не требуется устанавливать различные IDE — всё, включая отладчик, уже есть в Excel.
Еще при помощи Visual Studio Tools for Office можно писать макросы на C# и также встраивать их. Спасибо, FireStorm.
Сразу скажу — писать на других языках (C++/Delphi/PHP) также возможно, но требуется научится читать, изменять и писать файлы офиса — встраивать в документы не получится. А интерфейсы Microsoft работают через COM. Чтобы вы поняли весь ужас, вот Hello World с использованием COM.
Поэтому, увы, будем учить Visual Basic.
Чуть-чуть подготовки и постановка задачи
Итак, поехали. Открываем Excel.
Для начала давайте добавим в Ribbon панель «Разработчик». В ней находятся кнопки, текстовые поля и пр. элементы для конструирования форм.
Появилась вкладка.
Теперь давайте подумаем, на каком примере мы будем изучать VBA. Недавно мне потребовалось красиво оформить прайс-лист, выглядевший, как таблица. Идём в гугл, набираем «прайс-лист» и качаем любой, который оформлен примерно так (не сочтите за рекламу, пожалуйста):
То есть требуется, чтобы было как минимум две группы, по которым можно объединить товары (в нашем случае это будут Тип и Производитель — в таком порядке). Для того, чтобы предложенный мною алгоритм работал корректно, отсортируйте товары так, чтобы товары из одной группы стояли подряд (сначала по Типу, потом по Производителю).
Результат, которого хотим добиться, выглядит примерно так:
Разумеется, если смотреть прайс только на компьютере, то можно добавить фильтры и будет гораздо удобнее искать нужный товар. Однако мы хотим научится кодить и задача вполне подходящая, не так ли?
Кодим
Для начала требуется создать кнопку, при нажатии на которую будет вызываться наша програма. Кнопки находятся в панели «Разработчик» и появляются по кнопке «Вставить». Вам нужен компонент формы «Кнопка». Нажали, поставили на любое место в листе. Далее, если не появилось окно назначения макроса, надо нажать правой кнопкой и выбрать пункт «Назначить макрос». Назовём его FormatPrice. Важно, чтобы перед именем макроса ничего не было — иначе он создастся в отдельном модуле, а не в пространстве имен книги. В этому случае вам будет недоступно быстрое обращение к выделенному листу. Нажимаем кнопку «Новый».
И вот мы в среде разработки VB. Также её можно вызвать из контекстного меню командой «Исходный текст»/«View code».
Перед вами окно с заглушкой процедуры. Можете его развернуть. Код должен выглядеть примерно так:
Sub FormatPrice()End Sub
Напишем Hello World:
Sub FormatPrice()
MsgBox "Hello World!"
End Sub
И запустим либо щелкнув по кнопке (предварительно сняв с неё выделение), либо клавишей F5 прямо из редактора.
Тут, пожалуй, следует отвлечься на небольшой ликбез по поводу синтаксиса VB. Кто его знает — может смело пропустить этот раздел до конца. Основное отличие Visual Basic от Pascal/C/Java в том, что команды разделяются не ;, а переносом строки или двоеточием (:), если очень хочется написать несколько команд в одну строку. Чтобы понять основные правила синтаксиса, приведу абстрактный код.
Примеры синтаксиса
' Процедура. Ничего не возвращает
' Перегрузка в VBA отсутствует
Sub foo(a As String, b As String)
' Exit Sub ' Это значит "выйти из процедуры"
MsgBox a + ";" + b
End Sub' Функция. Вовращает Integer
Function LengthSqr(x As Integer, y As Integer) As Integer
' Exit Function
LengthSqr = x * x + y * y
End FunctionSub FormatPrice()
Dim s1 As String, s2 As String
s1 = "str1"
s2 = "str2"
If s1 <> s2 Then
foo "123", "456" ' Скобки при вызове процедур запрещены
End IfDim res As sTRING ' Регистр в VB не важен. Впрочем, редактор Вас поправит
Dim i As Integer
' Цикл всегда состоит из нескольких строк
For i = 1 To 10
res = res + CStr(i) ' Конвертация чего угодно в String
If i = 5 Then Exit For
Next iDim x As Double
x = Val("1.234") ' Парсинг чисел
x = x + 10
MsgBox xOn Error Resume Next ' Обработка ошибок - игнорировать все ошибки
x = 5 / 0
MsgBox xOn Error GoTo Err ' При ошибке перейти к метке Err
x = 5 / 0
MsgBox "OK!"
GoTo ne
Err:
MsgBox
"Err!"
ne:
On Error GoTo 0 ' Отключаем обработку ошибок
' Циклы бывает, какие захотите
Do While True
Exit DoLoop 'While True
Do 'Until False
Exit Do
Loop Until False
' А вот при вызове функций, от которых хотим получить значение, скобки нужны.
' Val также умеет возвращать Integer
Select Case LengthSqr(Len("abc"), Val("4"))
Case 24
MsgBox "0"
Case 25
MsgBox "1"
Case 26
MsgBox "2"
End Select' Двухмерный массив.
' Можно также менять размеры командой ReDim (Preserve) - см. google
Dim arr(1 to 10, 5 to 6) As Integer
arr(1, 6) = 8Dim coll As New Collection
Dim coll2 As Collection
coll.Add "item", "key"
Set coll2 = coll ' Все присваивания объектов должны производится командой Set
MsgBox coll2("key")
Set coll2 = New Collection
MsgBox coll2.Count
End Sub
Грабли-1. При копировании кода из IDE (в английском Excel) есь текст конвертируется в 1252 Latin-1. Поэтому, если хотите сохранить русские комментарии — надо сохранить крокозябры как Latin-1, а потом открыть в 1251.
Грабли-2. Т.к. VB позволяет использовать необъявленные переменные, я всегда в начале кода (перед всеми процедурами) ставлю строчку Option Explicit. Эта директива запрещает интерпретатору заводить переменные самостоятельно.
Грабли-3. Глобальные переменные можно объявлять только до первой функции/процедуры. Локальные — в любом месте процедуры/функции.
Еще немного дополнительных функций, которые могут пригодится: InPos, Mid, Trim, LBound, UBound. Также ответы на все вопросы по поводу работы функций/их параметров можно получить в MSDN.
Надеюсь, что этого Вам хватит, чтобы не пугаться кода и самостоятельно написать какое-нибудь домашнее задание по информатике. По ходу поста я буду ненавязчиво знакомить Вас с новыми конструкциями.
Кодим много и под Excel
В этой части мы уже начнём кодить нечто, что умеет работать с нашими листами в Excel. Для начала создадим отдельный лист с именем result (лист с данными назовём data). Теперь, наверное, нужно этот лист очистить от того, что на нём есть. Также мы «выделим» лист с данными, чтобы каждый раз не писать длинное обращение к массиву с листами.
Sub FormatPrice()
Sheets("result").Cells.Clear
Sheets("data").Activate
End Sub
Работа с диапазонами ячеек
Вся работа в Excel VBA производится с диапазонами ячеек. Они создаются функцией Range и возвращают объект типа Range. У него есть всё необходимое для работы с данными и/или оформлением. Кстати сказать, свойство Cells листа — это тоже Range.
Примеры работы с Range
Sheets("result").Activate
Dim r As Range
Set r = Range("A1")
r.Value = "123"
Set r = Range("A3,A5")
r.Font.Color = vbRed
r.Value = "456"
Set r = Range("A6:A7")
r.Value = "=A1+A3"
Теперь давайте поймем алгоритм работы нашего кода. Итак, у каждой строчки листа data, начиная со второй, есть некоторые данные, которые нас не интересуют (ID, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:
- Считали группы из очередной строки.
- Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
- Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
- После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.
Для упрощения работы рекомендую определить следующие функции-сокращения:
Function GetCol(Col As Integer) As String
GetCol = Chr(Asc("A") + Col)
End FunctionFunction GetCellS(Sheet As String, Col As Integer, Row As Integer) As Range
Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End FunctionFunction GetCell(Col As Integer, Row As Integer) As Range
Set GetCell = Range(GetCol(Col) + CStr(Row))
End Function
Далее определим глобальную переменную «текущая строчка»: Dim CurRow As Integer. В начале процедуры её следует сделать равной единице. Еще нам потребуется переменная-«текущая строка в data», массив с именами групп текущей предыдущей строк. Потом можно написать цикл «пока первая ячейка в строке непуста».
Глобальные переменные
Option Explicit ' про эту строчку я уже рассказывал
Dim CurRow As Integer
Const GroupsCount As Integer = 2
Const DataCount As Integer = 3
FormatPrice
Sub FormatPrice()
Dim I As Integer ' строка в data
CurRow = 1
Dim Groups(1 To GroupsCount) As String
Dim PrGroups(1 To GroupsCount) As String
Sheets(
"data").Activate
I = 2
Do While True
If GetCell(0, I).Value = "" Then Exit Do
' ...
I = I + 1
Loop
End Sub
Теперь надо заполнить массив Groups:
На месте многоточия
Dim I2 As Integer
For I2 = 1 To GroupsCount
Groups(I2) = GetCell(I2, I)
Next I2
' ...
For I2 = 1 To GroupsCount ' VB не умеет копировать массивы
PrGroups(I2) = Groups(I2)
Next I2
I = I + 1
И создать заголовки:
На месте многоточия в предыдущем куске
For I2 = 1 To GroupsCount
If Groups(I2) <> PrGroups(I2) Then
Dim I3 As Integer
For I3 = I2 To GroupsCount
AddHeader I3, Groups(I3)
Next I3
Exit For
End If
Next I2
Не забудем про процедуру AddHeader:
Перед FormatPrice
Sub AddHeader(Ty As Integer, Name As String)
GetCellS("result", 1, CurRow).Value = Name
CurRow = CurRow + 1
End Sub
Теперь надо перенести всякую информацию в result
For I2 = 0 To DataCount - 1
GetCellS("result", I2, CurRow).Value = GetCell(I2, I)
Next I2
Подогнать столбцы по ширине и выбрать лист result для показа результата
После цикла в конце FormatPrice
Sheets("Result").Activate
Columns.AutoFit
Всё. Можно любоваться первой версией.
Некрасиво, но похоже. Давайте разбираться с форматированием. Сначала изменим процедуру AddHeader:
Sub AddHeader(Ty As Integer, Name As String)
Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow)).Merge
' Чтобы не заводить переменную и не писать каждый раз длинный вызов
' можно воспользоваться блоком With
With GetCellS("result", 0, CurRow)
.Value = Name
.Font.Italic = True
.Font.Name = "Cambria"
Select Case Ty
Case 1 ' Тип
.Font.Bold = True
.Font.Size = 16
Case 2 ' Производитель
.Font.Size = 12
End Select
.HorizontalAlignment = xlCenter
End With
CurRow = CurRow + 1
End Sub
Уже лучше:
Осталось только сделать границы. Тут уже нам требуется работать со всеми объединёнными ячейками, иначе бордюр будет только у одной:
Поэтому чуть-чуть меняем код с добавлением стиля границ:
Sub AddHeader(Ty As Integer, Name As String)
With Sheets("result").Range("A" + CStr(CurRow) + ":C" + CStr(CurRow))
.Merge
.Value = Name
.Font.Italic = True
.Font.Name = "Cambria"
.HorizontalAlignment = xlCenterSelect Case Ty
Case 1 ' Тип
.Font.Bold = True
.Font.Size = 16
.Borders(xlTop).Weight = xlThick
Case 2 ' Производитель
.Font.Size = 12
.Borders(xlTop).Weight = xlMedium
End Select
.Borders(xlBottom).Weight = xlMedium ' По убыванию: xlThick, xlMedium, xlThin, xlHairline
End With
CurRow = CurRow + 1
End Sub
Осталось лишь добится пропусков перед началом новой группы. Это легко:
В начале FormatPrice
Dim I As Integer ' строка в data
CurRow = 0 ' чтобы не было пропуска в самом начале
Dim Groups(1 To GroupsCount) As String
В цикле расстановки заголовков
If Groups(I2) <> PrGroups(I2) Then
CurRow = CurRow + 1
Dim I3 As Integer
В точности то, что и хотели.
Надеюсь, что эта статья помогла вам немного освоится с программированием для Excel на VBA. Домашнее задание — добавить заголовки «ID, Название, Цена» в результат. Подсказка: CurRow = 0 CurRow = 1.
Файл можно скачать тут (min.us) или тут (Dropbox). Не забудьте разрешить исполнение макросов. Если кто-нибудь подскажет человеческих файлохостинг, залью туда.
Спасибо за внимание.
Буду рад конструктивной критике в комментариях.
UPD: Перезалил пример на Dropbox и min.us.
UPD2: На самом деле, при вызове процедуры с одним параметром скобки можно поставить. Либо использовать конструкцию Call Foo(«bar», 1, 2, 3) — тут скобки нужны постоянно.
Вопросы по VBA |
||||||
Тема | Ответы | Просмотры | Автор темы | Обновления↓ | ||
Важные темы | ||||||
Правила форума (Обязательно прочесть перед созданием тем!)
Макросы/Sub |
0 | 21371 |
02.04.2013, 10:19 Сообщение от: Serge_007 |
|||
Темы форума | ||||||
Макрос на кнопку, проход по папкам, сравнение с наименование
Макросы/Sub |
0 | 10 | Ivan559455 |
17.04.2023, 10:23 Сообщение от: Ivan559455 |
||
Макрос создающий папки из списка.
Макросы/Sub |
8 | 89 | Mark1976 |
17.04.2023, 07:05 Сообщение от: Mark1976 |
||
Макрос анализирует значения из двух листов и выводит в трети
Макросы/Sub |
0 | 45 | ЕвгенийИ |
16.04.2023, 21:09 Сообщение от: ЕвгенийИ |
||
Заливка цветом при совпадении значений из двух диапазонов.
Макросы/Sub |
8 | 290 | Exsodus |
12.04.2023, 20:38 Сообщение от: i691198 |
||
Сохранить лист отд. файлом имя и пароль открытия по знач.яч
Макросы/Sub |
2 | 89 | Gjlhzl |
12.04.2023, 13:59 Сообщение от: Serge_007 |
||
Реализовать многопользовательский доступ к файлу с макросами
Иное/Other |
19 | 184 | Serge_007 |
12.04.2023, 11:46 Сообщение от: Serge_007 |
||
Макрос для поиска значений в других книгах,
Макросы/Sub |
2 | 108 | KatchenkovRE |
12.04.2023, 11:16 Сообщение от: KatchenkovRE |
||
Учет продуктов в столовой
Макросы/Sub |
2 | 172 | olya2084 |
11.04.2023, 15:18 Сообщение от: olya2084 |
||
Скроллинг в Multipage VBA Excel
Функции/Function |
4 | 126 | Damir8728 |
11.04.2023, 12:18 Сообщение от: MikeVol |
||
Как можно ускорить работу макроса на скрытие строк
Макросы/Sub |
14 | 223 | graff9540 |
07.04.2023, 22:26 Сообщение от: Gustav |
||
Выборочное сохранение листов в pdf
Макросы/Sub |
15 | 393 | graffserg |
07.04.2023, 15:58 Сообщение от: graff9540 |
||
Пользовательское выравнивание подписи в диаграмме
Макросы/Sub |
0 | 80 | kotlovan |
06.04.2023, 10:25 Сообщение от: kotlovan |
||
Пересчет формул в вычисляемом диапазоне листа
Макросы/Sub |
2 | 68 | Xenus91 |
05.04.2023, 22:29 Сообщение от: Xenus91 |
||
Настройка фильтров в сводной таблице через макрос
Макросы/Sub |
18 | 160 | Artem9222 |
05.04.2023, 17:49 Сообщение от: Artem9222 |
||
Обновление книги и листов отдельно
Макросы/Sub |
0 | 91 | truan21 |
05.04.2023, 11:05 Сообщение от: truan21 |
||
Запрет печати нескольких листов
Макросы/Sub |
4 | 52 | DrMini |
05.04.2023, 09:55 Сообщение от: DrMini |
||
Удалить часть текста внутри ячейки
Макросы/Sub |
8 | 4244 | den45444 |
05.04.2023, 01:07 Сообщение от: Dimchec |
||
Суммирование формул
Макросы/Sub |
3 | 106 | tasdel |
03.04.2023, 16:20 Сообщение от: tasdel |
||
Увеличение скорости работы макроса скрытия строк.
Макросы/Sub |
4 | 163 | Exsodus |
02.04.2023, 22:30 Сообщение от: Gustav |
||
В этом форуме тем: 9729. На странице показано тем: 20. | ||||||
Форум просматривают: 9 гостей и msi2102 |
Здравствуйте!
Недавно наткнулся на тему с глобальным хуком на события клавиатуры и мыши…
Yeahvgen
Сегодня 10:33
Добрый день!
К сожалению, не нашел готовое решение на форуме, поэтому опишу здесь.
Суть задачи…
Drta2
Сегодня 07:22
Задание: Продавец получает комиссионные: если продукции продано не меньше чем на 10000 процент 2,…
ThaiAZ
Сегодня 05:24
Здравствуйте, друзья! Остались несколько макросов, от прежнего нашего коллеги. Работают как надо,…
Ilsor
Вчера 21:03
Задание: Продавец получает комиссионные: если продукции продано не меньше чем на 10000 процент 2,…
ThaiAZ
Вчера 14:13
Задание: Извлечь корень из числа a, если оно кратно 11, в противном случае вычесть из числа a …
ThaiAZ
Вчера 12:15
Добрый день, есть полотно с однотипными формулами в нескольких строках и значений во всех…
wins911
15.04.2023 22:14
Есть код, который выводит изображения .jpg в ворд с подписями. Изображения двух типов альбомной…
AwnDala
14.04.2023 23:18
Здравствуйте! Открыл для сеья нейросети. Запрос: Напиши код vba word пронумеровать ячейки в первом…
Ilsor
14.04.2023 20:58
Ребят всех привествую.
Необходимо создать МАКРОС, который сможет рассчитать разницу между суммой…
Zizu-
14.04.2023 18:15
Добрый день форумчане:drink:
Уже 2 неделю головой бьюсь об стену пытаясь написать код с помощью…
Bangerz
14.04.2023 15:06
Помогите пожалуйста с макросом!
Нужно: 1. Произвести поиск совпадения столбца «G» листа «Протокол»…
SHAQ
14.04.2023 10:58
добрый день! я далекий от информатики и компьютера человек, провожу психологическое исследование….
19841984
14.04.2023 10:49
Здравствуйте! Пытаюсь сделать точный клик по элементу, но часто код промахивается. Можно как то…
agressor1
14.04.2023 10:41
Подскажите пожалуйста, возможно ли привязать небольшую таблицу созданную в exel к наклейке штрих…
Dmitry_a
14.04.2023 05:32
Дан номер года (положительное целое число). Определить количество
дней в этом году, учитывая, что…
Vorviri
13.04.2023 22:46
Прошу совета или помощи. Я только начинаю изучать VBA и к сожалению сложно с языком. Написал код…
GGWPSANYA
13.04.2023 21:47
Всем привет.
Сейчас сохраняю 3 вкладки с расчётного файла в файл отчета как:
Sub copy_f()…
Иван_777
13.04.2023 18:59
Всем доброе времени суток!
У меня есть два файла Excel и Word. В «экселе» есть таблица, на…
Igor247
13.04.2023 16:04
Как найти в документе WORD с помощью макроса и цикла через одну буквы А и заменив их буквами Б…
Sergeiis
13.04.2023 14:32
Доброго дня друзья.Прошу вас помочь мне создать МАКРОС, который после копирования текста в ячейку…
Zizu-
13.04.2023 10:35
Module:
Public Sub myForm1()
Public Sub myForm2()
Public Sub myForm3()
End Sub
UseForm1:…
RokuM
13.04.2023 10:06
Здравствуйте, помогите пожалуйста как сделать что бы картинка вставлялась в Exel документ не из…
zavoevatellllll
12.04.2023 15:52
Sub fun()
Dim m(1 To 10, 1 To 10) As Integer
For i = 1 To 10
For j = 1 To 10
…
Frastber
12.04.2023 14:53
Здравствуйте, подскажите, пожалуйста, как в ворде с помощью макроса можно найти, выделить и…
М55
12.04.2023 14:12
Здравствуйте уважаемые помошники VBA. Помогите пожалуйста в изменении с «ОБЩЕГО» формата ячеек на…
Zizu-
12.04.2023 14:09
Здравствуйте.
Наткнулся на проблему. Тут описание:…
Вождь
12.04.2023 13:47
Добрый вечер!
Попросили сделать макрос, который бы текст, набранный шрифтом цвета «авто»,…
Zeag
12.04.2023 11:08
Добрый день.
При повторном вызове следующего кода(5-я строка) программа выдает ошибку «error…
TimSm
12.04.2023 10:41
Как правильно установить модуль в Win10?
Дело в том, что дрова модуля только под вин7.
Если…
AndreA SN
12.04.2023 05:01
Уважаемые знатоки подскажите как написать формулу для ячейки
Если в ячейке равно 600 или больше…
knjaz
11.04.2023 20:45
Здравствуйте! Уважаемы знатоки, в очередной раз прошу помощи. Нужно найти все содержимое в…
Ilsor
11.04.2023 19:37
Добрый день! помогите решить проблему с нажатием кнопки элемента управления формой с помощью другой…
Shevr98
11.04.2023 16:36
Ребят всех привествую. Данная справка обновляется у меня по квартально.
Мне нужен макрос , который…
Zizu-
11.04.2023 11:32
Есть блок, который вставляется из кода, есть ли возможность сделать при помощи циклов так, чтобы…
Babidjon
11.04.2023 04:15
Доброго времени суток! Хочу попробовать решить такую задачу — написать макрос для Word, при помощи…
TrollHammer
10.04.2023 18:01
График содержит много данных, если просто включить вертикальные линии сетки:
…
Alexis333
10.04.2023 17:51
Всем привет!
Не получается коротко придумать код, чтобы по нажатию кнопки можно было определить…
masl9tkovich
10.04.2023 11:02
UDF функции имеют некоторые ограничения и поэтому меня интересует такой вопрос.
Nexi99
10.04.2023 09:54
Такая ситуация есть ячейка в которую записана формула нужно заменить её на значение. Я снял…
Nexi99
10.04.2023 02:47
Здравствуйте!
Помогите пожалуйста написать программу:
Задан целочисленный массив размерности 4 на…
sergeynd
09.04.2023 22:40
Здравствуйте! Помогите составить макрос, чтобы дополнять данные.
Необходимо открыть файл…
Katin
09.04.2023 06:06
Здравствуйте.
Столкнулся с такой проблемой, увидел в инете способ, как можно красить кнопки…
Fallen_Faceless
08.04.2023 18:00
Здравствуйте, помогите пожалуйста с кодом, ошибка заключается в том что при выводе таблицы, если в…
RockFire
08.04.2023 16:19
Здравствуйте. Есть макрос, который удаляет повторяющиеся абзацы и окрашивает первое вхождение этого…
SO4HYY
08.04.2023 12:05
Всем привет у меня есть ячейка в нем меняющиеся значения к примеру в ячейке записана строка…
Nurislom1993
07.04.2023 20:33
Добрый день знатаки. Надо изменит код чтоб он автоматический изменил ширины столбца на основе…
ulugbek tulakov
07.04.2023 19:17
Всем привет.
Прошу спецов помощь.
Имеется файл с макросом, для создания листа на основании…
Farrid
07.04.2023 12:21
Люди добрые, такой вопрос, есть код в теории создающий 2D сетку по координатам из эксель, а на…
Babidjon
07.04.2023 08:16
Приветствую знатоков VBA!
Впервые делаю самоинсталлируемую надстройку по методике:
…
AleaGTR-1
06.04.2023 20:46
Сообщений: 1
Просмотров: 5
Сообщений: 5
Просмотров: 130
Сообщений: 1
Просмотров: 37
Сообщений: 3
Просмотров: 114
Сообщений: 2
Просмотров: 92
Сообщений: 0
Просмотров: 45
Сообщений: 1
Просмотров: 40
Сообщений: 4
Просмотров: 78
Сообщений: 1
Просмотров: 50
Сообщений: 2
Просмотров: 151
Сообщений: 4
Просмотров: 156
Сообщений: 9
Просмотров: 282
Сообщений: 2
Просмотров: 134
Сообщений: 2
Просмотров: 173
Сообщений: 8
Просмотров: 385
Сообщений: 1
Просмотров: 245
Сообщений: 4
Просмотров: 403
Сообщений: 1
Просмотров: 286
Сообщений: 1
Просмотров: 295
Сообщений: 2
Просмотров: 409
The_Prist
Пользователь
Сообщений: 14183
Регистрация: 15.09.2012
Профессиональная разработка приложений для MS Office
Владимир, тогда аргументируйте подобные цитаты или расширьте свой вопрос. Напишите, какие вопросы надо считать мелкими, а какие нет.
как в VBA показать сообщение? Мелкий вопрос? Поисковик ответа не даст?
Как работает Split — вопрос мелкий? Поисковик ответа не даст?
и еще куча подобных вопросов, ответы на которые в поисковике есть если не на 100%, то на 90 точно. На форуме можно наблюдать не одну и не две подобные темы.
То, что Вы предлагаете — утопия и не раз обсуждалось. Невозможно разделить вопросы на мелкие или нет. Для кого-то и вопрос по МУМНОЖ будет мелким, а для кого-то астрономически неподъемным в понимании. И каждый человек по своему воспримет сложность одного и того же вопроса и в результате получится просто две ветки с одинаковым содержимым.
И не надо воспринимать на личный счет мои высказывания. Я высказал свое мнение относительно заданного вопроса. Вы задали вопрос, который предполагает обсуждение — так давайте здраво и с разных точек зрения рассуждать и смотреть. А после уже принимать решения и отписывать подобного рода цитаты. А то как-то получается Вы хотите всех под свое мнение подстроить. У Вас своя точка зрения — у меня своя. Вот задайте мне сейчас мелкий вопрос, ответ на который нельзя найти поисковиком. Если у Вас получится — я признаю, что был не прав и далеко не бОльшая часть мелких вопросов никак не доступна в сети и можно биться часами и не найти там ответ. Но тут я полагаю вопрос даже не в том, можно ли найти ответ, а в том, кто как задает запрос и что хочет видеть в результате. Ведь Вы и сами знаете — половина тех, кто заходит на форум — заходит за готовым решением, а не за наводкой.
И Вы очевидным образом проигнорировали первые два пункта Не мне Вам объяснять, как будут в этой теме искать ответы, как только там наберется хотя бы порядка 20 страниц — глянул на двух первых страницах и забил. Пошел в конец задавать вопрос. Так было и будет. Редкая птица долетит до середины Днепра В Приемы-то далеко не все заглядывают, а Вы надеетесь, что все не так ленивы как Вы или я и отдельную тему будут тщательно просматривать…Дай Бог, чтобы хоть 10% набралось из общего кол-ва участников форума, кто так делает.
Если же приближаться к развязке и предложениям: это надо делать не тему — а FAQ наполнять по мелочи, с гиперссылками на посты вопросов и решений. Хотя на том же
http://www.msoffice.nm.ru/faq/macros.htm
этой информации валом. Все мелкие вопросы вроде как озвучены. Да и не совсем понятно, кто такую тему будет вести и оформлять. Вы возьметесь? Если да — давайте прикрепим её в начале форума, обзовем чем-то вроде «FAQ по VBA для начинающих» и вперед…
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…