Anzeige
Archiv - Navigation
1636to1640
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Excel to Access "Nullwerte"

Excel to Access "Nullwerte"
15.08.2018 12:02:07
Marco
Hallo,
ich versuche Daten von Excel auf Access zu transferieren. Später werde die Daten in Access über ein anderen Programm (DBxtra) abgerufen. Letztere benutzt dabei selbige Sprache/Syntax wie Access.
Der Großteil der Daten in Excel sind zwar Zahlen, weil mit denen aber nicht gerechnet wird, werden sie als Text abgespeichert.Zahlen mit denen ich später doch mal rechnen müsste, werden beispielsweise mit CDbl(Ausdruck) konvertiert. Klappt auch problemlos.
Schwierigkeiten habe ich bei unvollständigen Einträgen. Die Zahl der Spalten und Reihen sind in fast allen Fällen fix und fast alle Zellen haben einen Wert. Es gibt jedoch wenige Ausnahmen, manche Spalten haben nur in 4 der 12 Zeilen Werte. Bei den 12 Zeilen handelt es sich um die Monate Januar bis Dezember, weil aber erst April ist, werden nur die Daten bis eben April angegeben. Ausstehende Daten werden als vbNullString übergeben. Muss aber in diesen Fall gerechnet werden und die Textfelder wieder in Zahlen konvertiert werden, wird das später beim Abruf in DBxtra kritisch. Die vbNullString Werte werden wohl als 0 aufgenommen statt "nix" und deswegen nicht angezeigt. Angezeigt wird lediglich Januar bis April. Ich will jedoch alle 12 Zeilen anzeigen lassen, Spalten wo es keine Daten gibt bleiben halt "echt" leer. Der Code unten entspricht der Situation wie oben beschrieben. Ich habe mich mit IsNull oder ähnliches versucht, um einfach leere Inputfelder zu übergeben, leider ohne Erfolg. Diese Codezeilen habe daher wieder rausgenommen.
Sub PushTableToAccess()
Dim cnn As ADODB.Connection
Dim MyConn
Dim rst As ADODB.Recordset
Dim i, j, k, m As Long
Dim RowNumber, ColNumber As Long
'get all relevant database worksheet names (starting with DB)
Dim SheetNameCol As Collection
Set SheetNameCol = New Collection
Dim tempName As String
j = 0
For i = 1 To Sheets.Count
tempName = Left(Sheets(i).Name, 2)
If tempName = "DB" Then
j = j + 1
SheetNameCol.Add Sheets(i).Name
End If
Next i
'create the connection to the database
Set cnn = New ADODB.Connection
MyConn = ThisWorkbook.Path & Application.PathSeparator & TARGET_DB
With cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open MyConn
End With
'go to the correct sheet and determine the # of used rows and columns
For m = 1 To SheetNameCol.Count
ActiveWorkbook.Worksheets(SheetNameCol(m)).Activate
RowNumber = Range("A65536").End(xlUp).Row 'row number
ColNumber = FieldNameNumber(SheetNameCol(m)) 'columns number
'create the recordset
Set rst = New ADODB.Recordset
rst.CursorLocation = adUseServer
rst.Open Source:=SheetNameCol(m), _
ActiveConnection:=cnn, _
CursorType:=adOpenDynamic, _
LockType:=adLockOptimistic, _
Options:=adCmdTable
'Load all records from Excel to Access,
'by looping through the rows and columns
For i = 2 To RowNumber
rst.AddNew
'field headings are in row 1 of the worksheet.
For j = 1 To ColNumber
If Cells(i, j).Value = "" Then
rst(Cells(1, j).Value) = vbNullString
Else: rst(Cells(1, j).Value) = Cells(i, j).Value
End If
Next j
rst.Update
Next i
' Clean up
rst.Close
Set rst = Nothing
Next m
cnn.Close
Set cnn = Nothing
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
teste mal: rst(Cells(1, j).Value) = Empty
15.08.2018 13:15:56
JoWE
AW: Excel to Access "Nullwerte"
15.08.2018 14:20:24
Marco
Bleibt bei der entsprechenden Zeile hängen mit dieser Fehlermeldung:
"Sie wollten den Null-Wert einer Variablen zuweisen, die nicht den Datentyp Variant hat."
Laufzeitfehler: 80040e21
AW: Excel to Access "Nullwerte"
15.08.2018 16:02:22
JoWE
Dim i, j, k, m As Long
also könntest Du die Variable "j" als variant dimensionieren?
Gruß
Jochen
AW: Excel to Access "Nullwerte"
15.08.2018 16:16:16
Marco
habe alle Variablen mal als Variant deklariert, weiterhin gleiche Fehlermeldung.
Wenn ich das hier richtig verstehe:
https://stackoverflow.com/questions/8522323/what-is-the-difference-between-empty-and-isempty-in-vba-excel
Setzt Empty den Wert auf den Standard-Excelwert 0 (wusste nicht das Excelzellen einen Standardwert 0 haben). Bekomme auch später immer die leicht kryptische Fehlermeldung im Nachfolgeprogramm DBxtra, dass ich versuche mit 0 zu arbeiten.
Anzeige
AW: Excel to Access "Nullwerte"
15.08.2018 17:03:55
JoWE
hmm, da fällt mir noch cells(1,j).clearcontents
ein. Aber vermutlich ist auch das nicht des Rätsels Lösung.
Vielleicht könntest Du aber den Fehler für eine irgendwie geartete Fehlerbehandlungslösung nutzen?
so in etwa.

on error goto f_Behandler
f_Behandler::
Select Case Err.Number
Case 6  'Überlauf (negativer Wert)
Resume
Case 11 'Division durch "0"
i = 0
Resume Next
Case 13 'Typen unverträglich (Text)
Resume Ende
End Select

Gruß
Jochen
AW: Excel to Access "Nullwerte"
16.08.2018 10:46:44
Marco
Hallo Jochen,
ich habe einen Tipp vom Software-Hersteller von DBxtra erhalten, konnte das Problem vorerst lösen. Vielen Dank für deine Ratschläge.
SG Marco
Anzeige
AW: Excel to Access "Nullwerte"
20.08.2018 15:38:50
Luschi
Hallo Marco,
schade daß Du auch nur ein Leecher bist:
- viel Abstauben vom Wissen Anderer
- eigenes Wissen aber für sich behalten
Dieser Tipp vom Software-Hersteller hätte mich auch interessiert!
Gruß von Luschi
aus klein-Paris
AW: Excel to Access "Nullwerte"
20.08.2018 16:48:42
Marco
Hallo Luschi,
musste erstmal gucken was ein Leecher ist. Bin ich natürlich nicht, bin aber selten in Foren unterwegs und hatte daran einfach nicht gedacht. Sorry.
Mein verwendeter Code in besagter Software (die Access Syntax versteht):
IIF(Field1 = "", Null,
CDbl(Field2)) As Umsatz
Am Ende also relativ simpel. Unter Umständen könnte auch es auch so aussehen (funzte bei mir konkret nicht):
IIf(Field2 Is Null, 0, Field2)
SG Marco
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige