Hej Det är inte speciellt hemligt eller svårt, har skrivit enkla "rapportgeneratorer" i Excel VBA som skapar PPT presentationer. Om Excel (eller vilket office program som helst) ändå är inblandat så skriv koden i VBA, att gå via VB6 känns som en omväg? Hej Testade just, ja, det funkar att göra på samma sätt som i exemplet ovan fast i VB6, du får referera MS PPT 10 och MS Office 10 (eller vilken version av office kunden kör) i ditt projekt. Tycker dock fortfarande det är onödigt tillkrånglat med VB6, svårare att göra ändringar senare för någon som inte kan så mycket och prestanda är väl knappast kritiskt för en sån här grej? Hej Mattias En liten fundering bara... Om du ändå för över informationen till Excel först, kan du inte göra diagrammet i Excel och länka in till PowerPoint? I det fallet behöver du bara uppdatera länken när data har ändrats. Hej Åsa Jag tror att jag har förstått ditt problem. I exemplet har jag använt shape-objektets egenskap "Namn" för att kunna hitta tillbaka till diagrammet om det redan finns. Om programmet inte hittar diagrammet läggs en ny bild till och ett nytt diagram skapas. Som du ser har jag använt "late binding" för MSGraph, du kan förståss välja "early binding" om du vill. Hej Åsa Jag har provkört i Powerpoint 2000 och 2002 och det går bra. Vilken version har du? Jag har powerpoint 2002 Ibland är ju felhanteringen minst sagt lite underlig... det kan ju vara fel på raden efter t.ex. Om du kör med late binding för MSGraph så måste du t.ex. deklarera konstanten xlPie som i mitt exempel, du har inte missat det? Hej Hej igen HejAutomatic Powerpoint generator VB 6
Jag försöker att göra ett program som använder en access databas samt excel filer till att skapa
Powerpoint presentation. Mitt problem är att jag hittar ingen information om hur jag öppnar diagram databladet (i PowerPoint) så att jag kan fylla den med information från excel. Finns det någon som har gjort detta skulle ni spara många timmars arbete för mig om ni delar med er av denna hemlighet.
Meningen med programet är att användaren skall göra minimalt i powerpoint allt skall styras från Visal Basic 6 och skall visa resultatet på slutet hur "Slide showen" blev samt spara filen som *.pps.Sv: Automatic Powerpoint generator VB 6
Om någon vill testköra, referera till Powerpoint först:
Office/VBA: verktyg => referenser => MS Powerpoint XX object library
VB6: Project => References => osv
Option Explicit
' ett grovt tillyxat demo
' mp 2004-10-04
Sub PPTDemo()
Dim app As PowerPoint.Application
Dim pres As PowerPoint.Presentation
Dim s As PowerPoint.Slide
Dim tbl As PowerPoint.Shape
Dim pic As PowerPoint.Shape
Dim rub As PowerPoint.TextFrame
Dim i As Integer
Set app = New PowerPoint.Application
app.Visible = msoTrue
Set pres = app.Presentations.Add(msoTrue)
With pres
If Not .HasTitleMaster Then .AddTitleMaster
.TitleMaster.HeadersFooters.Footer.Text = FormatDateTime(Now(), _
vbShortDate)
End With
For i = 1 To 3
Set s = pres.Slides.Add(i, ppLayoutBlank)
Set rub = s.Shapes.AddTextbox(msoTextOrientationHorizontal, 20, 20, 300, 30).TextFrame
rub.TextRange.Text = "RUBRIK " & i
rub.TextRange.Font.Bold = msoTrue
Set pic = s.Shapes.AddPicture("c:\winnt\winnt256.bmp", msoFalse, msoTrue, 20, 80)
Set tbl = s.Shapes.AddTable(2, 1, 20, 200, 100, 20)
With tbl.Table
.Cell(1, 1).Shape.TextFrame.TextRange.Text = "Rad 1"
.Cell(1, 1).Shape.TextFrame.TextRange.Text = "Rad 2"
End With
Next
pres.SaveAs "c:\temp\presentation.ppt"
' pres.SlideShowSettings.Run
End Sub
Tips: Om man är ovan vid Office objektmodellen är något du vet hur man gör i applikationen men inte i VBA, spela in ett makro och kolla VBA koden där. Sällan optimal men ger ett tips om vart man ska leta.Sv: Automatic Powerpoint generator VB 6
Jag vet att det blir en omväg att gå genom VB6 men jag måste ha den för alla ändringar som kommer
i de olika rapporterna. Meningen är att det skall bli ett program till att göra powerpoint presentationer och inte flera program genom excel.
Frågan var om det gick att genom VB 6 gå in i powerpoint och ändra information i diagram databladet.
Är detta möjligt?
Tack för ditt svar
JörgenSv: Automatic Powerpoint generator VB 6
Sv: Automatic Powerpoint generator VB 6
Jo det fungerar bra om man har en bild att sätta in, men i mitt exempel så skall
man hämta infomation från en sql databas om ett speciellt land och hur de olika sidorna
i Powerpoint skall se ut. Sen skall informationen till diagrammen komma ifrån olika excel filer.
Här är ett exempel på koden som gör att man kan uppdatera databladet i Powerpoint.
Set oSlide = oPres.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitleOnly)
Set oChart = oSlide.Shapes.AddOLEObject(150, 150, 480, 320, "MSGraph.Chart.8").OLEFormat.object
With oSlide.Shapes.Item(1).TextFrame.TextRange
.Text = "My Pie Chart"
.Font.Name = "Comic Sans MS"
.Font.Size = 48
End With
With oSlide.Shapes.Item(2)
oChart.Application.DataSheet.Cells.Clear
oChart.Application.DataSheet.Range("A1").Value = "666"
oChart.Application.DataSheet.Range("B1").Value = "777"
oChart.Application.DataSheet.Range("C1").Value = "888"
oChart.Application.DataSheet.Range("D1").Value = "999"
oChart.ChartType = xlPie
End With
Mitt problem är att komma tillbaka till samma fil och gå in i en färdig sida med diagram
och uppdatera informationen med nya siffror.
Kan du hjälpa mig med det?
Behöver du mer information så säg bara till
Tack för det du bidraget med hitintills
Jörgen NordahlSv: Automatic Powerpoint generator VB 6
/ÅsaSv: Automatic Powerpoint generator VB 6
Excel filerna kommer från ett produktions system (Quantum) och är indelade i de olika ländernas frågor och svar. I VB6 har jag gjort en databas som innehåller mer information som skall in i Powerpoint. Det är därför jag vill gå genom vb6 för att uppdatera mina powerpoint bilder. Kunden vill ha Poweroint diagram vilket gör att vi måste göra diagramen som finns i Poweroint och inte skapa en bild i excel och sedan föra över den till Powerpoint.
Vb6 skall även göra det lättare för användaren när det blir dax för uppdatering av diagramen.
Hoppas du har förståt mitt problem
MVH
Jörgen NordahlSv: Automatic Powerpoint generator VB 6
<code>
Sub Testa()
Dim oPres As Presentation
Dim oShp As Shape
Dim oSlide As Slide
Dim oChart As Object
Const xlPie = 5
Set oPres = ActivePresentation
Set oShp = GetShape("MittDiagram")
If oShp Is Nothing Then
Set oSlide = oPres.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitleOnly)
Set oShp = oSlide.Shapes.AddOLEObject(150, 150, 480, 320, "MSGraph.Chart")
oShp.Name = "MittDiagram"
oShp.OLEFormat.Object.ChartType = xlPie
With oSlide.Shapes.Item(1).TextFrame.TextRange
.Text = "My Pie Chart"
.Font.Name = "Comic Sans MS"
.Font.Size = 48
End With
End If
With oShp.OLEFormat.Object.Application.DataSheet
.Cells.Clear
.Range("A1").Value = "666"
.Range("B1").Value = "777"
.Range("C1").Value = "888"
.Range("D1").Value = "999"
End With
Set oChart = Nothing
Set oSlide = Nothing
Set oPres = Nothing
End Sub
Private Function GetShape(ByVal vsName As String) As Shape
Dim oSlide As Slide
Dim oShape As Shape
For Each oSlide In ActivePresentation.Slides
For Each oShape In oSlide.Shapes
If oShape.Name = vsName Then
Set GetShape = oShape
Exit For
End If
Next oShape
If Not GetShape Is Nothing Then Exit For
Next oSlide
Set oShape = Nothing
Set oSlide = Nothing
End Function
</code>Sv: Automatic Powerpoint generator VB 6
Nu har du nog slått huvudet på spiket.
Det är precis detta jag vill göra. Ett enda problem nu är att jag får ett fel som jag inte kan härleda.
Vill du kunna hjälpa mig med det?
Problemet kommer redan när jag startar koden
Set oShp = GetShape("MittDiagram")
If oShp Is Nothing Then
Set oSlide = oPres.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitleOnly)
Set oShp = oSlide.Shapes.AddOLEObject(150, 150, 480, 320, "MSGraph.Chart")
oShp.Name = "MittDiagram"
oShp.OLEFormat.Object.ChartType = xlPie
Vid "oShp.Name = "MittDiagram"" säger den "Compile error: Can´t assign to read-only property.
Blir inte riktigt klok på felet.
Tack för din super kod
Jörgen NordahlSv: Automatic Powerpoint generator VB 6
Det är lite skumt, jag tror inte att egenskapen "Name" för Shape-objektet någonsin har varit read-only.Sv: Automatic Powerpoint generator VB 6
Jag kan inte bli klok på detta problem. Antagligen är det något lätt att lösa, men man kan inte se det.Sv: Automatic Powerpoint generator VB 6
Har du kollat att alla referenser är OK?Sv: Automatic Powerpoint generator VB 6
Idag och imorgon är jag hemma med sjuka barn och kan inte titta på problemet.
Jag provade med att deklarera konstanten utan något lyckat resultat. Du pratar om late binding och early binding kan du förklara lite närmare vad du menar.
Alla referenser är OK
MVH
JörgenSv: Automatic Powerpoint generator VB 6
Early binding är när du infogar en referens till t.ex. "Microsoft Graph 10.0 Object Library". När du sedan deklarerar en objektvariabel kan du göra så här:
Dim objDiagram As Chart
Eftersom du har en referens till Graph's objektbibliotek kan du använda dess konstanter som t.ex. xlPie. Nackdelen är att ditt program blir beroende av vilken version av Graph användaren har vilket kan ställa till problem ibland.
Vid late binding infogar du inte någon referens och deklarera objektvariabeln på det här sättet:
Dim objDiagram As Object
Programmet vet då inte vilken typ av objekt objDiagram kommer att innehålla förrän när du sätter den t.ex. genom att skriva:
Set objDiagram = oSlide.Shapes.AddOLEObject(150, 150, 480, 320, _
"MSGraph.Chart").OLEFormat.object
Nackdelen med det är att det kan gå lite långsammare, och så det där med konstanterna. Du får heller ingen hjälp av intellisence när du programmerar.Sv: Automatic Powerpoint generator VB 6
Nu har det löst sig för mig det var som du sa jag hade blandat early binding och late binding.
Jag har nu satt early binding pga. att jag vet att alla som skall använda mitt program har office 2002.
Tack Åsa för all din hjälp.
Det har varit lärorigt för mig.
Med vänlig hälsing
Jörgen Nordahl