Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Automatic Powerpoint generator VB 6

Postades av 2004-10-04 10:00:14 - Jörgen Nordahl, i forum microsoft office, Tråden har 14 Kommentarer och lästs av 1158 personer

Hej

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.


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-04 22:45:35 - Mattias Pettersson

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?

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.


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-05 08:28:44 - Jörgen Nordahl

Hej

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örgen


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-09 04:08:30 - Mattias Pettersson

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?


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-13 09:18:20 - Jörgen Nordahl

Hej Mattias

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 Nordahl


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-13 09:54:06 - Åsa Holmgren

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.

/Åsa


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-13 12:01:06 - Jörgen Nordahl

Hej Åsa

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 Nordahl


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-13 14:04:32 - Åsa Holmgren

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.

<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>


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-13 15:21:01 - Jörgen Nordahl

Hej Åsa

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 Nordahl


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-13 15:59:38 - Åsa Holmgren

Jag har provkört i Powerpoint 2000 och 2002 och det går bra. Vilken version har du?
Det är lite skumt, jag tror inte att egenskapen "Name" för Shape-objektet någonsin har varit read-only.


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-13 19:06:12 - Jörgen Nordahl

Jag har powerpoint 2002

Jag kan inte bli klok på detta problem. Antagligen är det något lätt att lösa, men man kan inte se det.


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-13 19:28:22 - Åsa Holmgren

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?
Har du kollat att alla referenser är OK?


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-14 11:18:54 - Jörgen Nordahl

Hej

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örgen


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-14 13:25:09 - Åsa Holmgren

Hej igen

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.


Svara

Sv: Automatic Powerpoint generator VB 6

Postades av 2004-10-14 15:27:16 - Jörgen Nordahl

Hej

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


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 768
27 960
271 761
531
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies