Новости:

Форум на данный момент в стадии обновления. Если у Вас возникли проблемы со входом в свою учетную запись - просьба писать на email: info@excel-vba.ru

Главное меню

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.

Просмотр сообщений

Темы - kykym6p

#1
Доброго всем дня!

При открытии книги с макросом, эксель в оперативной памяти занимает 20мб, макрос довольно таки тяжелый, работыет с другими книгами, но в конце все их закрывает и открытой остается только первоначальная книга. Но уже после отработки макроса в первый раз, эксель в памяти занимает 300-400мб, если запускать второй раз, то получаю Out of memory.
Подскажите как чистить оперативную память?
#2
Доброго всем дня!
Макросом расставляю формулы на листе:
.Cells(1,y).Copy
.Cells(10, y).PasteSpecial Paste:=xlPasteFormulas

После этого пересчитываю лист, т.к. для дальнейшей работы макроса нужны значения, полученные формулами
.Calculate
И вот на этом пересчете макрос ужасно зависает. Формул получается много, порядка 100 000, а то и больше. Если пересчет пропустить, то макрос отрабатывает за 12 минут, если пересчитывать то 45-60.
Если просто нажать на листе F9 то пересчет формул занимает 1-2 минуты. Почему такое может быть? Не хотелось бы формулы менять на рассчеты в массивах.

Спасибо!
#3
Здравствуйте всем!

Возникла следующая проблема: имеются 2 массива, в первом имя фамилия, а во втором фамилия и номер телефона. Необходимо получить массив имя,фамилия,номер телефона. Задача элементарная, но массивы довольно таки большие(300 000 строк и 50 000 строк) и поиск происходит долго. Подскажите идеи как можно ускорить поиск, может сортировки какие, или еще какие нить хитрости?
#4
Здравствуйте!

Имеется небольшой файл, размером 5мб. Внутри несколько листов с данными, несколько листов с формулами считающими на основе этих данных. Ничего необычного. Но при попытке создать новый лист Excel зависает минуты на 3-4, и это Жутко раздражает. В чем может быть проблема? Хотелось бы понять чем он (Excel) занимается 3 минуты перед созданием листа.
Все формулы на ручном пересчете, форматов нету, лишних строк нету.

Спасибо
#5
Добрый день,

Возникла следующая задача - имеется макрос, которым пользуются пользователи каждый в своем файле (книге). Периодически возникает необходимость обновлять этот макрос, но пользователь это делать не умеет, особо продвинутые умеют, но делают это коряво, после чего возникает еще больше проблем. Собственно вопрос в чем, можно ли макросом из моей книги, обновить макросы во всех других книгах? Все файлы хранятся на сети, и предполагается что я знаю полный путь ко всем книгам пользователей.
Я попытался воспользоваться вот такой штукой:
Workbooks(sourcewb).VBProject.VBComponents.Item("Integration").Name = "Integration_old"
Переименовать старый модуль, ну и потом вставить новый....но после вышеописанного действия книга, над которой я провожу манипуляции отказывается открываться. Сначала выскакивает сообщение о том, что открытие небезопасно, я нажимаю "Enabled", и больше ничего не происходит. Но через редактор VBA эту книгу видно, и видно что модуль переименовался.

Подскажите, может кто то что то подобное делал?

Спасибо!
#6
Здравствуйте! При выполнении макроса открываю книгу, копирую из нее строки, вставляю в текущую книгу и закрываю. При закрытии книги эксель выдает ошибку "Microsoft Excel has stopped work" и закрывается. Не могу разобраться почему так. Вот код:

file = "Прочие_расходы.xlsx"
Path = ThisWorkbook.Path
Set Wb = ThisWorkbook
Workbooks.Open Filename:=Path & "\Integration\" & file
LASTROWNEWWB = Workbooks(file).Worksheets(1).UsedRange.Row + Workbooks(file).Worksheets(1).UsedRange.Rows.Count
Workbooks(file).Worksheets(1).Rows(1 & ":" & LASTROWNEWWB).Copy
Wb.Worksheets(wsh.Name).Rows(5).PasteSpecial Paste:=xlValues
Workbooks(file).Close SaveChanges:=False


Спасибо!
#7
Добрый день всем! Возникла интересная задача, суть ее в следующем: Имеется график стоительства объектов, имеется базовое значение стоимости одного объекта и коэффициент "раскрутки" объекта. Нужно рассчитать стоимость каждого строющегося объекта, применяя к нему соответствующий коэффициент. Например: в январе строится 1 объект, умножаем базовое значение на один (кол-во объектов) и на коэффициент для 1-го периода. В феврале строится еще один, и тут начинаются сложности...нам нужно получить значение для вновь открытого + значение для объекта открытого в январе ,но уже с коэффициентом для 2-го периода. Т.е. в зависимости от "возраста" объекта, к нему применяются разные коэффициенты.
Описание запутанное, но в целом должно быть очень простое решение:) Также прилагается файл примера, в котором я уже сделал формулу, которая работает (вроде бы), но не учитывает периоды, в которые не построено ни одного объекта.
Нужна максимально универсальная формула. Прошу Вашей помощи:)

Спасибо:)
#8
Добрый день, товарищи!
Подскажите пожалуйста, как можно ускорить макрос при выполнении на 64-х битной версии? Макрос написан на 32-битной, и работает 45 секунд, а на 64-х битной время работы около 15 минут. Есть ли какие нибудь способы ускорить работу?
#9
Добрый день, подскажите пожалуйста почему вылетает ошибка 400. Макрос обрабатывает книгу эксель из папки Papers и сохраняет каждый лист как отдельную книгу в папке Output. Вроде бы все просто. Большинство файлов удачно обрабатывает, но на одном вылетает ошибка 400. Этот  избранный файл ничем не отличается от остальных по структуре...вот код функции которой обрабатываю:
Function coppy(ByVal filename As String)
    Set wb = Workbooks.Open(filename)
    Dim wsh As Worksheet
    For Each wsh In wb.Worksheets
        lastRow = wsh.UsedRange.Row + wsh.UsedRange.Rows.Count
        lastRowWork = ThisWorkbook.Worksheets("work").UsedRange.Row + ThisWorkbook.Worksheets("work").UsedRange.Rows.Count
        For Each cell In wsh.Range("A1", "A" & lastRow)
            If cell.Value = "Result of testing:" Then   
                wsh.Copy
                ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & "Output" & "\" & wsh.Name & ".xlsx"
                ActiveWorkbook.Close   
            End If
        Next cell
    Next wsh
    wb.Close
End Function


соответственно fileName параметр это имя обрабатываемого файла.
#10
Добрый день,
Подскажите пожалуйста, как при сохранении в csv сделать так, чтобы книга, которую я сохраняю, не закрывалась? Чтобы просто создался csv файл с листом в указанной папке?

Сейчас это выглядит так:
Sub toCSV()
    ActiveWorkbook.SaveAs ThisWorkbook.path & "\" & "output.csv", xlCSV
    ActiveWorkbook.Close True
End Sub


Не знаю как сделать чтоб книга осталась открытой...
#11
Добрый день!
Столкнулся с проблемой при создании экземпляра класса. Имеется класс:
Public WithEvents fundBox As MSForms.ComboBox
Private Sub fundBox_Change()
   MsgBox "Change"
End Sub

По нажатию по кнопке на листе хочу чтобы появлялся комбобокс в определенном месте. Нажатий может быть несколько, а обработчик один. На данный момент создаю комбо таким образом:
   With Worksheets("заявка").OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
   Left:=ThisWorkbook.Worksheets("заявка").Cells(sRow + 1, 2).Left, _
   Top:=ThisWorkbook.Worksheets("заявка").Cells(sRow + 1, 2).Top, _
   Width:=ThisWorkbook.Worksheets("заявка").Cells(sRow + 1, 2).Width, _
   Height:=ThisWorkbook.Worksheets("заявка").Cells(sRow + 1, 2).Height + 2)
       .Name = "Box2"
       .LinkedCell = "B" & sRow + 1
   End With

Создается объект класса "Forms.ComboBox.1". Если прописать вместо этого имя моего класса "Class1", то после нажатия на кнопку вижу ошибку: "Connot create an object".

Подскажите, как подправить мой код?
Спасибо
#12
Всем привет!
Подскажите пожалуйста, как из xml файла вытянуть определенное значение?
имеется файл:
<HBRRepo>
 <variables></variables>
 <rulesets></rulesets>
 <rules>
   <rule id="1" name="АЛ_А_Распределение" product="Planning">
     <property name="description">/* Не используется  */</property>
     <property name="application">M2</property>
     <property name="plantype">MAIN</property>
     <property name="display_label">АЛ_А_Распределение НДС</property>
     <property name="enablePostProcessing">false</property>
     <property name="enablePreProcessing">false</property>
     <property name="isASO">false</property>
   </rule>
 </rules>
 <components></components>
</HBRRepo>
Как из него программно из Excel вытащить строку "АЛ_А_Распределение" ? Таких файлов штук 100, и хочется какой то универсальный способ)
Спасибо
#13
Доброго дня форумчане!

Имеется макрос, копирующий значения из книг, лежащих в определенной папке. Соответственно он их открывает, копирует, закрывает, все как положено. Файлы, из которых копируется, были немного переделаны и теперь при закрытии всплывает MsgBox с некоторой информацией. Возникла проблема: во время работы основного макроса всплывают эти боксы и нужно на них нажимать. Собственно вопрос - 1) Как программно нажать Enter на этот бокс? Либо 2) Как файлу, из которого копируем дать понять что он открыт программно, чтобы обработчик при его закрытии не выполнялся?
Первый вариант я думаю намного проще, поэтому вытекает еще вопрос 3) Можно ли как нибудь перехватить информацию, содержащуюся в этом MsgBox'е ?
#14
Добрый день,

Имеется комбобокс с поиском, но в нем есть одна проблема.
Поиск происходит только после того как нажата кнопка раскрытия списка, а до нажатия кнопки в поле можно ввести что угодно. Мне нужно чтобы ввести можно было только значения из списка, но при этом работало поле для ввода, чтобы после нажатия на кнопку происходил поиск в списке. Также внутри проходит проверка на корректность элемента.
Вот код обработчика:

Private Sub ComboBox2_Change()
    If bNotEvents = True Then Exit Sub
    bNotEvents = True
    If Left(ComboBox2.Text, 1) = "-" Then
        MsgBox "Некорректный элемент."
        ComboBox2.Text = ""
    End If
    ComboBox2.Text = Trim(ComboBox2.Text)
    bNotEvents = False
    Dim a
    ComboBox2.List = [ComboData1].Value
    a = Application.Transpose(ComboBox2.List)
    If ComboBox2.Value = "" Then
        ComboBox2.List = [ComboData1].Value
    Else
        a = Filter(a, ComboBox2.Value, True, vbTextCompare)
        ComboBox2.List = a
    End If
End Sub
#15
Добрый день (вечер) товарищи!
Макросом копирую данные, и при копировании "2015/2016" превращается в "0.999503968253968".
Форматы в обоих случаях "General".
В чем может быть проблема??
Спасибо
#16
Добрый день, прошу помощи в определении ошибки в 5 строках кода))
Создал поле со списком, пытаюсь обрабатывать выбор некорректного элемента (помеченого знаком "-"), прошу вывести сообщение о некорректности, оно выводится, НО! Выводится 2 раза, не очень приятно смотрится....где ошибка найти не могу. Когда элементы для списка подставлялись вручную, все работало нормально. Теперь элементы подтягиваются макросом с соседней книги и получается вышеописаное задвоение.
Вот код обработчика:

Private Sub ComboBox1_Change()
    If Left(ComboBox1.Text, 1) = "-" Then
        MsgBox "Выбран некорректный элемент. Выберите другой."
        ComboBox1.Text = ""
    End If
    ComboBox1.Text = Trim(ComboBox1.Text)
End Sub
#17
Доброго времени суток, товарищи. Столкнулся с задачей построения иерархии элементов в Excel. Подробно описывать не буду, что есть и что нужно получить в файле примере. Там же мой код и подробные требования. Написать за меня код не прошу (хотя не откажусь от каких либо набросок :)), хотел бы услышать опытных людей, каким образом организовать такой сложный (по моему мнению) цикл...
Спасибо.
#18
Товарищи,
прохожу циклом по столбцу в поисках значений, если нахожу, то удаляю строку. Все предельно просто, но почему то удаляются только нечетные строки, т.е. цикл удаляет через одну....не могу понять почему.
Код:

For Each cell In ThisWorkbook.Worksheets("Worksheet").range("O2", "O" & ThisWorkbook.Worksheets("Worksheet").Cells(Rows.Count, 1).End(xlUp).Row)
                    If InStr(1, cell.Value, "Need to delete") Then
                        ThisWorkbook.Worksheets("Worksheet").Rows(cell.Row).Delete Shift:=xlUp
                    End If
                Next cell
#19
Добрый день,
Можно ли на гиперссылку повесить выполнение какого-либо макроса или функции? Гиперссылка указывает на файл, открывается файл, в нем происходит какое либо редактирование, и при закрытии файла должен отработать макрос. Нечто подобное хочу реализовать но не могу найти подход. Если бы это был 1 файл и 1 кнопка, то думаю проблем бы не возникало с реализацией, но файлов может быть много, соответственно гиперссылок столько же, ну а макрос один универсальный.
Прошу помочь с идеями, как это можно реализовать.
#20
Добрый день товарищи,
требуется скопировать значения с листа со сводной таблицей на другой лист
Вот код:
ThisWorkbook.Worksheets("pivot").range("A1:G33").Select
   Selection.Copy
   ThisWorkbook.Worksheets("final").range("A1").Select
   Selection.Paste PasteSpecial:=xlPasteValues

Макрос отрабатывает без ошибок, но ничего не копируется, и я так подозреваю даже не выделяется
Подскажите в чем ошибка
Яндекс.Метрика Рейтинг@Mail.ru