Toon posts:

[excel] VBA-verwijzen naar een werkblad

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

Verwijderd

Topicstarter
Het volgende gaat goed:

Dim mysheet1 as sheet1
Set mysheet1 = new sheets(1)

Maar het volgende gaat fout:

Dim mysheet2 as sheet2
Set mysheet2 = new Sheets(2)

Ik heb al verschillende dingen geprobeerd.
Het is mij alleen gelukt om een referentie te maken naar de eerste sheet.
Het lukt maar niet met een 2e,3e, etc.

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 21-02 23:50
Leg eens in je eigen woorden uit wat je doet met die twee regels code...
Of ben je gewoon aan het gokken door wat nummertjes te veranderen?
Weten wat je doet ipv maar wat doen wil wel eens helpen.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waar hoort mijn topic?

VBA hoort OFF. *schop*

Verder moet ik met Grijze Vos meegaan; heb je enig idee wat je aan 't doen bent?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Met RobIII en Grijze Vos en behalve dat nog wat:
Welkom op GoT :)
maar lees je ook even onze fraaie policy en bv Algemene gedragsregels (Netiquette)?

Ik pas je titel bv even aan: schreeuwen is echt niet nodig en en hulp gevraagd is ook niet echt informatief waar je probleem over gaat.

Leg even uit wat je nu wilt en wat je denkt te bereiken met die twee regels code. Als je foutmeldingen krijgt, vermeldt die ook even, wel net zo handig :) Het verbaast me eerder dat de eerste variant werkt dan dat de tweede het niet doet.

Want het zou er zo uit moeten zien:
code:
1
2
Dim ws as worksheet
Set ws = sheets(index)


maar dat staat allemaal in de help

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 12:06
Ter aanvulling op Niesje: als je een werkblad wilt toevoegen, kijk eens naar de "add" methode van de "worksheets" collectie. (en alweer, die help is uitstekend, wel op F1 duwen terwijl je in VBA zit, dan krijg je VBA help; in Excel krijg je de Excel help. <- dit klinkt echt heel logisch, nu ik het zo opschrijf :*) )

Verwijderd

Topicstarter
Ok,

Ik heb drie worksheets met data, namelijk:
"book1"(=index1), "book2"(=index2) en "book3(=index3)"

Ik heb vier classes aangemaakt, namelijk:
"clsBooks"(=Parent),"clsBook1"(=Child),"clsBook2"(=Child) en "clsBook3"(=Child)

Nu refereer ik mySheet in clsBook1 naar worksheet "book1", namelijk:
(clsBook2 en clsBook3 even buitenspel gezet om error te voorkomen)

Private mySheet as Sheet1
...
Private Sub Class_Initialize()

set mySheet=sheets(1)

end sub

Verder heb ik voor de benadering van de worksheet:

Public Property Get Sheet() As Sheet1

Set Sheet = mySheet

End Property

Vanuit een main class kan ik nu het volgende doen:

ind=mybooks.mybook1.sheet.combobox.listindex

Dit werkt volkomen.
Het probleem is namelijk dat als ik clsBook2 weer laat meedoen, het hier al mis gaat:

Private mySheet as Sheet2
...
Private Sub Class_Initialize()

set mySheet=sheets(2)

end sub

runtime error:13
type mismatch

Ik kan natuurlijk ook gewoon meteen vanuit een class het volgende doen:
sheets(2).anything
maar om trouw te blijven aan het objectmodel is het op deze manier als vloeken in de kerk.

En oke, ben groen, want kom er normaliter zelf wel uit, maar waarom dit niet lukt????
En ja misschien weet ik inderdaad niet waar ik mee bezig ben, vandaar de vraag.
Dat de topic helemaal op de verkeerde plek stond, ja, vanwege tijdgebrek een beetje slordig geweest.
Bedankt voor het aanpassen van de titel. Hoop dat jullie er niet wakker van hebben gelegen.

  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 12:06
Misschien kan je even aangeven wat je probeert te doen (wat zeg maar het doel is), want ik kan me weinig situaties voorstellen in VBA waarbij je classes nodig hebt om aan een worksheet te refereren, dus ik krijg een beetje de indruk dat je de oplossing moeilijker maakt dan noodzakelijk.

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

code:
1
2
Private mySheet as Sheet1
Private mySheet as Sheet2

Dit zijn wonderbaarlijke regels. Waarom declareer je je variabelen als een specifiek werkblad? Want dan gaat
code:
1
set mysheet=sheets(2)
mis als het werkblad met de opgegeven naam zich niet op de tweede plek bevindt.

Hoe het wel moet ;)

offtopic:
Zet code even tussen [code][/code] tags. Leest stukken makkelijker. En nee, van een titelfix lig ik niet wakker, maar als je opmerking soort poging tot sarcasme is dan is die tamelijk goedkoop.

[ Voor 3% gewijzigd door Lustucru op 11-11-2006 10:51 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1