ошибка вставки при попытке запустить с несколькими экземплярами Excel

#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. Спасибо, это решает проблему. Копировальная доска является общей, что довольно опасно использовать ее в нескольких экземплярах.