В версии 2023.1 зависает Excel, если открыть файл и сразу же закрыть его. Долго думает и выдает: "Microsoft Excel is waiting for another application to complete an OLE action". Офис 365. Проблема в PLEX, т.к. если его выключить, проблема отсутствует.
И есть код VBA, где я в двухмерный массив загружаю название цвета и сам цвет:
Код
Sub GetAccessData()Application.ScreenUpdating = False
Dim RS As ADODB.Recordset
Dim CON As ADODB.Connection
Dim arr, i%
Set RS = New ADODB.Recordset
Set CON = New ADODB.Connection
CON.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Access\test.accdb"
Set RS.ActiveConnection = CON
RS.CursorLocation = adUseClient
'Очистка
Cells.ClearContents
'Основная часть
RS.Open "SELECT ColorName, Color FROM tbl_test"
arr = RS.GetRows(RS.RecordCount)
[A1].Resize(UBound(arr, 2) + 1, 1) = Application.WorksheetFunction.Transpose(arr)
'?????
RS.Close: CON.Close
Set RS = Nothing: Set CON = Nothing
Application.ScreenUpdating = True
End Sub
Вот там, где стоят 5 знаков вопроса, хотел вставить код, который будет из массива arr (1 to 5, 2) вставлять свойство Interior.Color в ячейки, начиная с [A1], равный значению каждого элемента из этого массива.
Есть ли такая возможность в VBA? Или нужно обязательно циклы использовать?
Необходимо построить обработку ошибок с двумя разными метками выхода (всё в цикле): 1. Если возникает ошибка до условия If, то просто переходим на End Sub. 2. Если возникает ошибка в условии If, то переходим на Netx.
Прошу помочь разобраться почему на срабатывает макрос . Спасибо.
Грузить файлы запрещено в организации, поэтому опишу пример. Есть книга со значениями на Листе1 [A1:A5]={1;2;3;4;5} и макрос:
Код
Sub test()
Dim i%, x#
[B:B].ClearContents
For i = 1 To 10
On Error GoTo errH1
If Cells(i, 1).Value > 3 Then
On Error GoTo errH2
x = 1 / 0
End If
'Если ошибка в условии цикла, значит Netx
errH2:
If Err.Number > 0 Then
Cells(i, 2).Value = "Ошибка 2"
Err.Clear
End If
Next
'Если ошибка перед условием цикла, значит End
errH1:
If Err.Number > 0 Then
Cells(i, 2).Value = "Ошибка 1"
End If
End Sub
После очистки от ненужных стилей в книге остались стили, которые не удаляются (даже вручную). При попытке их применить выскакивает сообщение "Стиль '1' не найден". Есть ли возможность просто удалить их из списка, не прибегая к удалению styles.xml?
И еще один вопрос: почему после прогонки макросом по удалению неиспользуемых стилей слетели некоторые ячейки с процентным форматом? Пользовался PLEX.
Появилась необходимость рассчитать амортизацю пропорционально объёму текущего года на остаток всего объёма (пример во вложении). Например, вводится в 2017г. основное средство (ОС) на сумму 500 т.р. Оставшийся объём для этого ОС считается как сумма 2017-2025гг (27566). Далее, ежегодно считается пропорция: 500т.р./27566*объём текущего года. Я написал алгоритм и кажется всё работает. Но у него есть 2 больших минуса: он поддеживает только 3 ввода ОС, для расчёта амортизации одного ОС нужно аж 3 строки в Excel.
Хотел бы спросить: существует ли способы упрощения данного алгоритма?
Помогите, пожалуйста, сообразить как можно написать формулу (не VBA). Во вложении пример.
Суть в том, что есть объём продукции по годам. Есть флаг, который увеличивает норму до конца периода. Когда вводится флаг, в формулу СУММ добавляется еще одно значение диапазона с момента ввода до конца периода. И так каждый раз.
Есть такая строка: ёЕСЛИ(K$2<ё($D16+$D17-1);ЕСЛИ(СУММ($I9:K9)+$D22<ё$D18;K9;ЕСЛИ(СУММ($I9:K9)+$D22<ё$D18;$D18-СУММ($I9:K9)+$D22;0));0)*ЕСЛИ(ВПР($B13;Fil!$C$12:$F$28;3)ёВПР($B13;Fil!$C$12:$F$28;4);ЕСЛИ($D21<ё0,05;1 ;) ;1)*ЕСЛИ(K$2<$D15+$D17;1 ;)
Пытаюсь заменить "ё" на "=" методом cells.replace, но не получается :( Подскажите, пожалуйста, где я ошибся? Даже макрорекордер не может повторить такое... И ошибок нет.
Добрый день. Столкнулся с такой функцией: {=TABLE(x, y)} Написана на листе екселя, не является формулой, а простой массив с данными. Как-то давно я уже находил ответ, что же это за функция, но никак не могу вспомнить сейчас...
Добрый вечер. Делаю книгу, на каждом листе которой будет распологаться форма с определенными checkbox. Есть ли возможность сохранить данные формы при выходе?
Если нет простых способов, то я попытаюсь при каждом изменении чекбокса в ячейку A1 записывать данные, типа: 1,0,1,1,1,0,1 итд, где 1 - чекбокс true, 0 - false. И при открытии книги или активации листа будет считываться эта строка и выставлять нужные значения в чекбоксы. Может есть более простой способ? Поделитесь, пожалуйста. Буду признателен. Спасибо.
Прекрасно работает на листе, где распаложены данные. А вот если с другого листа подтягивать, то 0 выходит... Как можно узнать положение x (range): имя книги, имя листа? Спасибо.
Возникла такая проблема: макрос открывает файл и грузит из него список листов, затем по этому списку листов грузит данные. Но список листов он грузить не успевает, т.к. файл, который открывает макрос очень большой (содержит кучу других макросов и графиков), поэтому он не может загрузить данные... Что можно сделать, чтобы файл сначала полностью грузился, а потом только макрос выполнялся? Либо возможно ли сделать так, чтобы без открытия файла собирались данные?
Здравствуйте. Подскажите, пожалуйста, почему макрос работает только через F8. Через F5 выходит ошибка: "Приложению Ms Excel не удается вставить данные".
Добрый день. Вопрос такого характера. Есть макрос:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) rRow = Cells(1000, 4).End(xlUp).Row If Target.Row >= 4 And Target.Row <= rRow And Target.Column = 2 Then If Target.Text = "Добавить файл" Then fName = Application.GetOpenFilename If fName <> "False" Then _ ActiveSheet.Hyperlinks.Add Anchor:=Target, Address:=fName, TextToDisplay:=fName Else Exit Sub End If End If End Sub
Он прекрасно работает во 2 столбце в любой ячейке указанного диапазона. Но если объединить строки (например две), то он уже не работает... Как это можно исправить? Спасибо.
Возможно ли в ячейку, например, А3 вставить гиперссылку с именем "Открыть файл" на условие Application.GetOpenFilename, а при выборе файла данная гиперссылка заменялась бы на нормальную? Или может есть другой способ? Без применения кнопок?
Добрый день. Подскажите, пожалуйста, как можно сделать выход из процедуры, если файл не выбран. Вот мой нерабочий вариант:
Sub load_file() Dim fRow, getF getF = Application.GetOpenFilename fRow = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row Set FSO = CreateObject("Scripting.FileSystemObject") Set File = FSO.GetFile(getF) If getF = "" Then Exit Sub ------ Тут не работает... (( Cells(fRow, 5) = File.Name Cells(fRow, 6) = File.DateCreated Exit Sub
Пытаюсь написать макрос для извлечения свойств файла. Получилось так:
Sub load_file() Set FSO = CreateObject("Scripting.FileSystemObject") Set File = FSO.GetFile(Application.GetOpenFilename) Cells(4, 4) = File.Name Cells(4, 5) = File.DateCreated Cells(4, 6) = File. --- тут не могу сделать автора файла Cells(4, 7) = File.DateLastModified Cells(4, 8) = File. --- тут не могу сделать кто последний раз менял файл Cells(4, 9) = File End Sub
Здравствуйте. Подскажите, пожалуйста, как вывести полный путь до файла в ячейку A5, например,при условии: 1. Создал макрос: file = Application.GetOpenFilename(MultiSelect:=True) 2. Сделал кнопку на макрос.
Т.е. при выборе файла в ячейке A5 должен прописываться полный путь до него. Файл также может лежать на сетевом диске V:\Цены\price.xls (но чтобы не было: \\company-01\Mark\Цены\price.xls). Спасибо.
Здравствуйте. Имеется диапазон от A до Z в "Книга1" с сылками на "Книга2" в строке 1. Имеется диапазон от A до Z в "Книга1" с сылками на "Книга3" в строке 2. Как можно в строке 3 быстро сложить эти 2 диапазона также ссылками, а не формулами (типа =A1+A2). А именно: A1: ='c:\[Книга1.xls]Лист1'!G$94 A2: ='c:\[Книга2.xls]Лист1'!F$4 В A3 должно быть: ='c:\[Книга1.xls]Лист1'!G$94+'c:\[Книга2.xls]Лист1'!F$4.
В ссылках выделение я делал по видимым ячейкам, так что просто сложить 1 столбец и протянуть не получится. Прошу помощи. Спасибо.
Здравствуйте. Помогите, пожалуйста, написать макрос, где бы при изменении данных менялись цвета столбцов.
Примерный макрос: Const rAd = "C7:C18" Sub colour() For Each ... In Range(rAd) Если C7<0 значит красный Если C7>0 значит зеленый Если C7=0 значит пропускать Next End Sub
Дело в том, что один столбец может состоять из нескольких столбиков. Их все нужно закрасить в соответствующий данным цвет.
Здравствуйте. Подскажите, пожалуйста, как в приведенном примере сделать автоматическое распределение сумм? Даны числа 10, 15, 25. Сумма по-горизонтали и вертикали равны, но заполнять приходится вручную. Есть какая-нибудь формула, которая автоматически будет распределять данные суммы по-вертикали, в соответствии с числами 10, 15, 25?
Наверно непонятно написал). В примере более доступно нарисовано)