Hallo Tony,
vielleicht hilft dieser Code weiter?
Sub FixNV()
Dim wshList As Worksheet
Dim rngNV As Range
Dim bError As Boolean
Set wshList = ThisWorkbook.Worksheets(1)
Do
Set rngNV = wshList.Range("A:A").Find(what:="#N/A")
If Not rngNV Is Nothing Then
rngNV.Value = getEAN(bError)
If bError Then
MsgBox "Es ist ein Fehler beim auslesen der EAN-Liste aufgetreten", vbCritical
rngNV.Select
Exit Do
End If
End If
Loop While Not rngNV Is Nothing
End Sub
Function getEAN(ByRef bError As Boolean) As String
On Error GoTo Err_Handler
Dim wbk As Workbook
Dim wsh As Worksheet
Dim rngEAN As Range
bError = False
Set wbk = GetWorkbook(ThisWorkbook.Path & "\EAN.xlsx")
Set wsh = wbk.Worksheets(1)
For Each rngEAN In Intersect(wsh.UsedRange, wsh.Range("A:A")).Cells
If IsNumeric(rngEAN.Value) Then
getEAN = rngEAN.Value
rngEAN.ClearContents
wbk.Save
Exit For
End If
Next
wbk.Close
Err_Exit:
Exit Function
Err_Handler:
Err.Clear
bError = True
Resume Err_Exit
End Function
Function GetWorkbook(sFullFilename As String) As Workbook
Dim wbk As Workbook
Dim bFound As Boolean
For Each wbk In Application.Workbooks
If LCase(wbk.FullName) = LCase(sFullFilename) Then
Set GetWorkbook = wbk
bFound = True
Exit For
End If
Next
If Not bFound Then
Set GetWorkbook = Application.Workbooks.Open(sFullFilename)
ThisWorkbook.Activate
End If
End Function
Der Code muss in die Arbeitsmappe mit den zu ersetzenden "#NV" Werten als Modul eingesetzt werden.
Zusätzlich muss im gleichen Pfad eine EAN.xlsx Arbeitsmappe vorhanden sein, in der die zur Verfügung stehenden EANs aufgelistet sind.
In einer Mehrbenutzerumgebung kann es dazu kommen, dass ein Fehler beim Öffnen der EAN-Arbeitsmappe auftritt, da eine Arbeitsmappe nicht von mehreren Personen gleichzeitig zum bearbeiten geöffnet werden kann.
Mit dem Aufruf von FixNV werden alle Zellen in der Spalte A durch die EANs ersetzt.
LG, Ben
|