#excel #vba
#excel #vba
Вопрос:
У меня одновременно запущено 3 экземпляра Excel-vba. Иногда, просто иногда, ошибка копирования и вставки. При сбое я просто снова запускаю эту часть кода, и она работает хорошо. Это может произойти с любым методом вставки моего кода.
Я знаю, что это происходит только с несколькими экземплярами Excel, я хочу знать, почему. Рад за помощь!
'Copy to a new Sheet
Call findAndSelectRange("Fabricante", "Grand Total", 5) ' make one selection
Selection.Copy
Workbooks("FFQ.xlsm").Activate
Sheets.Add After:=Workbooks(WORKBOOK_MAIN).Sheets(Workbooks(WORKBOOK_MAIN).Sheets.count)
ActiveSheet.Name = sheetName1
'ThisWorkbook.Worksheets.Select (ThisWorkbook.Worksheets.Count)
Range("A2").Select
ActiveSheet.Paste
Ответ №1:
Вы делаете много выбора и активации, а не просто ссылаетесь на нужные вам книги / листы / ячейки, что, вероятно, все портит.
Немного сложно сказать, как обрабатывать результат вашей FindAndSelectRange
процедуры, хотя я думаю, что это было бы лучше как FindAndReferenceRange
функция, которая возвращает объект диапазона.
Надеюсь, вы сможете выбрать что-то полезное из приведенного ниже кода (обратите внимание, я ничего не выбираю и не активирую).
Sub Test1()
'Variables to hold references to both workbooks and new worksheet.
Dim WORKBOOK_MAIN As Workbook
Dim wrkBk As Workbook
Dim wrkSht As Worksheet
'Set references to workbooks.
Set WORKBOOK_MAIN = ThisWorkbook
Set wrkBk = Workbooks("FFQ.xlsm")
'Set wrkBk = Workbooks.Open("fullpath amp; name")
'Create new sheet and set reference to it.
wrkBk.Worksheets.Add After:=wrkBk.Worksheets(wrkBk.Worksheets.Count)
Set wrkSht = wrkBk.Worksheets(wrkBk.Worksheets.Count)
'Copy cell from B2 to A2.
'The info before `Copy` could be returned by your `findAndSelectRange` function.
'If the function returns a valid range reference you could just write:
'findAndSelectRange("Fabricante", "Grand Total", 5).Copy Destination:=wrkSht.Range("A2")
WORKBOOK_MAIN.Worksheets("Sheet1").Range("B2").Copy _
Destination:=wrkSht.Range("A2")
'If you're only interested in the unformatted value you could use:
'wrkSht.Range("A2") = findAndSelectRange("Fabricante", "Grand Total", 5).Value
End Sub
Комментарии:
1. Спасибо, это решает проблему. Копировальная доска является общей, что довольно опасно использовать ее в нескольких экземплярах.