我有一个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
非常感谢你们的帮助。
您的内部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