2016-07-25 8 views
-1

Я пытаюсь поместить макрос в форму из vba, но я получил эту ошибку «Недопустимое использование свойства», почему?
Класс CContainer Код:Недопустимое использование ошибки свойства в Shape.OnAction

Option Explicit 
Sub CreateContainer() 
Dim s As Shape ' shape container 
Dim t As Shape 'text container 
Dim sr As Variant 'container for grouping 
Dim w As Worksheet 
Set w = ActiveWorkbook.Worksheets(1) 
Set s = w.Shapes.AddShape(msoShapeRectangle, 10, 10, 100, 100) 
With s 
s.Fill.ForeColor.RGB = RGB(255, 255, 255) 
s.Line.ForeColor.RGB = RGB(100, 100, 100) 
s.Line.DashStyle = msoLineDash 
s.Line.Style = msoLineSingle 
s.Line.Weight = 0.5 
s.Name = "ShapeExample" 
End With 
Set t = w.Shapes.AddTextbox(msoTextOrientationHorizontal, s.Left + 10, s.Top + 10, s.Width - 20, 20) 
With t 
t.Line.ForeColor.RGB = RGB(100, 100, 100) 
t.Line.DashStyle = msoLineDash 
t.TextFrame.Characters.Text = "Connector" 
t.TextFrame.Characters.Font.Size = 10 
t.TextFrame.HorizontalAlignment = xlHAlignCenter 
t.Name = "TextShapeExample" 
End With 
Set sr = w.Shapes.Range(Array("ShapeExample", "TextShapeExample")).Group 
sr.Name = "ContainerExample" 

t.OnAction "MsgCall" '<-- here the error occurs 
End Sub 

Sub MsgCall() 
MsgBox "Hello There" 
End Sub 

и вот модуль, где я хочу назвать его:

Option Explicit 

Sub example() 
Dim connector As CContainer 
Set connector = New CContainer 
connector.CreateContainer 

End Sub 
+0

У вас отсутствует знак равенства? t.OnAction = "MsgCall" –

+0

Нет, это приведет к ошибке 'application defined/object", но спасибо @CodyG. – Jey

+0

Ошибка определения приложения/объекта из набора sr = w.Shapes.Range (Array («ShapeExample», «TextShapeExample»)). Групповая строка. –

ответ

0

Я изменил код немного к этому:

With Worksheets(1).Shapes(1) 

.OnAction "MsgCall" '<-- no more error here 

End With 

Теперь я получаю другую ошибку: Grouping is disabled for selected shapes за этот код:

Set sr = w.Shapes.Range(Array("ShapeExample", "TextShapeExample")).Group 
+0

Я все еще получаю ту же ошибку, даже меняя свой код за то, что вы мне предложили, 'invalid use of property' – Jey

+1

Я нашел ответ, но это не то, что я хотел, проблема в том, что процедура не может быть вызвана (по крайней мере, в моем примере) из того же модуля модуля, я переместил подпрограмму 'MsgCall' в новый std-модуль, а затем я изменил свой код в строке-ошибке, изменяя его для этого 'OnAction =" MsgCall "', а затем он работает, Спасибо за вашу помощь, так как он помогает мне найти ответ – Jey