Vb.net 从模块返回值

Vb.net 从模块返回值,vb.net,Vb.net,我似乎无法在例程结束时返回计数器值 Sub CountCheckBoxes(sldTemp As Slide) Dim counter As Integer Dim shpTemp As Shape For Each shpTemp In sldTemp.Shapes If shpTemp.Type = msoOLEControlObject Then If TypeName(shpTemp.OLEFormat.Object) =

我似乎无法在例程结束时返回计数器值

Sub CountCheckBoxes(sldTemp As Slide)
    Dim counter As Integer
    Dim shpTemp As Shape
    For Each shpTemp In sldTemp.Shapes
        If shpTemp.Type = msoOLEControlObject Then
            If TypeName(shpTemp.OLEFormat.Object) = "CheckBox" Then
                If shpTemp.OLEFormat.Object.Value = True Then
                    counter = counter + 1             
                End If
            End If
        End If
    Next
    Return counter
End Function
编辑 新代码:问题是当我键入返回计数器然后按enter键时。我使用此函数的原因是计算幻灯片上有多少复选框为真,然后返回值:

Function CountCheckBoxes(sldTemp As Slide) As Integer
    Dim counter As Integer
    Dim shpTemp As Shape

    For Each shpTemp In sldTemp.Shapes
        If shpTemp.Type = msoOLEControlObject Then
           If TypeName(shpTemp.OLEFormat.Object) = "CheckBox" Then
              If shpTemp.OLEFormat.Object.Value = True Then
                 counter = counter + 1
              End If
           End If
        End If
    Next
    Return counter 
End Function
为了好玩:

Function CountCheckBoxes(sldTemp As Slide) As Integer
    Return sldTemp.Shapes.Count(Function(s) s.Type = msoOLEControlObject AndAlso TypeName(s.OLEFormat.Object) = "CheckBox" AndAlso s.OLEFormat.Object.Value)
End Function
为了好玩:

Function CountCheckBoxes(sldTemp As Slide) As Integer
    Return sldTemp.Shapes.Count(Function(s) s.Type = msoOLEControlObject AndAlso TypeName(s.OLEFormat.Object) = "CheckBox" AndAlso s.OLEFormat.Object.Value)
End Function

您需要将方法从
子项
更改为
函数
。另外,您应该让它指定返回类型,比如
函数countcheckbox(sldTemp作为幻灯片)作为Integer
顺便说一句,整个方法体可以使用LINQ写在一行中:
返回sldTemp.Shapes.Count(函数(shptem)shptmp.type=msoolectrolobject和Also TypeName(shpTemp.OLEFormat.Object)=“CheckBox”还有shpTemp.OLEFormat.Object.Value)
。至少,当您只需要一个带有三个条件的语句时,不要使用三个单独的
If
语句:
如果SHPTTEMP.Type=msoOLEControlObject和ALSO TypeName(SHPTTEMP.OLEFormat.Object)=“CheckBox”和ALSO SHPTTEMP.OLEFormat.Object
。需要注意的一点是,如果
sldTemp.Shapes
实现了
IEnumerable
而不是
IEnumerable(Of T)
,那么您可能也需要在那里加入一个
Cast
.Shapes.Cast(Of Shape)().Count(
@Stevendogart我确实将其更改为函数和指定的返回类型,但它仍然给我一个错误“预期:声明结束突出显示返回计数器如果它仍然不起作用,则表明您做得不对。向我们显示您现在的代码,并指定错误发生的确切位置。您需要将方法从
更改为
函数
。此外,您应该让它指定返回类型,如
函数计数复选框(sldTemp作为幻灯片)顺便说一句,作为整数,整个方法体可以使用LINQ写入一行:
返回sldTemp.Shapes.Count(函数(shpTemp)shpTemp.Type=msoOLEControlObject和also TypeName(shpTemp.OLEFormat.Object)=“CheckBox”和also shpTemp.OLEFormat.Object.Value)
。当您只需要一个带有三个条件的语句时,至少不要使用三个单独的
If
语句:
如果shpTemp.Type=msoOLEControlObject和also TypeName(shpTemp.OLEFormat.Object)=“CheckBox”还有一点需要注意的是,如果
sldTemp.Shapes
实现了
IEnumerable
而不是
IEnumerable(Of T)
,那么你可能也需要在那里加入一个
Cast
.Shapes.Cast(Of Shape)()。计数(
@Stevendogart我确实将其更改为函数和指定的返回类型,但它仍然给我一个错误“expected:end of statement”突出显示return Counter如果它仍然不起作用,则表明您做错了。向我们展示您现在的代码,并指定错误发生的确切位置。此代码不可能完成OP尝试执行的所有操作,它太简单了!;)此代码不可能完成OP尝试执行的所有操作,它太简单了!;)