[VBA] Cell formule ID of Range naar String

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

  • ekx
  • Registratie: Februari 2002
  • Laatst online: 28-12-2025
Probleemsituatie:
Excel heeft een bug die maakt dat je niet meer text kan linken dan 255 tekens, met verschillende workbooks, die gesloten zijn (dus niet openstaan). Dit is opgelost in de 2007-versie. Maar op het werk loopt dit niet zo snel i.v.m. upgraden.
Oplossing hiervoor:
Heb op het net gezocht, en ik benader nu de cell via een ADO-connectie, naar die cell, en dit via de volgende formule interface:
code:
1
=copytextfrom(range as string)

Dit heeft het nadeel, dat je eerst je cell selecteert bij het invoeren van deze formule. en daarna " " plaatst rond de range die excel heeft geselecteerd
Voorbeeld
code:
1
=copytextfrom("'C:\[Book7.xls]Sheet1'!E6")

Moest dit enkel een 'ongemak zijn', dan zou ik dit zo laten. Er is echter nog een ander nadeel. Eigenlijk werk je met text ipv links. Dus ,als een cell waarde verandert (opschuift), past excel deze niet aan.
Dit zou hij wel kunnen doen als ik in de formule de range kan plaatsen als range en niet in de formule als 'als string'.

Mogelijke oplossing:
Nu heb ik geprobeerd om het adress te weten te komen van een range, dit gaat voor bijvoorbeeld
code:
1
2
Dim rng as Range
msgbox rng.LocalAddress

Dit geeft me het probleem dat hij zijn adress niet kan weergeven als het workbook gesloten is.
Hetzelfde geldt voor de formule
Daarom heb ik eigenlijk de volgende oplossing bedacht:
code:
1
2
3
Function asText(thisCell As Range, inp As Range) As String
asText = thisCell.FormulaLocal
End Function

Deze code vraagt twee parameters: de cell, vanwaar hij wordt uitgevoerd & de range die hij zou moeten ophalen.
Doordat als een workbook gesloten is, ook de formula verandert (dan komt het volledige pad te staan in de formulebalk), kan ik altijd de filename extracten.

Problemen bij het vinden van de oplossing
Ik moet bij mijn laatste recentse oplossing (twee parameters), altijd de huidige cell meegeven vanwaar hij wordt uitgevoerd. 8)7 ;(

Gevraagd
Bestaat er geen manier om de huidige cell, die formule uitvoert, op te roepen?
Of hoe ik daar in hemelsnaam op google? heb gezocht op: 8)7
Excel.Range as String vba
Excel.Range and ADO vba
Range text 255 char ADO vba

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 16-07 12:26

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 07:08
Visual Basic:
1
2
3
Public Function mijn_adres() As String
mijn_adres = Application.Caller.Address
End Function

type eens =mijn_adres() in een cel. :P

Application.Caller.FormulaLocal
heb je nodig.

[ Voor 14% gewijzigd door onkl op 05-10-2007 11:36 ]


  • ekx
  • Registratie: Februari 2002
  • Laatst online: 28-12-2025
onkl schreef op vrijdag 05 oktober 2007 @ 11:34:
Visual Basic:
1
2
3
Public Function mijn_adres() As String
mijn_adres = Application.Caller.Address
End Function

type eens =mijn_adres() in een cel. :P

Application.Caller.FormulaLocal
heb je nodig.
thnx dit werkt. Zo kan ik het pad gaan tracen.

Mochten mensen dit nog interesseren hoe het pad te tracen valt:
hier wat pseudo

Pad:
var=formula(‘path\[workbook.xls]Sheetname’Adress)

1. strip the formula
start = locatie ‘(‘ +1
end = locatie ‘)’ -1
var = mid(var,start,end)

2. find the sheetname
start = locatie ‘]’+1
end = locatie 2e ‘’’-1
sheetname = mid(var,start,end)

3. find the address
start = locatie 2e ‘’’+1
end = locatie ‘)’ -1
address= mid(var,start,end)

3.b. check if you got the first address
if ‘:’ in var then
end = locatie ‘:’ -1
address=left(address,end)

En op deze manier kan je via ADO, een text ophalen uit een ander excelbestand dat groter kan zijn dan 255 tekens

[ Voor 53% gewijzigd door ekx op 05-10-2007 12:15 ]