Toon posts:

[Excel] Macro werkblad onafhankelijk maken

Pagina: 1
Acties:
  • 804 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb hier een apperaat staan dat bestanden maakt met een .dat extentie, dit bestand laad ik vervolgens in in excel. Een zo'n bestand bestaat uit ongeveer 30 kolommen, deze kolommen worden vervolgens met behulp van een macro netjes in grafieken gezet, net zoals de bedoeling is. Als ik echter een ander bestand inlaad in excel gaat het mis met de macro die ik gebruik om de grafieken te maken. Elke keer als ik het .dat bestandje namelijk in excel laad geeft hij het werkblad de naam van het .dat bestand, en aangezien de macro zijn grafiek waarden uit een bepaalde sheet wil halen krijg ik op dit punt een foutmelding.

Mijn vraag is nu of het op de een of andere manier mogelijk is om via de macro elke keer de grafieken te laten tekenen zonder dat deze een foutmelding geeft?

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 15:46
Je kan in de macrocode refereren aan een bepaald werkblad.
Als je naar je macrocode kijkt zal je waarschijnlijk hier en daar iets zien staan als
Visual Basic:
1
Worksheets("De naam van het originele werkblad").En_dan_nog_iets

Dat zijn de plekken waar je macro crashed.
Wat je als absoluut minimum kan doen is deze code vooraan je macro plakken (Direct na de "Sub...()" regel.
Visual Basic:
1
2
3
4
Dim importblad as worksheet
Dim bladnaam as string
bladnaam = InputBox()
Set importblad = Activeworkbook.Sheets(bladnaam)

en vervolgens vervang je iedere keer als je in de code iets als Worksheets("De naam van het originele werkblad") ziet dat door "importblad" (let erop dat je de punt er direct op laat volgen en van de rest van de code afblijft. Vul als je de macro runt de goede naam in in het schermpje wat als het goed is verschijnt.
Beter zou zijn ook het openen van het .dat bestand en kopieren van het blad aan de macro over te laten. Zoek daarvoor in VB eens naar "GetOpenFileName".

Verwijderd

Topicstarter
Ik heb net even jou stukje code geprobeerd, ik kom er alleen nog niet helemaal uit. Dit is de code die ik op dit moment gebruik
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub Grafiek()
'
' Grafiek Macro
' Macro recorded 11/30/2006 by René Visscher
'
' Keyboard Shortcut: Ctrl+Shift+Q
'
Dim importblad As Worksheet
Dim bladnaam As String
bladnaam = InputBox(Tekst)
 Set importblad = ActiveWorkbook.Sheets(bladnaam)
    Charts.Add
    ActiveChart.ChartType = xlLineMarkers
    ActiveChart.SetSourceData Source:=Sheets("importblad").Range("AL5:AL109"), PlotBy _
        :=xlColumns
    ActiveChart.Location Where:=xlLocationAsNewSheet
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Rp02"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = _
        "Number of mesurements"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Rp02"
    End With


Dit word dan vervolgens een aantal keer herhaald voor elke grafiek.

Het programma loopt nu vast op de volgende regel:
Visual Basic:
1
2
ActiveChart.SetSourceData Source:=Sheets("importblad").Range("AL5:AL109"), PlotBy _
        :=xlColumns


Ik denk dat ik niet het goede invoer in die input box, ik voer nu enkel de sheet naam in, in mijn geval heet deze sheet 94734, moet ik nog wat meer invullen of doe ik dit zo goed?

Verwijderd

Haal de "" rond importblad eens weg. Dit is niet de eigenlijke naam maar een variabele. De code zoekt nu naar het werkblad met de naam "importblad" in plaats van de naam die je ingevoerd hebt.
Verwijderd schreef op vrijdag 01 december 2006 @ 15:32:
...
Het programma loopt nu vast op de volgende regel:
Visual Basic:
1
2
ActiveChart.SetSourceData Source:=Sheets("importblad").Range("AL5:AL109"), PlotBy _
        :=xlColumns


Ik denk dat ik niet het goede invoer in die input box, ik voer nu enkel de sheet naam in, in mijn geval heet deze sheet 94734, moet ik nog wat meer invullen of doe ik dit zo goed?

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 15:46
En het "Sheets" ook maar. Dus: Source:=importblad.Range("etc. etc.

Verwijderd

Topicstarter
@ moosehead en onkl: bedankt, het werkt nu zoals ik het wil hebben.

Verwijderd

Topicstarter
Ik heb nog een vraagje, de tabellen die ik heb lopen niet allemaal even ver door, de ene tabel heeft bijvoorbeeld 30 rijen, en de volgende tebe kan er wel meer als 100 hebben. Nu is mijn vraag of het mogelijk is om te kijken of er in een vakje nog data staat, en deze als dit niet het geval is ook niet te tekenen. Het is trouwens wel zo dat alle kolommen in een bestand even veel rijen hebben.

Alvast bedankt René

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 15:46
Je zou kunnen proberen deze regel
Visual Basic:
1
2
    ActiveChart.SetSourceData Source:=Sheets("importblad").Range("AL5:AL109"), PlotBy _ 
        :=xlColumns 

te vervangen door:
Visual Basic:
1
2
3
ActiveChart.SetSourceData Source:=Sheets("importblad").Range(Range("AL5"), Cells(65536, Range("AL5").Column).End(xlUp)), PlotBy _
        :=xlColumns
 
Pagina: 1