Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
VBA Найти среднее значение элементов второго столбца матрицы найти среднее значение элементов 2-го столбца, максимальное значенне этих элементов и количество значений меньших 78. Вот что у меня получилось, но оно не работает чего-то, помогите пожалуйста Option Base 0 ' Опис змінних рівня модуля Dim Список(3, 2) As Variant, i As Integer Dim СписокВиводу(3) As Variant Private Sub CommandButton1_Click() 'процедура проведення обчислень з вибраними... https://www.cyberforum.ru/ vba/ thread713612.html Обращение к файлам rtf из VBA Word для копирования содержимого VBA
Кто знает каким образом можно копировать части rtf файла в ворд? Как пример кусочек кода: fname = "C:\НАКАЗ.rtf" Set doc2 = ActiveDocument ActiveDocument.Content.Text = "" Set doc1 = Documents(fname) 'здесь возникает ошибка -"неправильный тип файла" doc1.Open FileName:=fname s = doc1.Content.Text В дальнейшем нужно периодически обращаться к файлу rtf...
VBA Автосортировка по указаному номеру столбца Всем доброго времени суток. У меня возникла такая проблема. Не знаю как осуществить следующее. Есть файл эксель, там много столбцов. И есть ячейка. Если мы укажем в ячейке, к примеру 1, сортируется столбец А (по возрастанию), если - 4 , то D и так далее Может подскажет кто что и как делать? https://www.cyberforum.ru/ vba/ thread713490.html VBA Вставка относительных ссылок в формулу посредством переменных https://www.cyberforum.ru/ vba/ thread713425.html
Добрый день. я который раз возвращаюсь к одной загвоздке в своем макросе и никак не могу ее решить. помогите пожалуйста. есть вырезка из кода: k = ActiveCell.Offset(-9, -5).Address(0, 0, ReferenceStyle:=xlR1C1) s = ActiveCell.Offset(-9, -6).Address(0, 0, ReferenceStyle:=xlR1C1)
VBA Построение диаграммы. Создание нового тега и ошибка "type mismatch"
Здравствуйте! После запуска макроса выдает ошибку run-time error 13 type mismatch в этом месте кода: X1 = Range(Workbooks(MyName).Worksheets(MyDannie).Cells(iRowi + 7, iClmj + 3), Workbooks(MyName).Worksheets(MyDannie).Cells(iRow1, iClmj + 3)).Value Не могу разобраться в причине ее возникновения. Попытался уменьшить количество аргументов. Проблему не решило. Подскажите как исправить проблему....
VBA Поиск на листах и систематизация данных https://www.cyberforum.ru/ vba/ thread713297.html
На "Лист1" в 1 столбце находится список организаций в столбец 2 и 3 должны копироваться данные со 2 и 3 листа. На 2 и 3 Лист выгружаются данные из разных программ 1С и ИМУС нужно что бы макрос отыскивал на "Лист2" организацию например "Стройматериалы" брал данные из 2 столбца и записывал их на "Лист1" в 2 столбец напротив "Стройматериалы" далее находил "Стройматериалы" на "Лист3" копировал данные...
VBA Переключение языка ввода в зависимости от столбца Добрый день! Есть таблица из двух колонок. Как прописать макрос, который бы делал следующее?: 1. если курсор находится в первой колонке - язык ввода становится русским 2. если курсор находится во второй колонке - язык ввода становится английским https://www.cyberforum.ru/ vba/ thread713186.html VBA Получить метки дисков
Есть форма для выбора диска, на который нужно сохранить отчет Excel. Т.к. очень часто нужно сохранить отчет на флешку, возникла необходимость выводить в ComboBox не только букву диска, но и его метку (чтоб у неопытных пользователей не возникало трудностей при поиске нужного устройства). Все работает кроме вывода метки диска : Private Declare Function GetLogicalDriveStrings Lib "kernel32"...
VBA Проверка на число в InputBox вызывает ошибку https://www.cyberforum.ru/ vba/ thread713125.html
a = InputBox("a") Do While Not IsNumeric(a) MsgBox "Ошибка" a = InputBox("a") Loop b = InputBox("b") Do While Not IsNumeric(b) MsgBox "Ошибка" b = InputBox("b") Loop
VBA Реализовать оповещение, если в заданный промежуток времени от адресата нет письма https://www.cyberforum.ru/ vba/ thread713123.html
Как можно реализовать оповещение, если в заданный промежуток времени от адресата нет письма. К примеру есть адресаты с ящиками ввида: mail1@example.com mail2@example.com ......... mail100@example.com Если в заданный период времени, допустим, раз в сутки, от одного из адресатов нет письма, то приходило бы письмо/оповещение об этом.
VBA Передавать в макрос параметры в зависимости от выбранной ячейки
Суть такова: мне нужно привязать уже готовый макрос к нескольким ячейкам (макрос - на внешний запуск приложения) но при этом ещё сделать условие что если одна ячейка вызов проги с одним параметром, другая ячейка с другим параметром Сама программа на Delphi 7 надеюсь на вашу помощь)))
VBA Автоматический ввод пароля при открытии файла Excel Добрый день! По работе каждый день приходится сталкиватся с множеством Excel-файлов, на которых стоит один и тот же пароль. Все эти файлы имеют схожее название и представляют собой примерно следующее: "forex" + date, то есть forex211012, forex221012, forex271112. На всех стоит один и тот же пароль. Каждый раз ввод
6081 / 1325 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
25.06.2014, 17:33 0

Авторские программы, библиотеки, надстройки и шаблоны - VBA - Ответ 6363434

25.06.2014, 17:33. Показов 253809. Ответов 254
Метки (Все метки)

Ответ

Глава третья: "Обзор интерфейсов"
Интерфейсы обеспечивают унифицированную обработку данных вне зависимости от их типа. Это очень важно, так как позволяет базовым структурам массивов работать с данными любого типа, не вдаваясь в тонкости реализации того или иного типа данных.
Список операций, которые могут поддерживаться базовыми или пользовательскими типами данных, довольно велик, но лишь одна из них нуждается в обязательной поддержке - операция создания объекта реализуемого базового или пользовательского типа (определенная в интерфейсе IFactory). Ее важность обуславливается тем, что без реализации данной операции базовые структуры не могут создать массив объектов данного типа, а значит, и работа с таким массивом в какой бы то ни было форме становится невозможной.
Что касается остальных операций, то решение о их поддержке принимается в зависимости от целей, которые ставятся над проектируемым типом данных. Если предолагается вывод информации в текстовые или иные файлы - реализуется интерфейс ISerializable. Если нужно сравнивать элементы между собой (в том числе в ходе сортировки) - в типе данных реализуется интерфейс IComparable или создается специальный класс с реализацией интерфейса IComparer. Если нужна возможность производить математические вычисления с использованием разработанного типа данных - реализуются интерфейсы IConvertible и IMath. И наконец, очень важным интерфейсом является интерфейс ICloneable, реализация которого позволяет структурам данных создавать точные копии элементов со всеми их значениями, вместо того, чтобы копировать только ссылки на элементы (что чревато потерей данных в ходе их модификации по одной из ссылок). Листинги всех интерфейсов приводятся ниже.
Код интерфейса IFactory

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'________________________________________________________________
'_______________________                 ________________________
'______________________  Модуль IFactory  _______________________
'_____________________    Версия: 0.0.0    ______________________
'____________________     Автор: Aksima      ____________________
'___________________  Библиотека: AksiArrays  ___________________
'________________________________________________________________
'______________                                    ______________
'______________  Назначение: Определяет интерфейс  ______________
'______________  для создания классовых объектов.  ______________
'________________________________________________________________
 
Public Function NewOb() As Object
End Function

Код интерфейса ISerializable

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'________________________________________________________________
'_____________________                      _____________________
'____________________  Модуль ISerializable  ____________________
'_____________________    Версия: 0.0.0    ______________________
'____________________     Автор: Aksima      ____________________
'___________________  Библиотека: AksiArrays  ___________________
'________________________________________________________________
'_______________                                   ______________
'______________  Назначение: Определяет интерфейс   _____________
'_________________  для сериализации объектов.  _________________
'________________________________________________________________
 
Public Function Serialize() As String
End Function
Public Sub Unserialize(ByVal s As String)
End Sub

Код интерфейса ICloneable

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'________________________________________________________________
'______________________                   _______________________
'_____________________  Модуль ICloneable  ______________________
'____________________     Версия: 0.0.0     _____________________
'___________________      Автор: Aksima      ____________________
'__________________   Библиотека: AksiArrays  ___________________
'________________________________________________________________
'_______________                                  _______________
'______________  Назначение: Определяет интерфейс  ______________
'_____________  для создания точной копии объекта.  _____________
'________________________________________________________________
 
Public Function Copy() As Object
End Function

Код интерфейса IComparer

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'________________________________________________________________
'_______________________                  _______________________
'______________________  Модуль IComparer  ______________________
'_____________________    Версия: 0.0.0     _____________________
'____________________     Автор: Aksima      ____________________
'___________________  Библиотека: AksiArrays  ___________________
'________________________________________________________________
'_______________                                   ______________
'______________  Назначение: Определяет интерфейс   _____________
'_________________  для объекта - "сравнителя".  ________________
'________________________________________________________________
 
Public Function Compare(ByVal one As Object, ByVal another As Object) As Long
End Function

Код интерфейса IComparable

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'________________________________________________________________
'______________________                    ______________________
'_____________________  Модуль IComparable  _____________________
'_____________________    Версия: 0.0.0     _____________________
'____________________     Автор: Aksima      ____________________
'___________________  Библиотека: AksiArrays  ___________________
'________________________________________________________________
'_______________                                   ______________
'______________  Назначение: Определяет интерфейс   _____________
'_____________  для сравнения объектов между собой.  ____________
'________________________________________________________________
 
Public Function CompareTo(ByVal another As Object) As Long
End Function

Код интерфейса IConvertible

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'________________________________________________________________
'____________________                       _____________________
'____________________  Модуль IConvertible  _____________________
'_____________________    Версия: 0.0.0    ______________________
'____________________     Автор: Aksima      ____________________
'___________________  Библиотека: AksiArrays  ___________________
'________________________________________________________________
'_____                                                       ____
'_____  Назначение: Определяет интерфейс для преобразования  ____
'______   объекта одного класса в объект другого класса.   ______
'________________________________________________________________
 
Public Function Convert(ByVal x As Variant) As Object
End Function

Код интерфейса IMath

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
'________________________________________________________________
'_______________________                _________________________
'______________________   Модуль IMath   ________________________
'_____________________    Версия: 0.0.0    ______________________
'____________________     Автор: Aksima      ____________________
'___________________  Библиотека: AksiArrays  ___________________
'________________________________________________________________
'______________                                    ______________
'____________    Назначение: Определяет интерфейс     ___________
'___________  для выполнения математических операций.  __________
'________________________________________________________________
 
'Функция 'C'ложить (сложения).
Public Function ©(ByVal a As Variant, ByVal b As Variant) As Object
End Function
'Функция "знак минус" (вычитания)
Public Function *(ByVal a As Variant, ByVal b As Variant) As Object
End Function
'Функция "знак умножения" (умножения)
Public Function ·(ByVal a As Variant, ByVal b As Variant) As Object
End Function
'Функция 'R'азделить (деления) или отношения (Ratio)
Public Function ®(ByVal a As Variant, ByVal b As Variant) As Object
End Function


Примеры решения задач с использованием методов библотеки AksiArrays
В этой главе приведены примеры решения задач из первой части статьи средствами библиотеки AksiArrays. Попробуйте сравнить объем кода в этих примерах с примерами программ из первой части.
Решение задачи №1
Пусть показания температуры находятся в файле "Geo.txt". Тогда решение задачи таково:
Visual Basic
1
2
3
4
5
6
Sub AverageTemperatureAksima()
    Dim v As New AksiVector
    v.Init New AksiFloat, 31
    v.GetData_TextFile "Geo.txt"
    MsgBox "Средняя температура января: " & Format(v.Average, "0.0") & " градуса."
End Sub
Как видно из текста программы, задачи вычисления агрегирующей функции (среднего арифметического), а также извлечения данных из файла существенно упростились. Кроме того, осуществляется ряд проверок на факт существования файла "Geo.txt" и проводится разбор текстового содержимого файла (десериализация) для получения массива вещественных чисел. Все эти действия скрыты от пользователя библиотеки - ломать над ними голову вам не нужно.
Решение задачи №2
Предположим, что оценки учащихся находятся в файле "Pupils.txt":
Visual Basic
1
2
3
4
5
6
7
Sub ControlWorkRatingsAksima()
    Dim v As New AksiVector
    v.Init New AksiInteger, 20
    v.GetData_TextFile "Pupils.txt"
    v.PutData_DialogBox "Содержимое классного журнала"
    v.CountUnique.PutData_DialogBox "Оценки и их количество"
End Sub
Здесь использована функция CountUnique, которая, как уже отмечалось, позволяет быстро и удобно определить уникальные элементы целочисленного массива и подсчитать их количество.
Решение задачи №3

Visual Basic
1
2
3
4
5
6
7
Sub FindMaxNumberAksima()
    Dim m As New AksiMatrix
    m.Init New AksiInteger, 10, 8
    m.GetData_RandomGenerator 50, 99
    m.PutData_DialogBox "Сгенерированный массив"
    MsgBox "Максимальный элемент массива: " & m.Max
End Sub
Иницализация массива случайными значениями, его вывод в диалоговое окно и поиск максимального значения массива - с новой библиотекой каждая операция требует только одной команды.
Решение задачи №4

Visual Basic
1
2
3
4
5
6
7
8
Sub SortNumbersAksima()
    Dim v As New AksiVector
    v.Init New AksiInteger, 50
    v.GetData_RandomGenerator 50, 99
    v.PutData_DialogBox "Перед упорядочиванием"
    v.Sort
    v.PutData_DialogBox "После упорядочивания"
End Sub
Выполнить сортировку данных в рассматриваемой задаче помогает библитечная функция Sort. По умолчанию она осуществляет сортировку данных по неубыванию методом пузырка. Но можно выбрать и другие параметры сортировки.
Решение задачи №5
Исходя из того, что оценки учащихся по всем предметам находятся в файле "PupSubjs.txt", можно написать следующий код:
Visual Basic
1
2
3
4
5
6
7
Sub PupilAndSubjectAveragesAksima()
    Dim m As New AksiMatrix
    m.Init New AksiInteger, 20, 3
    m.GetData_TextFile "PupSubjs.txt"
    m.Parts(AO_ROWS).GroupOperation("Average", VbGet, New AksiFloat).PutData_DialogBox "Средние оценки учащихся"
    m.Parts(AO_COLUMNS).GroupOperation("Average", VbGet, New AksiFloat).PutData_DialogBox "Средние оценки по каждому предмету"
End Sub
С применением библотеки подход к решению задач, в которых надо производить однотипные действия над элементами матрицы, выражается следующим образом: получаем вектор интересующих нас элементов матрицы с помощью функции Parts (с параметром AO_ROWS - вектор строк, AO_COLUMNS - вектор столбцов) и производим однотипные операции над каждым элементом вектора с помощью функции GroupOperation.
Решение задачи №6

Visual Basic
1
2
3
4
5
6
7
Sub TrianglesExtremesDifferenceAksima()
    Dim m As New AksiMatrix: Const N = 6
    m.Init New AksiInteger, N, N
    m.GetData_RandomGenerator 50, 99
    m.PutData_DialogBox "Обрабатываемая матрица"
    MsgBox "Разница между максимальным элементом над главной диагональю и минимальным элементом под главной диагональю равна: " & m.Parts(AO_UP_MAIN_EXC).Max - m.Parts(AO_DOWN_MAIN_EXC).Min
End Sub
Волшебная функция Parts умеет извлекать не только строки или столбцы, но и более сложные элементы матрицы, такие, например, как треугольник над большой диагональю матрицы.


Заключение
В ходе разбора первой части статьи мы увидели, что хотя массив - понятие простое, но обработка массивов - это довольно сложная и обширная тема. Поэтому создание инструмента, позволяющего упростить обработку массивов - достойная задача для любого программиста. И хотя библиотека AksiArrays не претендует на полный охват всего спектра задач, связанных с обработкой массивов, она успешно справляется с наиболее распространенными из них, например: ввод-вывод массивов, получение агрегатных значений, выделение особых элементов массива и другие.
Поэтому автор выражает надежду, что проект "Библиотека AksiArrays" окажется небесполезным для уважаемого сообщества, во многих областях ускоряя процесс разработки приложений, использующих массивы. Также возможно, что любознательные люди, изучив код библиотеки, смогут составить себе представление о пользовательских классах объектов и методах работы с ними.


Вернуться к обсуждению:
Авторские программы, библиотеки, надстройки и шаблоны VBA
4
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2014, 17:33
Готовые ответы и решения:

Программы на 1С и авторские права
На форуме много сильных программистов, полагаю, что кто-то пишет и отдельные программы. Интересует...

Поменять авторские права в описании программы
Народ подскажите как поменять авторские права в описании программы, срочно надо. Пож-та

Полезные коды и авторские программы на Lisp
Расскажите, пожалуйста, что на лиспе пишите? вкратце, хотя бы. Очень интересно. Понятно, что...

Шаблоны и динамические библиотеки
Зачем им динамические реализации, там ведь одни шаблоны и достаточно заголовочных файлов?(Boost...

254
25.06.2014, 17:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2014, 17:33
Помогаю со студенческими работами здесь

Где хранятся шаблоны во время выполнения программы?
Где хранятся шаблоны во время выполнения программы? и если у меня если: template<typename T>...

Шаблоны проектирования для смены языка программы.
Требуется создать библиотеку для смены языка пользовательского интерфейса программ. В принципе,...

Хранить шаблоны документов в базе и выводить данные в эти шаблоны
Доброго времени суток. Интересует вопрос: мне необходимо формировать вордовские документы по...

Библиотеки программы
Знаю, что подобные темы обсуждались, но ничего путного не нашел. Написал программу CLR, но...

Чем отличаются шаблоны HTML и шаблоны WordPress
В чём различие между шаблонами HTML и WordPress. Кроме того, что создаются они разными способами....

Библиотеки для программы
Какие библиотеки нужно подключить? #include "stdafx.h" #include <iostream> using namespace...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru