Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Bastel123 am 08.09.16 - 10:26:39

Titel: Fehler abfangen bei Excel-Import
Beitrag von: Bastel123 am 08.09.16 - 10:26:39
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  
Titel: Re: Fehler abfangen bei Excel-Import
Beitrag von: umi am 08.09.16 - 11:10:11
Moin

evtl. mal ein
if(strcompare(cstr(tmp),"[error]",5)=0 then
probieren
Titel: Re: Fehler abfangen bei Excel-Import
Beitrag von: Bastel123 am 08.09.16 - 14:51:59
Bringt leider auch nur ein "Type mismatch".

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

Gruß Sebastian
Titel: Re: Fehler abfangen bei Excel-Import
Beitrag von: eknori am 09.09.16 - 06:50:16
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. 
Titel: Re: Fehler abfangen bei Excel-Import
Beitrag von: Peter Klett am 09.09.16 - 07:08:54
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

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

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
Titel: Re: Fehler abfangen bei Excel-Import
Beitrag von: Bastel123 am 09.09.16 - 11:42:06
Hallo Ulrich, hallo Peter,

die Abfrage IsArray(tmp) funktioniert.

Vielen Dank für die Mühe die ich Euch gemacht habe....

Gruß und ein schönes Wochenende

Sebastian