Functions Array übergibt keine Werte
25.03.2006 15:45:55
Peter
hab mal ne Frage, bei der ich seit einer Stunde auf´m Schlauch stehe.
Hab unten stehende Funktion geschrieben um mir aus einer Datenbank (in dem Fall eine .xls, ich weiss soll man nicht machen, aber egal) Werte zu holen.
Das ganze schreib ich in ein Array, nur leider bekomme ich nur leere Datenfelder zurück (müsste aber mit Daten gefüllt sein) und mir fällt langsam nichts mehr ein.
Vieleich erbarmt sich jemand, Danke.
Private Function DBArray(Startdatum As Double, Enddatum As Double)
Dim myArr(0 To 1), strFehler As String
Dim intStartZeile As Integer, intEndZeile As Integer
Dim wbk As Workbook, wksArr(0 To 1) As Object
If Startdatum = 0 Or Enddatum = 0 Then
DBArray = "Kein Startdatum gewählt/Kein Enddatum gewählt"
Exit Function
End If
' On Error GoTo Fehler
'Überprüfen ob objDB gefüllt ist bzw. ob Datenbank.dll überhaupt geöffnet ist
If objDB Is Nothing Then
For Each wbk In Application.Workbooks
If wbk.Name = "Datenbank.dll" Then _
Set objDB = Workbooks("Datenbank.dll"): Exit For
Next
If objDB Is Nothing Then Set objDB = GetObject(ThisWorkbook.Path & "\Datenbank.dll")
End If
'Variablenzuweisung an WorksheetArray in welchen gesucht werden muss
If Year(Startdatum) < Year(Enddatum) Then _
Set wksArr(1) = objDB.Worksheets("DB_Ho" & Year(Enddatum))
Set wksArr(0) = objDB.Worksheets("DB_Ho" & Year(Startdatum))
'Suchen der Start- und Endzeile für die Rangeübergabe
intStartZeile = Application.WorksheetFunction.Match _
(Startdatum, wksArr(0).Range("A2:A367"), 0)
If wksArr(1) Is Nothing Then
intEndZeile = Application.WorksheetFunction.Match _
(Enddatum, wksArr(0).Range("A2:A367"), 0)
Else
intEndZeile = Application.WorksheetFunction.Match _
(Enddatum, wksArr(1).Range("A2:A367"), 0)
End If
'Befüllen der Arrays mit den in der DB gefundenen Werten !
If wksArr(1) Is Nothing Then
myArr(0) = wksArr(0).Range("B" & intStartZeile & ":Z" & intEndZeile)
Else
myArr(0) = wksArr(0).Range("B" & intStartZeile & ":Z367")
myArr(1) = wksArr(1).Range("B2:Z" & intEndZeile)
End If
Set wksArr(0) = Nothing: Set wksArr(1) = Nothing: Set wbk = Nothing
DBArray = myArr
Exit Function
Fehler:
If objDB Is Nothing Then strFehler = "Datenbank nicht gefunden !"
If wksArr(0) Is Nothing Then strFehler = strFehler & "/Datenbank für das Jahr " & Year(Startdatum) _
& " noch nicht angelegt !"
If Err.Number = 1004 Then strFehler = strFehler & "/Fehler bei der Datumsübergabe ! Kein Wert gefunden !"
strFehler = DBArray
End Function
Sub t()
Dim myArr(), intZ As Integer
myArr = DBArray(CDbl(Sheets("Test").Range("A1")), CDbl(Sheets("Test").Range("A2")))
Sheets("Test").Range("A3:Z100") = myArr
End Sub
P.S.: so sieht die Tabelle dann aus:
Test | |||||||||||||||
| |||||||||||||||