Скопируйте большой живой лист из закрытой книги в рабочую книгу, остановите вычисления, Excel VBA, Mac OSX
Новый пользователь VBA здесь, спасибо за ваше терпение. Я хочу скопировать и вставить в качестве значений диапазон от одного закрытого листа к активному листу. В частности, я хочу использовать VBA в активной книге для копирования диапазона A1: HW6000 со вкладки «AllData» в TOOL.XLSM, в то время как TOOL.XLSM закрывается и вставляется в активную книгу в диапазоне A1: HW6000 в активном листе в качестве значений ,
У меня есть код, который будет делать это (забота о Peh в stackoverflow, спасибо Peh!), Но код работает вечно (более 45 минут), потому что запуск кода, похоже, пересчитывает как новую рабочую книгу, так и книгу импорта в том же времени, а книга импорта (TEST.xslm) очень велика. Я бегу на Mac. Вот код, который у меня есть:
Sub ImportData() Dim App As New Excel.Application 'create a new (hidden) Excel ' remember active sheet Dim wsActive As Worksheet Set wsActive = ThisWorkbook.ActiveSheet ' open the import workbook in new Excel (as read only) Dim wbImport As Workbook Set wbImport = App.Workbooks.Open(Filename:="/Users/cwight/Desktop/TOOL.xlsm", UpdateLinks:=True, ReadOnly:=True) 'copy the data of the import sheet wbImport.Worksheets("AllDATA").Range("A1:HW6000").Copy wsActive.Range("A1").PasteSpecial Paste:=xlPasteFormats 'paste formats wsActive.Range("A1").PasteSpecial Paste:=xlPasteValues 'paste values App.CutCopyMode = False 'clear clipboard (prevents asking when wb is closed) wbImport.Close SaveChanges:=False 'close wb without saving App.Quit 'quit the hidden Excel End Sub
Могу ли я интегрировать следующие биты кода, чтобы отключить вычисления во время процесса импорта? Если да, то как именно? Я не могу разобраться:
- Использование адресов (назначенных отдельными переменными) в формулу
- Вставка Особая проблема при объединении условных форматов в Excel для Mac
- Сравнение двух листов в Excel Visual Basic
- IF LOOP в функции VBA
- Почему я вижу существенную разницу во времени при закрытии таблицы Excel на разных компьютерах?
Application.Calculation = xlCalculationManual Application.ScreenUpdating = False Application.DisplayStatusBar = False
Есть ли что-нибудь еще, что я могу сделать? Спасибо вам огромное за ваше время.
- Копирование значения ячейки в лист шаблона в Excel с помощью VBA
- Проблема с HYPERLINK
- Macintosh excel Из импорта данных XML
- Excel VBA Копирование и вставка в следующую пустую строку на другом листе
- Excel VBA :: Найти функцию в цикле
- VBA Excel для Mac - путь к файлу
- как открыть файл excel в MAC из сетевого местоположения или общей папки с помощью VBA?
- ActiveSheet и WorkSheet
здесь это функция, которая использует векторы для копирования данных из одного excel в другой, не забудьте назначить это кнопке и в ячейку указать путь. создайте модуль с именем: «FUNCTIONS» и вставьте его туда:
Function range_to_variant(variant_arr As Variant, sheet As Worksheet, first_range As String, last_column As String, last_row_column As String) variant_arr = sheet.Range(first_range & ":" & last_column & sheet.Cells(sheet.Rows.Count, last_row_column).End(xlUp).Row).Value End Function Function array_to_range(variant_arr As Variant, sheet As Worksheet, first_range As String) 'example ' Call array_to_range(new_variant, Worksheets("Sheet1"), "1.1") Dim split_arr() As String split_arr = Split(first_range, ".") Dim range1 As String Dim range2 As String Dim range3 As String Dim range4 As String range1 = Replace(sheet.Cells(CInt(split_arr(0)), CInt(split_arr(1))).Address, "$", "") range2 = Replace(sheet.Cells(CInt(split_arr(0)) + UBound(variant_arr, 1) - 1, CInt(split_arr(1)) + UBound(variant_arr, 2) - 1).Address, "$", "") sheet.Range(range1 & ":" & range2).Value = variant_arr sheet.Range(range1 & ":" & range2).Columns.AutoFit End Function
После того, как вы закончите, создайте 2 sub, в которых написано:
Sub select_fle2() Call Select_file("b10", "xlsm") End Sub Sub Run() Dim xl As New Excel.Application xl.Workbooks.Open (Worksheets("MAIN").Range("B7").Value) xl.Visible = False Dim raw_data As Variant Call range_to_variant(raw_data, xl.Worksheets("your_sheet_name"), "A1", "HW", "A") xl.Quit Set xl = Nothing ThisWorkbook.Worksheets("sheet_paste").Columns("A:HW").ClearContents Call array_to_range(raw_data, Worksheets("sheet_paste"), "1.1") End sub