Я написал некоторый код в 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