Domino 9 und frühere Versionen > ND9: Entwicklung

Fehler abfangen bei Excel-Import

(1/2) > >>

Bastel123:
Guten Morgen,

ich importiere Daten aus einer Excel-Tabelle.

Dabei ist in einer Excelzelle der Wert "#WERT", da hier eine Division durch null ist.

Wenn ich das einer Variablen tmp zuweise mit

Dim tmp as variant
tmp = varXLSheet.Cells(ingRow, partpricesalecol).value

ergibt das im Debugger:

tmp      [ERROR]       Variant

Wie kann ich die Variable auf "[ERROR] abprüfen, oder diesen Fehler anders abfangen?

Die Korrektur der Exceltabelle als die einfachste Möglichkeit scheidet natürlich aus, das die Tabelle schreibgeschützt ist und der Mitarbeiter nicht da ist und ich ihm erst einmal alle falsche Datensätze geben muss..........

Gruß
Sebastian  

umi:
Moin

evtl. mal ein
if(strcompare(cstr(tmp),"[error]",5)=0 then
probieren

Bastel123:
Bringt leider auch nur ein "Type mismatch".

Ich habe jetzt erstmal auf andere Spalten abgefragt und überspringe die Zeilen.

Gruß Sebastian

eknori (retired):
Teste mal mit IsArray(tmp). Das sollte den Fehler abfangen und du kannst entsprechend drauf reagieren.
Der Wert in tmp ist bei einer fehlerhaften Zelle NULL, Nichts, Nada. 

Peter Klett:

--- Code: ---Option Public
Option Declare

Sub Initialize
Const dateiname = "C:\test\test.xlsx"
Dim varXLSheet As Variant
Set varXLSheet = CreateObject ("Excel.Application")
varXLSheet.Workbooks.Open (dateiname)
Dim tmp As Variant
tmp = LeseExcelZelle (varXLSheet, 2, 2)
MsgBox tmp
End Sub

Function LeseExcelZelle (excel As Variant, zeile As Integer, spalte As Integer) As String
On Error GoTo Fehler
LeseExcelZelle = excel.Cells (zeile, spalte).value
Ende:
Exit Function
Fehler:
LeseExcelZelle = "@Error"
Resume Ende
End Function
--- Ende Code ---

Nachteil ist, dass der Rückgabewert Text ist, um auch Zahlenwerte zurückzubekommen, kannst Du das auch nur als Prüfmethode verwenden.


--- Code: ---Option Public
Option Declare

Sub Initialize
Const dateiname = "C:\test\test.xlsx"
Dim varXLSheet As Variant
Set varXLSheet = CreateObject ("Excel.Application")
varXLSheet.Workbooks.Open (dateiname)
Dim tmp As Variant
If PruefeExcelZelle (varXLSheet, 2, 2) Then
tmp = varXLSheet.Cells(2, 2).value
MsgBox tmp
Else
MsgBox "Fehler"
End If
End Sub

Function PruefeExcelZelle (excel As Variant, zeile As Integer, spalte As Integer) As Integer
On Error GoTo Fehler
Dim tmp As String
tmp = excel.Cells (zeile, spalte).value
PruefeExcelZelle = True
Ende:
Exit Function
Fehler:
PruefeExcelZelle = False
Resume Ende
End Function

--- Ende Code ---

EDIT: eknoris Methode funktioniert natürlich auch, aber das ist ja viel zu einfach ...  ;)


--- Code: ---Option Public
Option Declare

Sub Initialize
Const dateiname = "C:\test\test.xlsx"
Dim varXLSheet As Variant
Set varXLSheet = CreateObject ("Excel.Application")
varXLSheet.Workbooks.Open (dateiname)
Dim tmp As Variant
tmp = varXLSheet.Cells(2, 2).value
If IsArray (tmp) Then
MsgBox tmp (0)
Else
MsgBox "Fehler"
End If
End Sub

--- Ende Code ---

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln