Мой код доступа VBA для создания файлов Excel с подключениями к данным работает с первым файлом, а затем всегда происходит сбой в случайных точках - PullRequest
0 голосов
/ 14 февраля 2020

Я написал некоторый код в Access, чтобы скопировать файл шаблона Excel, выполнить несколько ссылок sh и простые преобразования для копии, сохранить, а затем перейти к следующему файлу. Первоначально я мог создавать несколько файлов, просматривая список, но продолжал получать странные ошибки в случайных строках во время последующих итераций. Я избегал Active что-либо, так как это кажется проблематичным c, но все же код не работает на второй итерации. Главным образом это на Connection.Refre sh, но иногда это другие строки, такие как «Метод строк объекта Global fail». Я довольно опытный в этом. Я также пытался установить все мои объекты VBA Excel в конце каждого l oop, но это не помогло. Код ниже. Любые идеи с благодарностью получены:

Sub CreateFilesIndividual()

     Dim mw As Variant
     Dim ccount As Integer
     Dim rs As Recordset
     Dim i As Integer

     Set rs = CurrentDb.OpenRecordset("SELECT CM1920 as CM from Comm1920 order by rscount desc", dbOpenSnapshot)
     If rs.RecordCount = 0 Then
         MsgBox "No Commissioners Codes available - exiting"
         Exit Sub
     End If

     For i = 1 To rs.RecordCount
         CreateFile rs("CM")
     Next

End Sub

Sub CreateFile(commCode)

     Dim templateloc As String
     Dim fileloc As String
     Dim Xl As Excel.Application
     Dim wb As Excel.Workbook
     Dim ws As Excel.Worksheet
     Dim ws2 As Excel.Worksheet
     Dim ws3 As Excel.Worksheet
     Dim ws4 As Excel.Worksheet

     templateloc = "\\gstt.local\Users\01\MWaring\Documents\Bespoke Report Requests\Contracts automation\Proposal template CCGs 2021 v2.6.xlsm"
     fileloc = "\\gstt.local\Users\01\MWaring\Documents\Bespoke Report Requests\Contracts automation\test\Proposal CCGs 1920 v2.6 " & commCode & ".xlsm"

     FileCopy templateloc, fileloc
    '
     Set Xl = CreateObject("Excel.Application")
     Set wb = Xl.Workbooks.Open(fileloc)
     Set ws = wb.Sheets("Commissioner Summary")
     ws.Unprotect
     ws.Cells(2, 4) = commCode.Value
     Debug.Print ws.Cells(2, 4).Value & " - " & commCode.Value
     wb.Connections("Update1").Refresh
     Set ws2 = wb.Sheets("Contract Category Detail")
     ws2.Range("A:AM").Copy

     Set ws3 = wb.Sheets("CC detail")
     ws3.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths
     ws3.Range("A1").PasteSpecial Paste:=xlPasteFormats
     ws3.Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False

    ws3.Range("AG3").FormulaR1C1 = "=ROUND(RC[-2]+RC[-1],0)"
    Dim myrange As Integer
    myrange = ws3.Range("A" & Rows.Count).End(xlUp).Row
    ws3.Range("AG3:AG" & myrange).FillDown

    ws3.Range("AL3").FormulaR1C1 = "=RC[-5]*RC34"
    ws3.Range("AL3:AL" & myrange).FillDown
    ws3.Range("A:AM").Copy

    Set ws4 = wb.Sheets("Contract_Category_detail")
    ws4.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths
    ws4.Range("A1").PasteSpecial Paste:=xlPasteFormats
    ws4.Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False

    ws2.Delete
    ws3.Delete

    wb.Save
    wb.Close

    'Clean up
    Xl.Quit
    Set ws = Nothing
    Set ws2 = Nothing
    Set ws3 = Nothing
    Set ws4 = Nothing
    Set wb = Nothing
    Set Xl = Nothing

End Sub

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Мне кажется, у меня была странная ошибка (вероятно, та же самая), когда я выполнял множество операций копирования-вставки в Excel из Access. Затем я создал функцию ClearClipboard (), которую я вызываю после всей такой операции. Вот оно:

Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long

Public Function ClearClipboard()
    OpenClipboard (0&)
    EmptyClipboard
    CloseClipboard
End Function

Попробуйте. Надеюсь, это поможет.

0 голосов
/ 15 февраля 2020

Просто любопытно ... когда вы в последний раз перезагружали свою машину. Прошло много времени с тех пор, как я сделал что-то важное с VBA, но, насколько я помню, иногда я получал странные и необъяснимые ошибки, как вы описали. Я проследил ошибки, чтобы контролировать перерывы; когда вы останавливаете код VBA, одновременно нажимая клавиши Ctrl + Break. Через некоторое время контрольные перерывы будут накапливаться, и это вызовет все виды странных проблем. Просто перезагрузка машины исправила все. Попробуйте и поделитесь своими результатами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...