У меня вопрос. Есть готовый макрос, который действует только на 1 выделенную ячейку. Что нужно сделать, чтобы он работал на множество ячеек, например, на весь столбец?
Может есть какая-нибудь функция в Excel, которая бы выполняла макрос в каждой ячейке заданной области.
я не хочу менять сам макрос. Он большой и делал его не я.
Мне надо чтобы он выполнялся не в одной ячейке, а сразу или последовательно в нескольких.
На выполнение макроса назначено сочетание клавиш. И у меня нет времени обрабатывать каждую ячейку. этот процесс я хочу автоматизировать, но не знаю как
Это не так срашно, как ты думаешь. Всего лишь нужно изменить обращение - на обращение к диапазону(как сказал [root]). Или если хочешь можно сделать циклом.
Но в любом случае тебе придется залесть в код.
' Пример обращения к функциям DLL GetFIOPadegFSAS и GetNominativePadeg
' Обращение к другим функциям выполняется аналогично
' Copyright (c) 2001 Gennady Pokatashkin e-mail: pgl@tut.by
' Sergey Plahov e-mail: S.Plahov@vaz.ru
Option Explicit
' Функция склонения ФИО с автоматическим определением пола по отчеству
' Параметры: pFIO - фамилия, имя, отчество
' nPadeg - падеж (допустимые значения: 1..6)
' pResult - буфер результата
' nLen - размер буфера (после преобразования - длина результата)
' Значение: 0 - успешное завершение
' -1 - недопустимое значение падежа
' -3 - результат не поместился в буфере
Private Declare Function GetPadeg Lib "Padeg.dll" Alias "GetFIOPadegFSAS" _
 ByVal pFIO As String, ByVal nPadeg As Long, ByVal pResult As String, ByRef nLen As Long) As Integer
' Функция восстановления именительного падежа
' Параметры: pFIO - фамилия, имя, отчество
' pResult - буфер результата
' nLen - размер буфера (после преобразования - длина результата)
' Значение: 0 - успешное завершение
' -3 - результат не поместился в буфере
Private Declare Function GetNominativePadeg Lib "Padeg.dll" _
 ByVal pFIO As String, ByVal pResult As String, ByRef nLen As Long) As Integer
' Функция преобразования cFIO в падеж nPadeg
Public Function MakePadeg(ByVal cFIO As String, ByVal nPadeg As Long) As String
Dim tmpS As String
Dim nLen As Long
Dim RetVal As Integer
If Len(cFIO) = 1 Then Exit Function
nLen = 255
tmpS = String(nLen, 0)
RetVal = GetPadeg(cFIO, nPadeg, tmpS, nLen)
If RetVal = -1 Then MsgBox "Недопустимое значение падежа - " & "" & nPadeg & "", , "Склонение ФИО"
MakePadeg = Mid(tmpS, 1, nLen)
End Function
' Функция восстановления именительного падежа
Public Function Nominative(ByVal cFIO As String) As String
Dim tmpS As String
Dim nLen As Long
Dim RetVal As Integer
nLen = 255
tmpS = String(nLen, 0)
RetVal = GetNominativePadeg(cFIO, tmpS, nLen)
Nominative = Mid(tmpS, 1, nLen)
End Function
' Макросы преобразования ФИО в активной ячейке в соответствующий падеж
Public Sub Именительный()
Cells(ActiveCell.Row, ActiveCell.Column) = Nominative(ActiveCell)
End Sub
Public Sub Родительный()
Cells(ActiveCell.Row, ActiveCell.Column) = MakePadeg(ActiveCell, 2)
End Sub
Public Sub Дательный()
Cells(ActiveCell.Row, ActiveCell.Column) = MakePadeg(ActiveCell, 3)
End Sub
Public Sub Винительный()
Cells(ActiveCell.Row, ActiveCell.Column) = MakePadeg(ActiveCell, 4)
End Sub
Public Sub Творительный()
Cells(ActiveCell.Row, ActiveCell.Column) = MakePadeg(ActiveCell, 5)
End Sub
Public Sub Предложный()
Cells(ActiveCell.Row, ActiveCell.Column) = MakePadeg(ActiveCell, 6)
End Sub
Александр ты гений!
А вот возможно сделать таким образом, чтобы перевод в выбранный падеж осуществлялся автоматически в пустую ячейку. Например из А2 (ФИО) в B2 (Пустая, в родительный падеж) и из А3 в B3 и т.п. Таким образом, я пишу в А2 любое ФИО, а В2 мне всё автоматом переводит. Т.е. я так понимаю это должна быть некая формула в B2 ?