Hallo !
Bij een poging om iemand te helpen ben ik op iets gestuit waar ik niet mee weg kan.
Het gaat over het volgende: we hebben een workbook, met 1 sheet, en in de cel A1 staat een bestandsnaam. Het is de bedoeling dat in de cel A2 de waarde komt te staan uit de cel X1 van de sheet van het workbook waarvan de naam in A1 vermeld staat. De bestandsnaam in A1 is afhankelijk van de gebruikersinvoer en kan dus wijzigen. Bijvoorbeeld: als in A1 de bestandsnaam "maart.xls" staat, dan zou in A2 de waarde van X1 van de (enige) sheet van maart.xls moeten komen.
Dat lijkt niets spectaculairs en de volgende functie geeft die waarde:
Als we die functie aanroepen vanuit een "gewone' Sub, dan werkt die zoals verwacht:
Ook als we ze aanroepen vanuit een event-procedure werkt ze zoals verwacht:
Maar als we ze gebruiken als formule in de worksheet zelf, dan werkt het plotseling niet meer. Zie screenshot.

Het argument naar de functie wordt blijkbaar correct doorgegeven, maar na de regel "Set oWB = Workbooks.Open ..." blijft de waarde van oWB op Nothing (???). Op geen enkel moment volgt er een foutmelding.
Opzoekingen op het www hebben tot hiertoe niets opgeleverd. Iemand een idee over de reden waarom dat niet werkt?
Grtz,
MDN111.
Bij een poging om iemand te helpen ben ik op iets gestuit waar ik niet mee weg kan.
Het gaat over het volgende: we hebben een workbook, met 1 sheet, en in de cel A1 staat een bestandsnaam. Het is de bedoeling dat in de cel A2 de waarde komt te staan uit de cel X1 van de sheet van het workbook waarvan de naam in A1 vermeld staat. De bestandsnaam in A1 is afhankelijk van de gebruikersinvoer en kan dus wijzigen. Bijvoorbeeld: als in A1 de bestandsnaam "maart.xls" staat, dan zou in A2 de waarde van X1 van de (enige) sheet van maart.xls moeten komen.
Dat lijkt niets spectaculairs en de volgende functie geeft die waarde:
Code:
Function GetValueFromOtherWorkbook(ByVal cFile As String) As Variant
Dim oWB As Workbook
On Error Resume Next
Set oWB = Workbooks.Open(Filename:=ThisWorkbook.Path & "\" & cFile, ReadOnly:=True)
On Error GoTo 0
If Not oWB Is Nothing Then
With oWB
GetValueFromOtherWorkbook = .Sheets(1).Range("X1").Value
.Close
End With
End If
End Function
Code:
Sub test()
With ThisWorkbook.Sheets(1).Cells(1, 1)
.Offset(0, 1).Value = GetValueFromOtherWorkbook(.Value)
End With
End Sub
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Target.Offset(0, 1).Value = GetValueFromOtherWorkbook(Target.Value)
End If
End Sub
Maar als we ze gebruiken als formule in de worksheet zelf, dan werkt het plotseling niet meer. Zie screenshot.

Het argument naar de functie wordt blijkbaar correct doorgegeven, maar na de regel "Set oWB = Workbooks.Open ..." blijft de waarde van oWB op Nothing (???). Op geen enkel moment volgt er een foutmelding.
Opzoekingen op het www hebben tot hiertoe niets opgeleverd. Iemand een idee over de reden waarom dat niet werkt?
Grtz,
MDN111.
