Я использую приведенный ниже скрипт для копирования и вставки данных между книгами в MS Excel 2016 с использованием VB Script.Я использую скрипт в инструменте автоматизации, который его вызывает, и элемент управления возвращается, когда выполнение скрипта завершено.Когда я подключаю Excel в качестве базы данных и извлекаю все вставленные данные, я могу получить все записи.Однако наблюдается, что иногда данные не вставляются в лист назначения, когда я его открываю, даже когда на исходном листе есть данные, и выполнение сценария не завершается ошибкой (проверено с помощью используемых флагов ошибок).Эта проблема возникает периодически и не зависит от сценария, рабочей книги или компьютера.Подобная проблема возникает в скрипте дублирования формул, среди других.Пожалуйста, помогите решить проблему и найти причину.Кроме того, дайте мне знать, если есть какие-то конкретные настройки Excel / Windows, которые необходимо выполнить.
1) VB SCRIPT 1: КОПИРОВАНИЕ И ПАСТА ДАННЫХ КАК ЗНАЧЕНИЯ МЕЖДУ РАБОЧИМИ УЧЕТАМИ
On Error Resume Next
strFlag = 0
strWorkbookNameCopy = WScript.Arguments(0)
strWorkbookNamePaste = WScript.Arguments(1)
strSheetCopy = WScript.Arguments(2)
strSheetPaste = WScript.Arguments(3)
strCopyRange = WScript.Arguments(4)
strPasteSpecialRange = WScript.Arguments(5)
'Below lines are added for understanding of above parameters passed
'strWorkbookNameCopy = "F:\SPR\Input & Output\SourceWorkbook.xlsx"
'strWorkbookNamePaste = "F:\SPR\Input & Output\DestinationWorkbook.xlsx"
'strSheetCopy = "SourceWorksheetName"
'strSheetPaste = "DestinationWorksheetName"
'strCopyRange = "A2:A500"
'strPasteSpecialRange = "B2"
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = False
objExcelApp.DisplayAlerts = False
Set objWorkbookCopy = objExcelApp.Workbooks.Open(strWorkbookNameCopy)
Set objWorkbookPaste = objExcelApp.Workbooks.Open(strWorkbookNamePaste)
Set objSheetPaste = objWorkbookPaste.Sheets(strSheetPaste)
Set objSheetCopy = objWorkbookCopy.Sheets(strSheetCopy)
With objSheetCopy
.Range(strCopyRange).Copy
End With
With objSheetPaste
.Range(strPasteSpecialRange).PasteSpecial -4163
End With
objWorkbookCopy.Save
objWorkbookCopy.Close
objWorkbookPaste.Save
objWorkbookPaste.Close
Set objExcelApp = Nothing
If Err.Number=0 Then
strFlag = 1
End If
Err.Clear
WScript.StdOut.WriteLine(strFlag)
2) VB SCRIPT 2: ДУБЛИКАЦИЯ ФОРМУЛЫ В MS EXCEL (ДРАГОЦЕННАЯ ФОРМУЛА В КОЛОННЕ) При ошибке Resume Next strFlag = 0
strWorkbookName = WScript.Arguments(0)
strSheet = WScript.Arguments(1)
strReferenceColumnName = WScript.Arguments(2)
strDuplicateStartCellAddress = WScript.Arguments(3)
strDuplicateEndCellColumn = WScript.Arguments(4)
'Below lines are added for understanding of above parameters passed
'strWorkbookName = "F:\SPR\Input & Output\WorkbookToDragFormula.xlsx"
'strSheet = "FormulaDragWorksheetName"
'strReferenceColumnName = "C" (The column on the basis of which drag and drop has to be done. This column gives total number of rows for which formula needs to be duplicated.
'strDuplicateStartCellAddress = "A3" (First cell where formula is present)
'strDuplicateEndCellColumn = "B" (Last cell column where formula is present)
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = False
objExcelApp.DisplayAlerts = False
Set objWorkbook = objExcelApp.Workbooks.Open(strWorkbookName)
Set objSheet = objWorkbook.Sheets(strSheet)
xlUp = -4162
Set LastCell = objSheet.Range(strReferenceColumnName & objSheet.Rows.Count).End(xlUp)
Set FillRange = objSheet.Range(strDuplicateStartCellAddress & ":" & strDuplicateEndCellColumn & LastCell.Row)
FillRange.FillDown
WScript.Sleep 10000
objWorkbook.Save
objWorkbook.Close True
Set objWorkbook = Nothing
Set objExcelApp = Nothing
If Err.Number=0 Then
strFlag = 1
End If
Err.Clear
WScript.StdOut.WriteLine(strFlag)