• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Tabel/Listobject benaderen via 'Names'.

  • Onderwerp starter Onderwerp starter snb
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

snb

Verenigingslid
Lid geworden
12 jun 2008
Berichten
20.314
Beste Excelpieten,

Ik heb in een werkboek een tabel (VBA:Listobject) ingevoerd met de naam "ZA_Table".

In het tabblad 'Formules' kan ik die zichtbaar maken met de 'Names Manager'.
In de 'Names Manager' kan ik de naam van "ZA_Table" wijzigen in iets anders.
Het lijkt er dus op dat Excel de naam van het listobject beschouwt als een 'Named Range'.

Dan zou ik in VBA de naam van deze 'Named Range' ook moeten kunnen benaderen (lezen/wijzigen/verwijderen).

Wanneer ik dat probeer via de 'Names' eigenschap van de applicatie, het werkboek of ieder afzonderlijk werkblad lukt mij dit niet.

Alle resultaten in deze macro zijn gelijk aan nada, zero , zilch.

Code:
Sub M_snb()
    y_1 = Application.Names.Count
    y_2 = ThisWorkbook.Names.Count
    y_3 = ActiveWorkbook.Names.Count
    y_4 = ActiveSheet.Names.Count
    y_5 = Sheet1.Names.Count
    y_6 = Sheet2.Names.Count
End Sub

Heeft een uwer een verklaring en/of een aanpak hoe eigenschappen van het Listobject via de 'Names' in VBA benaderd kunnen worden ?
 

Bijlagen

@ed

Waarom kom ik hem dan tegen bij de 'names manager' ?
 
Geen idee, dat vond ik ook vreemd. Ik krijgen hem van Names niet terug.
Is het een retorische vraag waar je zelf een antwoord op hebt?
Dan hoor ik het ook graag ;)
 
@ed

Ik moet je teleurstellen: het is geen retorische vraag.;)

Want dit werkt, naar analogie van benoemde bereiken, ook:

Code:
Sub M_snb_000()
    MsgBox [ZA_table].Address
    MsgBox [ZA_table].Parent.Name
End Sub
 
Ok. Dan kan TS meerdere kanten op :)
 
Het valt mij hierbij op dat de "refers to" range van "ZA_table" in de Name Manager bestaat uit A2 : D11, dus niet de hele tabel beslaat maar enkel de DataBodyrange.
 
Mijn uitleg zou zijn dat de tabelnaam in de Name Manager te zien is als een klein stukje service van Microsoft: dan heb je een extra plekje om de naam te wijzigen. Edit: en je kunt opmerkingen toevoegen; dat kan via het tabelontwerp tabje weer niet.

Je kunt ook zien dat er iets bijzonders mee aan de hand is, want het bereik kun je niet aanpassen met de Name Manager.

Zoals WHER ook al opmerkte, is het bereik van de naam slechts de body van de tabel: met INDEX(ZA_Tabel;1;1) krijg je de waarde in A2, terwijl je met INDEX(ZA_Tabel[#All];1;1) de waarde in A1 krijgt.

Tenslotte: met F3 kun je een lijst opvragen met gedefinieerde namen en daar komt ZA_Tabel niet in voor.
In de oorspronkelijke bijlage doet F3 schijnbaar niets, maar als je ook nog een gewone naam definieert, dan zie je met F3 alleen die naam.
 

Bijlagen

Laatst bewerkt:
Inderdaad, Listobjects maken geen deel uit van de VBA Names collectie. Zel staan ze bij Name Manager, wat ik ook wel eens verwarrend vind. Ze staan er (denk ik) bij omdat tabellen ogenschijnlijk (in formules) wel vergelijkbaar werken als bereiknamen.

Helaas zijn ListObjects geen onderdeel van het Workbook object en zal je ieder werkblad af moeten om ze te verzamelen. In het Nieuwe Office JavaScript model zijn ze wel onderdeel van de werkmap overigens, handig maar niet zo consequent.
 
Dank voor alle reakties.

Hoewel in de names manager 'refersto' te lezen valt, is die eigenschap niet via VBA uit te lezen.
Via een omweg:

Code:
    MsgBox [ZA_Table].ListObject.Range.Address(, , , -1)
    MsgBox [ZA_Table].ListObject.DataBodyRange.Address(, , , -1)
Dat geldt ook voor de 'Scope'.

Het commentaar verkreeg ik met:

Code:
Sub M_snb_009()
    MsgBox [ZA_Table].ListObject.Comment
    MsgBox Sheet1.ListObjects("ZA_Table").Comment
End Sub

In de eerste vorm is het dus mogelijk het listobject te benaderen zonder te weten in welk werkblad het zich bevindt.

We zullen het maar afdoen als een wat inconsistente aanpak van Microsoft die tot verwarring kan leiden.
 
Laatst bewerkt:
Dat bedoelde ik precies met "een klein stukje service van Microsoft". :p
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan