我一直在使用下面的代码(不是我的代码)成功让用户打开演示文稿,并从标题幻灯片中,能够从他们计算机上的任何位置选择.txt文件,并让Powerpoint将文本导入Powerpoint,创建符合我设置的主幻灯片格式的幻灯片。
Sub AddSlides(text As String)
Dim Pre As Presentation
Dim Sld As Slide
Set Pre = ActivePresentation
Set Sld = Pre.Slides.Add(Index:=Pre.Slides.Count + 1, Layout:=1)
Sld.Shapes(1).TextFrame.TextRange = text
End Sub
Sub ReadFile(sFileName As String)
Dim iFileNum As Integer
Dim sBuf As String
' edit this:
'sFileName = "test.csv"
' does the file exist? simpleminded test:
If Len(Dir$(sFileName)) = 0 Then
Exit Sub
End If
iFileNum = FreeFile()
Open sFileName For Input As iFileNum
Do While Not EOF(iFileNum)
Line Input #iFileNum, sBuf
AddSlides (sBuf)
Loop
' close the file
Close iFileNum
End Sub
Sub SelectFile()
Dim In_file As Variant
Dim dlgOpen As FileDialog
Set dlgOpen = Application.FileDialog(Type:=msoFileDialogOpen)
dlgOpen.AllowMultiSelect = False
If dlgOpen.Show = -1 Then
In_file = dlgOpen.SelectedItems.Item(1)
ReadFile (In_file)
End If
End Sub
但是,现在我想处理各个部分,有效地创建标题和结论幻灯片。第1部分将包含标题幻灯片和按钮,供用户选择其.txt文件。第2节将由一张幻灯片组成,该幻灯片结束了演示文稿。我的问题是,当代码从.txt文件生成幻灯片时,它会在第2节中的结论幻灯片之后而不是在第1部分中的标题幻灯片之后放置它们。
我已经研究过各种代码,用于处理从外部文件导入/插入的部分和代码,并且没有成功地使用它们来实现这一点。
虽然我希望在第一张和最后一张幻灯片之间生成的幻灯片数量是可变的,但我可以指定在更可行的情况下可以生成多少张幻灯片。如果确实需要指定,我也可以先创建幻灯片,然后使用.txt文件中的文本填充它们,如果这是一个更可行的选项。
感谢任何帮助。
注意:当前代码将文本导入限制为每张幻灯片上的单行。如果有一种简单的方法可以将每个幻灯片包含2行 - 这将非常有用。
好的,我将从放置新幻灯片的位置开始。您需要更改addSlides函数,以便将所有幻灯片放在结论幻灯片的位置。这很容易,您只需更改索引即可
Index:=Pre.Slides.Count + 1
至
Index:=Pre.Slides.Count
使addSlides功能如下:
Sub AddSlides(text As String)
Dim Pre As Presentation
Dim Sld As Slide
Set Pre = ActivePresentation
Set Sld = Pre.Slides.Add(Index:=Pre.Slides.Count, Layout:=1)
Sld.Shapes(1).TextFrame.TextRange = text
End Sub
在第二个问题上,每张幻灯片获得两行文本,这更加困难。您需要读取每一行,每次到达第二行时,添加页面,然后重置保持变量。像下面这样的东西应该工作:
Sub ReadFile(sFileName As String)
Dim iFileNum As Integer
Dim sBuf As String
Dim bFlag As Boolean
Dim sHolder As String
' edit this:
'sFileName = "test.csv"
' does the file exist? simpleminded test:
If Len(Dir$(sFileName)) = 0 Then
Exit Sub
End If
iFileNum = FreeFile()
Open sFileName For Input As iFileNum
bFlag = False
Do While Not EOF(iFileNum)
If bFlag = False Then
Line Input #iFileNum, sBuf
holder = sBuf
bFlag = True
Else
Line Input #iFileNum, sBuf
holder = holder & vbCrLf & sBuf
addSlides (holder)
holder = ""
bFlag = False
End If
Loop
' close the file
Close iFileNum
End Sub