ПравилаРегистрацияВход
НАВИГАЦИЯ

Чат kullun

Текущее время 6 мая 2024, 04:39
АВТОРСООБЩЕНИЕ
kullun
Хозяин
Сейчас нет на сайте
Регистрация: 6.07.2012
7 марта 2022, 21:36
kullun
Хозяин
Сейчас нет на сайте
Регистрация: 6.07.2012
21 июля 2018, 20:32
Запись данных в реестр

> Root Key. Строка, представляющая ветвь реестра, к которой обращается функция.
Эта строка может принимать одно из следующих значений:
• HKEY_CLASSES_ROOT;
• HKEY_CURRENT_USER;
• HKEY_LOCAL_MACHINE;
• HKEY_USERS;
• HKEY_CURRENT_CONFIG.
> Path. Полный путь в реестре. Если пути не существует, он будет создан.
> RegEntry. Название раздела реестра, в который записывается значение. Если раз-
дела не существует, он будет добавлен в реестр.
> RegVal. Значение, которое записывается в реестр.


Sub Workbook_Open()
RootKey = "hkey_current_user"
Path = "software\microsoft\of fice\15.0\excel\LastStarted,?
RegEntry = "DateTime"
RegVal = Now()
If WriteRegistry(RootKey, Path, RegEntry, RegVal) Then
msg = RegVal & " сохранено в реестре."
Else msg = "произошла ошибка"
End If
MsgBox msg
End Sub

Если вы решили воспользоваться системным реестром для хранения и проверки на-
строек приложений Excel, не стоит обращаться к функциям Windows API. Лучше вос-
пользоваться функциями VBA GetSetting и SaveSetting. Эти функции намного про-
ще в применении, чем функции Windows API.

Эти две функции описаны в соответствующем разделе справочной системы, поэтому
здесь они подробно не рассматриваются. Важно понимать, что они работают только со
следующим разделом реестра:
HKEY_CURRENT_USER\SoftwareWB and VBA Program Settings
Другими словами, с помощью этих функций можно управлять данными только одной вет-
ви реестра, в которой сохраняются базовые настройки Excel. Данные функции лучше ис-
пользовать для хранения сведений о приложении Excel между сеансами его выполнения.
kullun
Хозяин
Сейчас нет на сайте
Регистрация: 6.07.2012
21 июля 2018, 20:29
Чтение и запись параметров системного реестра

Private Declare PtrSafe Function RegOpenKeyA Lib "ADVAPI32.DLL" _
(ByVal hKey As Long, ByVal sSubKey As String, _
ByRef hkeyResult As Long) As Long
Private Declare PtrSafe Function RegCloseKey Lib "ADVAPI32.DLL" _
(ByVal hKey As Long) As Long
Private Declare PtrSafe Function RegSetValueExA _
Lib "ADVAPI32.DLL" (ByVal hKey As Long, ByVal
sValueName As String, _
ByVal dwReserved As Long, ByVal dwType As Long, _
ByVal sValue As String, ByVal dwSize As Long) As Long
Private Declare PtrSafe Function RegCreateKeyA Lib _
"ADVAPI32.DLL" (ByVal hKey As Long, ByVal sSubKey As String,
ByRef hkeyResult As Long) As Long
Private Declare PtrSafe Function RegQueryValueExA Lib _
"ADVAPI32.DLL" (ByVal hKey As Long, ByVal
sValueName As String, ByVal dwReserved As Long, _
ByRef lValueType As Long, _
ByVal sValue As String, ByRef IResultLen As Long) As Long
kullun
Хозяин
Сейчас нет на сайте
Регистрация: 6.07.2012
21 июля 2018, 20:23
Вызов функций Windows API

Одна из самых важных возможностей VBA — поддержка функций, которые хранятся
в динамически подключаемых библиотеках (Dynamic Link Libraries — DDL).

Определение файловых ассоциаций


Функция GetExecutable вызывает функцию Windows API, чтобы получить полный
путь к приложению, связанному с указанным файлом.

Объявления функций Windows API должны находиться в верхней части модуля VBA.

Private Declare PtrSafe Function FindExecutableA Lib _
Hshell32.dll" (ByVal lpFile As String, ByVal _
lpDirectory As String, ByVal IpResult As String) As Long
Function GetExecutable(strFile As String) As String
Dim strPath As String
Dim intLen As Integer
strPath = Space(255)
intLen = FindExecutableA (strFile, "\,f, strPath)
GetExecutable = Trim(strPath)
End Function
kullun
Хозяин
Сейчас нет на сайте
Регистрация: 6.07.2012
21 июля 2018, 19:54
Сортировка диапазона


Function SORTED(Rng)
Dim SortedDataO As Variant
Dim Cell As Range
Dim Temp As Variant, i As Long, j As Long
Dim NonEmpty As Long
' Передача данных в массив SortedData
For Each Cell In Rng
If Not IsEmpty(Cell) Then
NonEmpty = NonEmpty + 1
ReDim Preserve SortedData(1 To NonEmpty)
SortedData(NonEmpty) = Cell.Value
End If
Next Cell
1 Сортировка массива
For i = 1 To NonEmpty
For j = i + 1 To NonEmpty
If SortedData(i) > SortedData(j) Then
Temp = SortedData(j)
SortedData(j) = SortedData(i)

SortedData(i) = Temp
End If
Next ]
Next l
' Транспонирование массива и его возврат
SORTED = Application.Transpose(SortedData)
End Function

Функция SORTED начинает свою работу с создания массива SortedData. Этот массив
содержит все непустые значения из массива аргументов. Затем выполняется сортировка
массива пузырьковым методом. И поскольку массив является горизонтальным, его нужно
транспонировать перед возвратом функцией.
kullun
Хозяин
Сейчас нет на сайте
Регистрация: 6.07.2012
21 июля 2018, 19:50
Переопределение двумерного МАССИВА

ReDim V (1 To RCount, 1 To CCount)
ReDim ValArray(l To 2, 1 To CellCount)
kullun
Хозяин
Сейчас нет на сайте
Регистрация: 6.07.2012
21 июля 2018, 19:42
Возвращение максимального значения среди всех рабочих листов

Функция MAXALLSHEETS, показанная ниже, принимает аргумент (одна ячейка) и воз-
вращает максимальное значение в этой ячейке во всех рабочих листах данной книги.

Function MAXALLSHEETS(cell)
Dim MaxVal As Double
Dim Addr As String
Dim Wksht As Object
Application.Volatile
Addr = cell.Range("A1M).Address
MaxVal = -9.9E+307
For Each Wksht In cell.Parent.Parent.Worksheets
If Wksht.Name = cell.Parent.Name And _
Addr = Application.Caller.Address Then
' исключение циклической ссылки
Else
If IsNumenc (Wksht.Range (Addr) ) Then
If Wksht.Range(Addr) > MaxVal Then _
MaxVal = Wksht.Range(Addr).Value
End If
End If
Next Wksht
If MaxVal = -9.9E+307 Then MaxVal = 0
MAXALLSHEETS = MaxVal
End Function

В цикле For Each для доступа к рабочей книге используется следующее выражение:
cell.Parent.Parent.Worksheets
“Родителем” ячейки является рабочий лист, “родителем” рабочего листа — рабочая
книга. Следовательно, цикл For Each обходит все рабочие листы в книге. Первый опе-
ратор I f в цикле проверяет, содержит ли ячейка, которая проверяется в данный момент,
функцию. Если содержит, то ячейка игнорируется во избежание циклической ссылки.
kullun
Хозяин
Сейчас нет на сайте
Регистрация: 6.07.2012
21 июля 2018, 19:35
Функция SHEETOFFSET

Function SHEETOFFSET(Offset As Long, Optional Cell As Variant)
' Возвращение содержимого ячейки по ссылке на нее
Dim Wkslndex As Long, WksNum As Long
Dim wks As Worksheet
Application.Volatile
If IsMissing(Cell) Then Set Cell = Application.Caller
WksNum = 1
For Each wks In Application.Caller.Parent.Parent.Worksheets
If Application.Caller.Parent.Name = wks.Name Then
SHEETOFFSET = Worksheets(WksNum +
Offset).Range(Cell(1).Address)
Exit Function
Else
WksNum = WksNum + 1
End If
Next wks
End Function
kullun
Хозяин
Сейчас нет на сайте
Регистрация: 6.07.2012
21 июля 2018, 19:33
Универсальная функция

Function STATFUNCTION(rng, op)
Select Case UCase(op)
Case "СУММ"
STATFUNCTION =
Case "СРЗНАЧ"
STATFUNCTION =
Case "МЕДИАНА"
STATFUNCTION =
Case "МОД"
STATFUNCTION =
Case "СЧЕТ"
STATFUNCTION =
Case "MAKC"
STATFUNCTION =
Case "МИН"
STATFUNCTION =
Case "ДИСП"
STATFUNCTION =
Case "СТАНДОТКЛОН
STATFUNCTION =
WorksheetFunction.Sum(rng)
WorksheetFunction.Average(rng)
WorksheetFunction.Median(rng)
WorksheetFunction.Mode(rng)
WorksheetFunction.Count(rng)
WorksheetFunction.Max(rng)
Worksheet Function. M m (rng)
WorksheetFunction.Var(rng)
I
WorksheetFunction.StDev(rng)
Case Else
STATFUNCTION = CVErr(xlErrNA)
End Select
End Function
kullun
Хозяин
Сейчас нет на сайте
Регистрация: 6.07.2012
21 июля 2018, 19:30
Возвращение n-го элемента из строки

Function ExtractElement(Txt, n, Separator) As String
' Возвращает n-й элемент текстовой строки, где
' элементы разделены указанным символом
Dim AllElements As Variant
AllElements = Split(Txt, Separator)
ExtractElement = AllElements(n - 1)
End Function

>tx t — текстовая строка, из которой извлекается подстрока (это может быть сим-
вольная строка или ссылка на ячейку);
> п — целое число, представляющее номер извлекаемого элемента;
> Separator — отдельный символ, используемый как разделитель.

В этой процедуре используется VBA-функция S plit, возвращающая массив констант,
из которого состоит текстовая строка. Массив начинается с нулевого элемента (а не с пер-
вого), поэтому текущий элемент имеет индекс п-1.
На страницу  1, 2, 3, 4 ... 12, 13, 14 
Часовой пояс: GMT + 4
Мобильный портал, Profi © 2005-2023
Время генерации страницы: 0.035 сек
Общая загрузка процессора: 27%
SQL-запросов: 3
Rambler's Top100