edit Проблема в том, что Microsoft KB4484218 удалена, и все, кажется, работает как обычно <_ <. </p>
Первый постер, но долгое время скрывается. Долгая публикация впереди.
У нас есть инструмент цитирования в Excel, который использует код VBA для сравнения введенных кодов продуктов с базой данных Access, база данных basi c ничего необычного, а затем обновляет другой лист с данными, необходимыми для нашего CRM система. Это временное решение, пока не станет доступным более постоянное. Проблема заключается в том, что мы можем захватить 5 цитат, сгенерировать лист CRM, и все в порядке, но на 6-й цитате, когда вы генерируете лист CRM, появляется следующая ошибка VBA.
System Error & H8000FFF ( -2147418113)
Google не сильно помог, и мой уровень кодирования - базовый c, поэтому я снимаю в темноте с исправлениями, которые я пробовал, увеличьте размер буфера, очистите буфер обмена - основные исправления я уже пробовал. Удаление буфера в целом приводит к ошибке почти сразу.
Что я нашел с помощью процесса отладки Step Into, так это то, что cra sh будет происходить в части кода cn.Open
, поэтому он пытается чтобы открыть соединение с Access.
Function CRM_Update(PROD As String)
Application.ScreenUpdating = False
If PROD = "" Then
emptyline = emptyline + 1
Exit Function
Else
emptyline = 0
End If
Set cn = New ADODB.Connection
cn.ConnectionString = "DSN=MS Access Database;DBQ=C:\database\CRMSA.accdb;DriverId=25;FIL=MS Access;MaxBufferSize=4096;PageTimeout=5;"
cn.Open
Set rs = New ADODB.Recordset**
rs.Open "select * from ARTGROUP WHERE ART = '" & PROD & "';", cn, adOpenStatic
If rs.RecordCount = 0 Then
MsgBox (PROD & " " & " not found in article group")
Exit Function
End If
Это похоже на использование памяти, потому что вы можете углубиться в процесс генерации, если у вас очень мало открытых, но как только у вас открыто много элементов : Chrome, Outlook и другие приложения, которые вы можете получить, возможно, 5 попыток генерации. На виртуальной машине с 4 ГБ ОЗУ я смог выполнить этот процесс более 40 раз без единого крейса sh. На моем рабочем ноутбуке с 16 ГБ ОЗУ и только этим открытым я смог генерировать около 16 раз, прежде чем эта ошибка возникнет. Другая интересная информация - это то, что показывает журнал событий:
The system has called a custom component and that component has failed
and generated an exception. This indicates a problem with the custom
component. Notify the developer of this component that a failure has
occurred and provide them with the information below. Component Prog
ID: SC.Pool 455 1 Method Name: IDispenserDriver::CreateResource
Process Name: EXCEL.EXE Exception: c0000005 Address: 0X58101018
Я удалил все пользовательские надстройки и все еще получаю этот cra sh. У меня есть только следующие ссылки на MS на листе, а именно:
VB for Applications
MS Excel 16.0 Object Library
OLE Automation
MS Office 16.0 Object Library
MS Access 16.0 Object Library
Microsoft ActiveX Data Objects 2.8 Library
У кого-нибудь есть идеи относительно того, что происходит? Я также попытался перестроить базу данных, сжать, восстановить и декомпилировать, но это не имеет никакого эффекта. Я белый список базы данных в AV-программе без изменений.
edit
Хорошо. Итак, я попытаюсь разбить это редактирование на 3 части для удобства чтения. Модуль 1 - первый скрипт VB, который, я думаю, открывает базу данных Access. Модуль 2 - это сценарий VB, в котором ячейка A на рабочем листе A отправляется в ячейку A на рабочем листе B, он также открывает соединение с базой данных Access, но я не включил формулу для движущейся части. Есть третий модуль, который сравнивает данные из листа Excel с базой данных Access, а затем назначает коды продуктов, которые, я не думаю, что это проблема, но я опубликую, если два других ничего не обнаружат.
Модуль 1:
Public Function CRM_shortDescr(PROD As String)
Application.ScreenUpdating = False
Set cn = New ADODB.Connection
cn.ConnectionString = "DSN=MS Access Database;DBQ=C:\database\CRMSA.accdb;DriverId=25;FIL=MS Access;MaxBufferSize=4096;PageTimeout=5;"
' The database name was set incorrectly here. Changed to correct name.
cn.Open
Set rs = New ADODB.Recordset
rs.Open "select * from ARTGROUP WHERE ART = '" & PROD & "';", cn, adOpenStatic
If rs.RecordCount = 0 Then
MsgBox (PROD & " " & " not found in article group")
Exit Function
End If
PRGR = rs!crm
rs.Close
rs.Open "select * from PRGR WHERE PRGR = '" & Left(PRGR, 2) & "';", cn, adOpenStatic
If rs.RecordCount = 0 Then
MsgBox (PRGR & " " & " not found in article group")
Exit Function
End If
CRM_shortDescr = rs!Descr
rs.Close
End Function
На самом деле модуль 2 - это тот, который указан выше в начале запроса о помощи, отсутствующие строки:
italyrow = 19 + emptyline
linenumber = ActiveCell.Row
linenumbercrm = linenumber - italyrow
<Formual starts to move from Sheet A to Sheet B but looks like the following
`Worksheets("CRM").Cells(linenumbercrm, 1).Value = Worksheets("Local Quotation").Range("COUNTRY")>
rs.Close
End Function
Надеюсь, это поможет:).