Форум что такое vba в excel

Время на прочтение
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 IntegerAs 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, название и цена) и есть две вложенные группы, к которым она принадлежит (тип и производитель). Более того, эти строки отсортированы. Пока мы забудем про пропуски перед началом новой группы — так будет проще. Я предлагаю такой алгоритм:

  1. Считали группы из очередной строки.
  2. Пробегаемся по всем группам в порядке приоритета (вначале более крупные)
    1. Если текущая группа не совпадает, вызываем процедуру AddGroup(i, name), где i — номер группы (от номера текущей до максимума), name — её имя. Несколько вызовов необходимы, чтобы создать не только наш заголовок, но и всё более мелкие.
  3. После отрисовки всех необходимых заголовков делаем еще одну строку и заполняем её данными.

Для упрощения работы рекомендую определить следующие функции-сокращения:

Function GetCol(Col As IntegerAs String
    GetCol = Chr(Asc("A") + Col)
End FunctionFunction GetCellS(Sheet As String, Col As Integer, Row As IntegerAs Range
    Set GetCellS = Sheets(Sheet).Range(GetCol(Col) + CStr(Row))
End FunctionFunction GetCell(Col As Integer, Row As IntegerAs 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

10 267

Добрый день!
К сожалению, не нашел готовое решение на форуме, поэтому опишу здесь.
Суть задачи…

Drta2

Сегодня 07:22

7 327

Задание: Продавец получает комиссионные: если продукции продано не меньше чем на 10000 процент 2,…

ThaiAZ

Сегодня 05:24

7 231

Здравствуйте, друзья! Остались несколько макросов, от прежнего нашего коллеги. Работают как надо,…

Ilsor

Вчера 21:03

9 394

Задание: Продавец получает комиссионные: если продукции продано не меньше чем на 10000 процент 2,…

ThaiAZ

Вчера 14:13

1 134

Задание: Извлечь корень из числа a, если оно кратно 11, в противном случае вычесть из числа a …

ThaiAZ

Вчера 12:15

5 164

Добрый день, есть полотно с однотипными формулами в нескольких строках и значений во всех…

wins911

15.04.2023 22:14

9 306

Есть код, который выводит изображения .jpg в ворд с подписями. Изображения двух типов альбомной…

AwnDala

14.04.2023 23:18

16 503

Здравствуйте! Открыл для сеья нейросети. Запрос: Напиши код vba word пронумеровать ячейки в первом…

Ilsor

14.04.2023 20:58

11 481

Ребят всех привествую.

Необходимо создать МАКРОС, который сможет рассчитать разницу между суммой…

Zizu-

14.04.2023 18:15

0 129

Добрый день форумчане:drink:
Уже 2 неделю головой бьюсь об стену пытаясь написать код с помощью…

Bangerz

14.04.2023 15:06

11 334

Помогите пожалуйста с макросом!
Нужно: 1. Произвести поиск совпадения столбца «G» листа «Протокол»…

SHAQ

14.04.2023 10:58

4 348

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

19841984

14.04.2023 10:49

5 307

Здравствуйте! Пытаюсь сделать точный клик по элементу, но часто код промахивается. Можно как то…

agressor1

14.04.2023 10:41

0 115

Подскажите пожалуйста, возможно ли привязать небольшую таблицу созданную в exel к наклейке штрих…

Dmitry_a

14.04.2023 05:32

10 402

Дан номер года (положительное целое число). Определить количество
дней в этом году, учитывая, что…

Vorviri

13.04.2023 22:46

6 322

Прошу совета или помощи. Я только начинаю изучать VBA и к сожалению сложно с языком. Написал код…

GGWPSANYA

13.04.2023 21:47

15 375

Всем привет.

Сейчас сохраняю 3 вкладки с расчётного файла в файл отчета как:

Sub copy_f()…

Иван_777

13.04.2023 18:59

0 102

Всем доброе времени суток!
У меня есть два файла Excel и Word. В «экселе» есть таблица, на…

Igor247

13.04.2023 16:04

18 398

Как найти в документе WORD с помощью макроса и цикла через одну буквы А и заменив их буквами Б…

Sergeiis

13.04.2023 14:32

2 299

Доброго дня друзья.Прошу вас помочь мне создать МАКРОС, который после копирования текста в ячейку…

Zizu-

13.04.2023 10:35

14 404

Module:
Public Sub myForm1()
Public Sub myForm2()
Public Sub myForm3()
End Sub

UseForm1:…

RokuM

13.04.2023 10:06

7 277

Здравствуйте, помогите пожалуйста как сделать что бы картинка вставлялась в Exel документ не из…

zavoevatellllll

12.04.2023 15:52

0 198

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

6 169

Здравствуйте, подскажите, пожалуйста, как в ворде с помощью макроса можно найти, выделить и…

М55

12.04.2023 14:12

4 219

Здравствуйте уважаемые помошники VBA. Помогите пожалуйста в изменении с «ОБЩЕГО» формата ячеек на…

Zizu-

12.04.2023 14:09

3 232

Здравствуйте.

Наткнулся на проблему. Тут описание:…

Вождь

12.04.2023 13:47

0 164

Добрый вечер!
Попросили сделать макрос, который бы текст, набранный шрифтом цвета «авто»,…

Zeag

12.04.2023 11:08

9 305

Добрый день.

При повторном вызове следующего кода(5-я строка) программа выдает ошибку «error…

TimSm

12.04.2023 10:41

5 252

Как правильно установить модуль в Win10?
Дело в том, что дрова модуля только под вин7.
Если…

AndreA SN

12.04.2023 05:01

4 1,604

Уважаемые знатоки подскажите как написать формулу для ячейки
Если в ячейке равно 600 или больше…

knjaz

11.04.2023 20:45

13 543

Здравствуйте! Уважаемы знатоки, в очередной раз прошу помощи. Нужно найти все содержимое в…

Ilsor

11.04.2023 19:37

6 332

Добрый день! помогите решить проблему с нажатием кнопки элемента управления формой с помощью другой…

Shevr98

11.04.2023 16:36

10 585

Ребят всех привествую. Данная справка обновляется у меня по квартально.
Мне нужен макрос , который…

Zizu-

11.04.2023 11:32

3 180

Есть блок, который вставляется из кода, есть ли возможность сделать при помощи циклов так, чтобы…

Babidjon

11.04.2023 04:15

2 252

Доброго времени суток! Хочу попробовать решить такую задачу — написать макрос для Word, при помощи…

TrollHammer

10.04.2023 18:01

1 232

График содержит много данных, если просто включить вертикальные линии сетки:

Alexis333

10.04.2023 17:51

2 177

Всем привет!

Не получается коротко придумать код, чтобы по нажатию кнопки можно было определить…

masl9tkovich

10.04.2023 11:02

7 185

UDF функции имеют некоторые ограничения и поэтому меня интересует такой вопрос.

Nexi99

10.04.2023 09:54

18 855

Такая ситуация есть ячейка в которую записана формула нужно заменить её на значение. Я снял…

Nexi99

10.04.2023 02:47

30 975

Здравствуйте!
Помогите пожалуйста написать программу:
Задан целочисленный массив размерности 4 на…

sergeynd

09.04.2023 22:40

3 185

Здравствуйте! Помогите составить макрос, чтобы дополнять данные.
Необходимо открыть файл…

Katin

09.04.2023 06:06

10 461

Здравствуйте.
Столкнулся с такой проблемой, увидел в инете способ, как можно красить кнопки…

Fallen_Faceless

08.04.2023 18:00

6 367

Здравствуйте, помогите пожалуйста с кодом, ошибка заключается в том что при выводе таблицы, если в…

RockFire

08.04.2023 16:19

7 355

Здравствуйте. Есть макрос, который удаляет повторяющиеся абзацы и окрашивает первое вхождение этого…

SO4HYY

08.04.2023 12:05

1 205

Всем привет у меня есть ячейка в нем меняющиеся значения к примеру в ячейке записана строка…

Nurislom1993

07.04.2023 20:33

7 344

Добрый день знатаки. Надо изменит код чтоб он автоматический изменил ширины столбца на основе…

ulugbek tulakov

07.04.2023 19:17

4 227

Всем привет.
Прошу спецов помощь.
Имеется файл с макросом, для создания листа на основании…

Farrid

07.04.2023 12:21

8 445

Люди добрые, такой вопрос, есть код в теории создающий 2D сетку по координатам из эксель, а на…

Babidjon

07.04.2023 08:16

13 769

Приветствую знатоков VBA!
Впервые делаю самоинсталлируемую надстройку по методике:

AleaGTR-1

06.04.2023 20:46

19 624 Задать вопрос          

Сообщений: 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 для начинающих» и вперед…

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

Like this post? Please share to your friends:
  • Фотографии работы с excel
  • Форум помощи по excel
  • Форум по работе excel
  • Форум по word 2013
  • Форум по vba для excel