|
|
|
| Ячейка сод. параметры для пользовательской процедуры ( sub1), кнопке назначен вызов этой процедуры ... call sub1(парам1....парамN). Как передать парам. из ячейки рабочего листа?
Заранее благодарен.... | |
|
| |
|
|
|
| Предположим, что в ячейке "A1" содержатся параметры для процедуры myMacros, например : Текст;10 Тогда, в модуле этого листа, Вы можете расположить :
Private Sub CommandButton1_Click() 'MS Excel 2000 и старше
If Not IsEmpty([A1]) Then
vParams = Split([A1], ";")
If UBound(vParams) = 1 Then
If IsNumeric(vParams(1)) = True Then
myMacros CStr(vParams(0)), CLng(vParams(1))
End If
End If
Else
MsgBox "Ячейка не содержит информации", vbCritical, ""
End If
End Sub
Private Sub myMacros(iText As String, iCount As Long)
Dim iCounter As Long
For iCounter = 1 To iCount
MsgBox iText & iCounter, vbOKOnly, ""
Next
End Sub
|
Если же Вы абсолютно уверены в правильности и корректности заполнения нужной ячейки, то можно использовать что-то вроде нижеопубликованного варианта :
Private Sub CommandButton1_Click() 'MS Excel 2000 и старше
myMacros Split([A1], ";")
End Sub
Private Sub myMacros(ParamArray Argument())
Dim iCounter As Long
For iCounter = 1 To CLng(Argument(0)(1))
MsgBox Argument(0)(0) & iCounter, vbOKOnly, ""
Next
End Sub
|
| |
|
| |
|
|
|
| Огромное спасибо!
Рассматривал, Ваш вариант как идею.
Хотел "слепить" целиком строку вызова в проц. по клику. Хоти не уверен , что это возможно..
выдаеттся что-то типа "объект 'имя_(парам_)' не найден "
С увж. Виктор | |
|
| |
|
|
|
| Виктор, Если это допустимо, то можно создать процедуру без параметров и анализировать данные уже непосредственно в этой процедуре. В качестве примера используется событие Worksheet_BeforeDoubleClick которое вызывается двойным кликом мышки и которое необходимо разместить в модуле нужного рабочего листа.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$A$1" Then 'MS Excel 2000 и старше
If Not IsEmpty(Target) Then
Dim iText As String, vParams As Variant
Dim iCounter As Long, iCount As Long ''
vParams = Split(Target, ";")
If UBound(vParams) = 1 Then
If IsNumeric(vParams(1)) = True Then
iText = CStr(vParams(0))
iCount = CLng(vParams(1))
For iCounter = 1 To iCount
MsgBox iText & iCounter, vbOKOnly, ""
Next
End If
End If
Else
MsgBox "Ячейка не содержит информации", vbCritical, ""
End If
End If
End Sub
|
| |
|
| |