如何检查PowerPoint文档中是否所有文本框都已填写

问题描述 投票:0回答:1

我有一个PowerPoint文档,用户可以在其中将文本输入到多个TextBox中,总共超过6张幻灯片。在最后一张幻灯片上,我想检查用户是否已填写演示文稿中的每个文本框

我曾尝试在Internet上使用许多代码段并对其进行修改,但是我是一个完整的VBA新手,而且令人惊讶的是,它没有成功。 :')非常感谢您在此任务上的帮助。

如果可以检查用户是否在每个文本框中输入至少4个字符,那就更好了。但是我不知道如何开始编程...

这是我的代码,它没有显示错误,但是单击最后的CheckBox时没有任何反应。

Public Sub CheckTextBox()
    Dim fTextBox As Object
    For Each Slide In ActivePresentation.Slides
    For Each fTextBox In ActivePresentation.Slides
        If TypeName(fTextBox) = "TextBox" Then
            If fTextBox.Text = "" Then
                MsgBox "Please make sure to fill out all fields!"
            End If
        End If
    Next
    Next
End Sub


'When ticking this CheckBox, the MsgBox should show up

Private Sub CheckBox1_Click()
CheckTextBox
End Sub

非常感谢你们的帮助。

vba powerpoint powerpoint-vba
1个回答
0
投票

您的内部For循环是错误的,您需要对幻灯片的所有Shapes进行循环,相反,您需要对所有幻灯片进行另一个循环。

基本上,您放置在幻灯片上的所有对象都是Shapes。如果使用TypeName,将得到Shape。要区分单个形状类型,请使用形状对象的属性type。可以在https://docs.microsoft.com/de-de/office/vba/api/office.msoshapetype找到类型列表-文本框的类型为msoTextBox(17)。

要获取形状的文本,请使用形状的属性TextFrame.TextRange.Text

请尝试以下代码(它已经检查了至少4个字符的长度)。它会在第一个少于4个字符的文本框中停止(否则,您将为每个文本框得到一个MsgBox)并选择它。

Public Sub CheckTextBox()
    Dim sh As Shape, slide As slide
    For Each slide In ActivePresentation.Slides
        For Each sh In slide.Shapes
            Debug.Print TypeName(sh)
            If sh.Type = msoTextBox Then
                If Len(sh.TextFrame.TextRange.Text) < 4 Then
                    MsgBox "Please make sure to fill out all fields!"
                    slide.Select
                    sh.Select
                    Exit For
                End If
            End If
        Next
    Next

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.