Domino 9 und frühere Versionen > ND9: Entwicklung
Fehler abfangen bei Excel-Import
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