Excel - Tabel starten in Module1, verder afmaken in Module2

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo allemaal,

Ik heb een Excel VBA code gebouwd die een tabel maakt in een PowerPoint slide en deze vervolgens invult met data uit Excel. Deze tabel is echter zo groot, dat deze te groot wordt voor de compiler. Er zijn hier twee oplossingen voor:
- De code kleiner maken. (Heb ik geprobeerd, niet gelukt)
- Twee modules gebruiken voor die ene tabel.

Ik ben hier genoodzaakt om optie twee te gebruiken.
Wat ik dus wil is dat Module1 gebruikt wordt om de tabel te maken en in deels in te vullen. Module2 moet de tabel verder invullen en daarmee afmaken.

Ik heb al flink gezocht naar oplossingen, maar ik kan de geschikte niet vinden. Ik heb echt geen idee hoe ik dit kan regelen, dus ik hoop dat iemand mij hier kan helpen.

Office:
Excel 2013
PowerPoint 2013

Alvast bedankt!

Groeten,

Ganesh

Beste antwoord (via Verwijderd op 22-01-2017 01:17)


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Wel eens van (for-)loops gehoord?

Laatste stuk kan je ook zo schrijven:
Visual Basic:
1
2
3
4
For i = 1 To 10
  item = WSIndex.Cells(i + 2, 3)
  .Table.cell(i + 2, 1).Shape.TextFrame.TextRange.Text = item
Next

Alle reacties


Acties:
  • 0 Henk 'm!

  • ajakkes
  • Registratie: Maart 2004
  • Laatst online: 16-05 22:32

ajakkes

👑

De functie die in module2 staat aan roepen?

Kan me echter moeilijk voorstellen dat je code om 1 tabel op 1 PowerPoint sheet in te vullen niet kan met 1 module.

Lijkt mij dat de oplossing ergens anders zit.

👑


Acties:
  • 0 Henk 'm!

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 18:11

Knutselsmurf

LED's make things better

Het lijkt met sterk dat je meer dan 64 KB (dat is uit mijn hoofd de maximale grootte) aan code nodig hebt om een tabel uit Excel over te nemen in een PowerPoint-slide. Kun je wat code laten zien? Grote kans dat daarin zaken in te verbeteren zijn, zodat deze gewoon binnen 1 module past.

- This line is intentionally left blank -


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik snap dat jullie denken dat het onmogelijk zo groot kan zijn. Echter was de opdracht van mijn stagebedrijf heel duidelijk: zo modulair mogelijk houden.
Zij willen bijvoorbeeld 1 cell kunnen aanpassen naar hun wensen ipv dat alles mee veranderd.

De code:

In het eerste deel wordt alles gedefinieerd en wordt een nieuwe PowerPoint bestand gepakt om alles in te zetten.

Sub Test1()

'First we declare the variables we will be using
Dim newPowerPoint As PowerPoint.Application
Dim activeSlide As PowerPoint.Slide
Dim cht As Excel.ChartObject

'Define worksheets
Set wb = ThisWorkbook
Set WSIndex = wb.Worksheets(1)
Set WSNumOfOpp = wb.Worksheets(6)
Set WSFleetPerfOne = wb.Worksheets(7)
Set WSFleetPerfTwo = wb.Worksheets(8)
Set WSATA = wb.Worksheets(9)
Set WSBench = wb.Worksheets(10)


'Look for existing instance
On Error Resume Next
Set newPowerPoint = GetObject(, "PowerPoint.Application")


'Let's create a new PowerPoint
If Err.Number <> 0 Then
Set newPowerPoint = CreateObject("PowerPoint.Application")

End If

'Disable error handling
On Error GoTo 0

'Show the PowerPoint
newPowerPoint.Visible = True

'Make a presentation in PowerPoint

newPowerPoint.Presentations.Open Filename:=wb.Path & "\KLM Template.pptx"
newPowerPoint.Activate


In het volgende stuk begint de tabel.

Eerste het uiterlijk bepalen: 12 rijen, 17 kolommen.

'Table

Set Data = newPowerPoint.ActivePresentation.Slides(2).Shapes.AddTable(12, 17)
With Data
'General
.Table.ApplyStyle "{5940675A-B579-460E-94D1-54222C63F5DA}", True
.Left = 15
.Height = 20
.Top = 230
.Fill.ForeColor.RGB = RGB(255, 255, 255)
TableFontSize = 9
ColoredColumns = RGB(243, 200, 167)
'Merging
.Table.cell(1, 4).Merge MergeTo:=.Table.cell(1, 5)
.Table.cell(1, 6).Merge MergeTo:=.Table.cell(1, 7)
.Table.cell(1, 8).Merge MergeTo:=.Table.cell(1, 9)
.Table.cell(1, 10).Merge MergeTo:=.Table.cell(1, 11)
.Table.cell(1, 12).Merge MergeTo:=.Table.cell(1, 13)
.Table.cell(1, 14).Merge MergeTo:=.Table.cell(1, 15)
.Table.cell(1, 16).Merge MergeTo:=.Table.cell(1, 17)

.Table.cell(1, 1).Merge MergeTo:=.Table.cell(2, 1)
.Table.cell(1, 2).Merge MergeTo:=.Table.cell(2, 2)
.Table.cell(1, 3).Merge MergeTo:=.Table.cell(2, 3)


Dan het eerste kolom invullen:

'Column 1: Rank
.Table.cell(1, 1).Shape.TextFrame.TextRange.Text = WSIndex.Cells(1, 3)
.Table.cell(1, 1).Shape.TextFrame.TextRange.Font.Name = "Verdana Body"
.Table.cell(1, 1).Shape.TextFrame.TextRange.Font.Size = TableFontSize
.Table.cell(1, 1).Shape.TextFrame.TextRange.Font.Bold = True
.Table.cell(1, 1).Shape.TextFrame.TextRange.Font.Color.RGB = RGB(0, 0, 0)
.Table.Columns(1).Width = 50
'Layout
.Table.Columns(1).Cells.Borders(ppBorderTop).ForeColor.RGB = RGB(0, 155, 225)
.Table.Columns(1).Cells.Borders(ppBorderLeft).ForeColor.RGB = RGB(0, 155, 225)
.Table.Columns(1).Cells.Borders(ppBorderRight).ForeColor.RGB = RGB(0, 155, 225)
.Table.Columns(1).Cells.Borders(ppBorderBottom).ForeColor.RGB = RGB(0, 155, 225)
.Table.cell(1, 2).Shape.Fill.ForeColor.RGB = ColoredColumns
.Table.cell(1, 1).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
.Table.cell(2, 1).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
.Table.cell(3, 1).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
.Table.cell(4, 1).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
.Table.cell(5, 1).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
.Table.cell(6, 1).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
.Table.cell(7, 1).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
.Table.cell(8, 1).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
.Table.cell(9, 1).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
.Table.cell(10, 1).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
.Table.cell(11, 1).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
.Table.cell(12, 1).Shape.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
'Font Size
.Table.cell(2, 1).Shape.TextFrame.TextRange.Font.Size = TableFontSize
.Table.cell(3, 1).Shape.TextFrame.TextRange.Font.Size = TableFontSize
.Table.cell(4, 1).Shape.TextFrame.TextRange.Font.Size = TableFontSize
.Table.cell(5, 1).Shape.TextFrame.TextRange.Font.Size = TableFontSize
.Table.cell(6, 1).Shape.TextFrame.TextRange.Font.Size = TableFontSize
.Table.cell(7, 1).Shape.TextFrame.TextRange.Font.Size = TableFontSize
.Table.cell(8, 1).Shape.TextFrame.TextRange.Font.Size = TableFontSize
.Table.cell(9, 1).Shape.TextFrame.TextRange.Font.Size = TableFontSize
.Table.cell(10, 1).Shape.TextFrame.TextRange.Font.Size = TableFontSize
.Table.cell(11, 1).Shape.TextFrame.TextRange.Font.Size = TableFontSize
.Table.cell(12, 1).Shape.TextFrame.TextRange.Font.Size = TableFontSize

'Top 10
One = WSIndex.Cells(3, 3)
Two = WSIndex.Cells(4, 3)
Three = WSIndex.Cells(5, 3)
Four = WSIndex.Cells(6, 3)
Five = WSIndex.Cells(7, 3)
Six = WSIndex.Cells(8, 3)
Seven = WSIndex.Cells(9, 3)
Eight = WSIndex.Cells(10, 3)
Nine = WSIndex.Cells(11, 3)
Ten = WSIndex.Cells(12, 3)

.Table.cell(3, 1).Shape.TextFrame.TextRange.Text = One
.Table.cell(4, 1).Shape.TextFrame.TextRange.Text = Two
.Table.cell(5, 1).Shape.TextFrame.TextRange.Text = Three
.Table.cell(6, 1).Shape.TextFrame.TextRange.Text = Four
.Table.cell(7, 1).Shape.TextFrame.TextRange.Text = Five
.Table.cell(8, 1).Shape.TextFrame.TextRange.Text = Six
.Table.cell(9, 1).Shape.TextFrame.TextRange.Text = Seven
.Table.cell(10, 1).Shape.TextFrame.TextRange.Text = Eight
.Table.cell(11, 1).Shape.TextFrame.TextRange.Text = Nine
.Table.cell(12, 1).Shape.TextFrame.TextRange.Text = Ten

En deze code wordt ook gebruikt om alle verdere kolommen in te vullen.

Dit moet dus 17 keer gebeuren. Als jullie een betere manier hebben, dan hoor ik het uiteraard graag. Dan zou het alsnog allemaal in 1 module kunnen :)

Groeten, Ganesh

Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Wel eens van (for-)loops gehoord?

Laatste stuk kan je ook zo schrijven:
Visual Basic:
1
2
3
4
For i = 1 To 10
  item = WSIndex.Cells(i + 2, 3)
  .Table.cell(i + 2, 1).Shape.TextFrame.TextRange.Text = item
Next

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Met de For loop werkt wel (dus dank daarvoor), maar toch maakt dit het minder modulair. Ik hou het wel gewoon bij, dan kan de volgende die ernaar kijkt het oplossen als nodig.

Dank allen!

[ Voor 5% gewijzigd door Verwijderd op 23-01-2017 07:41 ]


Acties:
  • +1 Henk 'm!

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Verwijderd schreef op zondag 22 januari 2017 @ 01:16:
Met de For loop werkt wel (dus dank daarvoor), maar toch maakt dit het minder modulair. Ik hou het wel gewoon bij, dan mag de volgende die ernaar kijkt het zelf oplossen.

Dank allen!
Ja joh, gooi het lekker over de schutting in plaats van er zelf van te leren. Lekker efficient ook. Goeie houding om bij een bedrijf te werken, kunnen ze vast goed waarderen. Als de opdracht is "Modulair maken" en je levert zoiets af waar je elke regel apart doet krijg je een dikke onvoldoende omdat dat precies het tegenovergestelde is. Samen met de reden "De volgende mag het lekker oplossen" is dat echt een toppertje.

Excel VBA is prima modulair op te bouwen en For-Loops zijn daar zeker een tool voor. Dus wellicht, ter lering ende vermaak, handig om toch net even wat verder te gaan om erachter te komen hoe je het kan verbeteren. Dan bereik je ook wat je wilt en heb je at geleerd. Legio bronnen op internet op je te helpen.

[ Voor 18% gewijzigd door armageddon_2k1 op 22-01-2017 08:44 ]

Engineering is like Tetris. Succes disappears and errors accumulate.


Acties:
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Ik denk dat je een verkeerd beeld hebt bij 'modulair'. Dat wil normaal zeggen dat je je code opsplitst in losse delen zoals functies/procedures of zelfs meerdere klassen.

Het lijkt mij verstandig om met je stagebegeleider te bespreken wat hij er onder verstaat.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De ene probeert mij netjes te helpen en de ander geeft ongevraagd zijn mening. Bedankt Daos, aan jouw hulp heb ik tenminste wat.

@armageddon_2k1
Deze topic vraagt niet om jouw mening, dus graag voor je houden.
Je hebt geen idee wat mijn opdracht is, welke tijd ik ervoor kreeg en wat de uitkomst moet zijn. Ook heb je geen idee wat ik allemaal heb moeten doen om de opdracht af te krijgen. Dus begin niet over zaken waar je geen idee van hebt, doe ik ook niet.
Dit was niet DE stage opdracht, het was een extra iets dat ik graag wil doen voor hun (en de volgende zou hiermee doorgaan). Die voldoende heb ik allang op zak, ik doe alleen graag wat extra's.
Volgens mij ben je super goed in VBA, wat inhoudt dat je prima had kunnen zien aan de hand van mijn gestuurde code dat ik een beginner ben. Daos zag dat in ieder geval.

Heel veel dingen vond ik op het internet, maar mijn laatste probleem heb ik hier gevraagd en die is prima opgelost. Voor iemand die pas sinds 4 maanden is begonnen met VBA, sorry dat die niet alles weet.

Het is opgelost, dus graag gewoon klaar nu.

[ Voor 79% gewijzigd door Verwijderd op 23-01-2017 08:03 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op maandag 23 januari 2017 @ 07:36:
Deze topic vraagt niet om jouw mening, dus graag voor je houden.
Dit forum is echter geen helpdesk, we zijn een community. Ook meningen mogen gegeven worden. Laat je niet zo kennen door zo overtrokken te reageren op iets dat gezien kan worden als opbouwende kritiek :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 23:06

MueR

Admin Tweakers Discord

is niet lief

Beetje mosterd na de maailtijd, maar dit topic hoort niet in Programming, maar in Client Software Algemeen. Zie ook Waar hoort mijn topic?

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

.edit: oeps dit moest in een DM ;)

[ Voor 133% gewijzigd door .oisyn op 23-01-2017 14:06 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
.oisyn schreef op maandag 23 januari 2017 @ 12:10:
[...]

Dit forum is echter geen helpdesk, we zijn een community. Ook meningen mogen gegeven worden. Laat je niet zo kennen door zo overtrokken te reageren op iets dat gezien kan worden als opbouwende kritiek :)
Zeker waar, maar geen forum om het over mijn voldoendes, onvoldoendes of houding te hebben bij mijn stagebedrijf. Dat heeft niks hiermee te maken.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19:58

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hij geeft een tip dat direct inhaakt op de door jouw gekozen oplossing. Daar kun je iets mee doen of je kunt het negeren, dat is aan jou. Maar ik ga hier niemand de mond snoeren voor het geven van dat soort tips, en jij hebt geen zeggenschap over wat er met je topic gebeurt ;)

[ Voor 27% gewijzigd door .oisyn op 23-01-2017 15:17 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1