ich heiße Thomas, bin schon ein IT-Opa (ich fummelte noch mit Akustikkopplern rum) und habe auch auf Office schon so einiges zusammengebastelt. Ich spreche nicht nur MySQL und PHP


So wie jetzt und darum brauche ich mal eine zündende Idee, wie ich folgendes Problem lösen kann:
Ich versuche mittels PowerPoint und MSAccess ein dynamisches Präsentationssystem zusammen zu bauen, dessen Inhalte dann der Öffentlichkeit gezeigt werden. Ziel ist es, das für den, der es befüllen soll möglichst einfach zu machen. Das soll mittels einer Access-Datenbank realisiert werden. Alle dort eingegebenen Daten werden von der PowerPoint-Präsentation abgegriffen und dargestellt. Da wir der "Corporate Identity" unterliegen, gibt es Vorgaben, wie Texte aufbereitet dargestellt werden, wo Bilder platziert werden, alles also sehr überschaubar.
Ich habe ein VBA-Script geschrieben, und eine Präsentation erstellt (noch mit zwei Feldern). Wenn ich das VBA-Script Schritt für Schritt durchlaufen lasse, dann funktioniert auch das Ändern des Textes in der einen Folie. Lasse ich das Script jedoch selbstständig laufen, funktioniert es nicht.
Hier mal das Script (nicht wundern, da sind noch Reste aus meinen Versuchen drin):
- Code: Alles auswählen
Public Sub getData()
On Error GoTo UserForm_Initialize_Err
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim count As Integer
Dim actnum As Integer
Dim text1 As String
Dim headline As String
Dim PPT As PowerPoint.Application
Dim pres As PowerPoint.Presentation
Dim newslide As PowerPoint.Slide
Dim slideCtr As Integer
Dim tb As PowerPoint.Shape
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=c:\dynPres\testdata.accdb"
rst.Open "SELECT * FROM presentationdata;", _
cnn, adOpenStatic
count = rst.RecordCount
rst.MoveFirst
Set PPT = CreateObject("PowerPoint.Application")
PPT.Visible = True
Set pres = PPT.Presentations.Application.ActivePresentation
slideCtr = 1
Set newslide = pres.Slides(1)
Do
text1 = rst!text1
headline = rst!headline
Set tb = newslide.Shapes("headline")
tb.TextFrame.TextRange.Characters.Text = headline
Set tb = newslide.Shapes("text.full")
tb.TextFrame.TextRange.Characters.Text = text1
rst.MoveNext
'we need to sleep this a while...
Sleep 1000 ' to make your macro "sleep" for one second ( 1000 milliseconds )
'actnum = actnum + 1
'If actnum = count Then
' actnum = 0
' rst.MoveFirst
'End If
Loop Until rst.EOF
UserForm_Initialize_Exit:
On Error Resume Next
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
Exit Sub
UserForm_Initialize_Err:
MsgBox Err.Number & vbCrLf & Err.Description, vbCritical, "Error!"
Resume UserForm_Initialize_Exit
End Sub
Ich werde versuchen, die Präsentation anzuhängen, die ich testweise erstellt habe, ich hoffe, es gelingt.
Wie es scheint, ist der Code zu schnell und die Folie wird nicht aktualisiert, darum zeigt sie die gewünschten Inhalte nicht an.
Nun konkret die Frage:
Unter Access gibt es die Funktion ".Refresh" und ".Requery" in beiden Fällen wird der Inhalt des Feldes aktualisiert. ".Requery" fällt in PowerPoint ja weg, bleibt also nur ein ".Refresh" Finde ich in PP aber nicht.
Gibt es einen ähnlichen Befehl, oder würdet Ihr einen anderen Weg gehen, den ich nicht sehe?
Mit Dank,
BiMeTal