2017-05-02 3 views
1

Ich exportiere Daten von Excel nach Access. Die Daten in Excel enthalten Formeln, die Zellen mit Leerzeichen bei if-Funktion belassen: =IF(SISESTUS!B18="";"";SISESTUS!C18.Typenkonfliktfehler bei Vba mit leeren Zellen, die Formeln enthalten

Problem ist: VBA ist nicht in der Lage leere Zellen mit Formeln zu lesen. Dies führt zu einem Typenkonfliktfehler. Wenn ich nur Werte kopiere dann ist ok, mein Exportmakro läuft einwandfrei.

Code:

Sub Export_Data() 
Dim cnn As ADODB.Connection 
Dim rst As ADODB.Recordset 
Dim dbPath 
Dim x As Long, i As Long 
Dim nextrow As Long 

On Error GoTo errHandler:  

dbPath = ActiveSheet.Range("S3").Value 
nextrow = Cells(Rows.Count, 1).End(xlUp).row 

Set cnn = New ADODB.Connection 

If Sheet8.Range("A2").Value = "" Then 
MsgBox " Lisa kirjed tellimusse, midagi pole arhiveerida" 
Exit Sub 
End If 

cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath 

Set rst = New ADODB.Recordset 

rst.Open Source:="Tellimused", ActiveConnection:=cnn, _ 
CursorType:=adOpenDynamic, LockType:=adLockOptimistic, _ 
Options:=adCmdTable  

For x = 2 To nextrow 
rst.AddNew 
For i = 1 To 16 
rst(Cells(1, i).Value) = Cells(x, i).Value 
Next i 
rst.Update 
Next x 

rst.Close 

cnn.Close 

Set rst = Nothing 
Set cnn = Nothing 

MsgBox " Tellimus on edukalt arhiiveeritud" 

Application.ScreenUpdating = True 

Sheet8.Range("R3").Value = Sheet8.Range("T3").Value + 1 

Sheet8.Range("A2:P250").ClearContents 
On Error GoTo 0 
Exit Sub 

errHandler: 

Set rst = Nothing 
Set cnn = Nothing 
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Export_Data" 

End Sub  

Ich denke, nach diesen Zeilen Code, Makro beendet und eine Fehlermeldung geben. Für Klarheit.

For x = 2 To nextrow 
    rst.AddNew 
    For i = 1 To 16 
    rst(Cells(1, i).Value) = Cells(x, i).Value 
    Next i 
    rst.Update 
    Next x 
+1

Auf welcher Leitung scheitert das genau? – jkpieterse

+0

Ihre Frage konkurriert mit allen anderen um die Aufmerksamkeit. Wenn Sie uns dies leichter verständlich machen können, erhalten Sie eher eine funktionierende Antwort. Große Codeblöcke können Menschen abschrecken, da sie Zeit und Mühe brauchen, um sie zu verstehen. Kannst du diesen Code durch einen MCVE ersetzen (Minimal, Complete und Verifizierbar - siehe die [Hilfeseiten] (http://Stackoverflow.com/help/mcve), um Tipps dazu zu erhalten)? –

+0

Für x = 2 bis rst.AddNew Für i = 1 bis 16 rst (Zellen (1, i) .Wert) = Cells (x, i) .Wert Next i rst.Update Next x nextrow –

Antwort

0

Ich würde empfehlen, etwas erkennbar Wert in Ihrer Formel zu verwenden, die das Makro (wie 999999) anstelle von „“ und verarbeiten es in Makro lesen:

mit Paste
If Cells(x, i).Value <> 999999 Then 
    rst(Cells(1, i).Value) = Cells(x, i).Value 
Else 
    rst(Cells(1, i).Value) = "" ' or skip 
End If 
0

ich beheben mein Problem wenn jemand ähnliches Problem hat:

Sub Copy_Data() 
Worksheets("Sheet1").Range("A2:P250").Copy 
Worksheets("Sheet1").Range("U2:AJ250").PasteSpecial xlPasteValues 
End Sub 
Verwandte Themen