Autor Thema: Fehler abfangen bei Excel-Import  (Gelesen 2965 mal)

Offline Bastel123

  • Senior Mitglied
  • ****
  • Beiträge: 355
  • Geschlecht: Männlich
Fehler abfangen bei Excel-Import
« 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  
« Letzte Änderung: 09.09.16 - 11:42:28 von Bastel123 »
Gruß Sebastian
-----------------------------------------------------
Kaum macht man's richtig, schon funktioniert's.

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: Fehler abfangen bei Excel-Import
« Antwort #1 am: 08.09.16 - 11:10:11 »
Moin

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

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Bastel123

  • Senior Mitglied
  • ****
  • Beiträge: 355
  • Geschlecht: Männlich
Re: Fehler abfangen bei Excel-Import
« Antwort #2 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
Gruß Sebastian
-----------------------------------------------------
Kaum macht man's richtig, schon funktioniert's.

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Fehler abfangen bei Excel-Import
« Antwort #3 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. 
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Fehler abfangen bei Excel-Import
« Antwort #4 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
« Letzte Änderung: 09.09.16 - 07:37:40 von Peter Klett »

Offline Bastel123

  • Senior Mitglied
  • ****
  • Beiträge: 355
  • Geschlecht: Männlich
Re: Fehler abfangen bei Excel-Import
« Antwort #5 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
Gruß Sebastian
-----------------------------------------------------
Kaum macht man's richtig, schon funktioniert's.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz