Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Run-time error '5': Ошибка, Неправильный вызов процедуры
 
rbboy, Спасибо большое. Работает без ошибок.
Run-time error '5': Ошибка, Неправильный вызов процедуры
 
Добрый день!

Следующий макрос работал нормально, но перестал работать и выдаёт ошибку Run-time error '5. Работал с другими макросами в этом файле, а этот макрос не трогал, но он перестал работать. На старых копиях файла тоже не работает, и после нажатия Debug открывается последний файл и выделяет строку с ошибкой. На другом компьютере также не работает.

Если выбрать один файл, жёлтым выделяет вторую строку (А2), если два файла то третий.

Помогите с решением. Или дайте ссылку к теме.

Скрытый текст
Изменено: Шерзод Маткаримов - 24.01.2024 12:35:15
ПОИСК И ПОДСТАНОВКА, НУЖЕН БЫСТРЫЙ ВАРИАНТ ПОДСТАНОВКИ
 
vikttur, Давайте. Главное чтобы макрос работал как можно быстрее. Сейчас в Каталоге 60 тыс. строк, и он дальше будет расти. Если не этот макрос, можете другой способ применить, если есть идеи.
ПОИСК И ПОДСТАНОВКА, НУЖЕН БЫСТРЫЙ ВАРИАНТ ПОДСТАНОВКИ
 
Здравствуйте уважаемые,

Существует Каталог, откуда нужно получить значения 2х столбцов на другой лист если имеются соответствующие критериям строки.
Макрос есть, но если строк в Каталоге или в Списке куда переносятся данные, много, то макрос работает медленно.
Нужно улучшить этот макрос, или придумать другой вариант чтобы задача выполнялась мгновенно. Строк в Каталоге будет примерно 50 000-60 000, а в Списке может доходит до 1 000 строк.

Файл с примером и работающим макрос прилагаю.
При совпадении наименования получить его цену
 
New,
Супер. Работает. То что нужно.
При совпадении наименования получить его цену
 
New, всё. Увидел сообщения
При совпадении наименования получить его цену
 
New, Здравствуйте,

Да, я в курсе и если сможете помочь буду рад.
Если будут дополнительные вопросы, пишите.

Код по поиска по полному или по части наименования уже есть и используется. Нужен код который просматривает оцениваемую ячейку, и если в этой ячейке находятся слова указанные в 3х столбцах, то получить цену.
Изменено: Шерзод Маткаримов - 06.05.2021 09:04:12
При совпадении наименования получить его цену
 

Здравствуйте,

Нужен код для поиска цен из базы и если есть совпадения получить значение из столбца ЦЕНЫ в текущий лист.

Наименования для оценки в 2х столбцах (Имя и Ед.Из), а наименования в Базе, откуда нужно получить ЦЕНЫ в 4х столбцах (Имя+Спецификация+Спецификация2+Ед. Из). Если Имя для оценки, имеет значения, указанные в 3х столбцах Базы цен (Имя+Спец.+Спец2), нужно получить Цену для этого наименования.

Файл с примером наименований и примерным макросом прилагаю.

С уважением

Копировать-Вставить непустые строки
 
Доброй ночи,
Сейчас обнаружил что макрос неверно переносит цифры разделенные точкой.
Порядковые номера 1.1 1.2 1.3 переносятся как 1,1 1,2 1,3 т.е. вставляются запятые вместо точек. Можно ли исправить макрос?
Копировать-Вставить непустые строки
 
Сейчас чтобы макрос работал нужно активировать лист откуда копируются данные

With Sheets("Лист1")
.Visible
.Select
Call Без_Пустых
End With

А можно вызвать макрос, из листа куда переносятся данные, или из любого листа
Например Данные из Лист1 в Лист2 работая на листе Лист3?

Спасибо.
Копировать-Вставить непустые строки
 
vikttur, Удалил styles.xml. Теперь абсолютно чистый.
Изменено: Шерзод Маткаримов - 23.01.2021 08:45:37
Копировать-Вставить непустые строки
 
_Igor_61, Спасибо большое за макрос. Выяснилось что проблема в листе, куда копируются данные. Файл с полностью очищенным листом весит 300 КБ.
Копировать-Вставить непустые строки
 

Здравствуйте,


Нужен макрос для быстрого копирования данных без пустых строк.
Вариант (Фильтр непустых строк->Копировать/Вставить->Очистка фильтра) в таблице из 40 тыс. строк занимает 13-15 секунд.
Вариант RemoveDuplicates тоже не лучше первого.

На этом форуме увидел макрос от Hugo, для переноса уникальных значений
Но и этот вариант работает медленнее варианта с фильтром.
Макрос выполняется за 4-5 сек., если отдельно запускать, А если вызвать внутри другого макроса (CALL CopyRange) выполняется 25 сек.

Макрос:

Код
Sub CopyRange()Dim FR As Long, LR As Long, A(), i&, II&, X As Byte, tmp$With Sheets("Лист1")FR = Application.Match(1, Range("AV1:AV100000"), 0)LR = .Cells(Rows.Count, 42).End(xlUp).RowA = Range(Cells(FR, 40), Cells(LR, 48))End With   ReDim b(1 To UBound(A), 1 To 9)   With CreateObject("Scripting.Dictionary")       For i = 1 To UBound(A)           tmp = A(i, 9)    '9 Столбец ключ уникальных значений           If Not .Exists(tmp) Then               .Item(tmp) = vbNullString               II = II + 1               For X = 1 To 3: b(II, X) = A(i, X): Next     '1 To 3 Столбцы для переноса           End If       Next   End WithSheets("Лист2").Range("AF14").Resize(II, 3) = b   '3 Кол-во нужных столбцовEnd Sub

Используя словарь или другие методы, можно ли добиться результата в 1-2 секунд?

Буду рад любой помощи.
Спасибо.

Поиск и подстановка в массиве
 
Работа выполнена на отлично. Спасибо исполнителю и форуму.
Поиск и подстановка в массиве
 
Цитата
Ігор Гончаренко написал:
труднее всего в ваших задачах - понять что вы хотите
Давайте.

У меня на листах сразу на нескольких столбцах идут формулы индекс/поискпоз. Хочу всех их заменить массивным кодом.
Поиск и подстановка в массиве
 
Здравствуйте,
Нужен удобный код массива, который быстро может извлечь данные из таблицы, аналог Индекс/Поискпоз.
С массивными кодами ранее не работал. Хотелось бы, получить такой код от профессионала.
Задача:
1) Чтобы, искал и извлекал данные по двум и более критериям
2) В одном коде выполнить поиск и подстановку  для нескольких диапазонов.

Сейчас есть код, который ищет по одному условию, и я хотел сделать поиск по двум условиям, но не работает.
Вот код.
Код
Sub Test()
FastBegin
Dim S As Double
S = Now

Dim BinosozDB As Variant, BinoDB As Variant, Result As Variant, t As Variant, BinosozLR As String, BinoLR As String, i As Long, j As Long
Dim sl: Set sl = CreateObject("Scripting.Dictionary")

With Sheets("Database")
BinosozLR = .Cells(.Rows.Count, "AH").End(xlUp).Row
BinosozDB = .Range(.Cells(14, 2), .Cells(BinosozLR, 34))
End With

With Sheets("BINO")
BinoLR = .Cells(.Rows.Count, "C").End(xlUp).Row
BinoDB = .Range(.Cells(14, 1), .Cells(BinoLR, 6))
Result = .Range(.Cells(14, 7), .Cells(BinoLR, 7))

For i = 14 To BinosozLR
    sl(BinosozDB(i, 1) & BinosozDB(i, 3)) = BinosozDB(i, 32)
Next i

For j = 14 To BinoLR
    t = BinoDB(j, 1) & Left(BinoDB(j, 3), 250)
    If sl.Exists(t) Then
        Result(j, 1) = sl(t)
   End If
Next j

.Range(.Cells(14, 7), .Cells(BinoLR, 7)) = Result
End With

FastEnd
MSGBOX Now - S, 64
End Sub 

Вкратце, нужны примеры:
Как искать по одному условию.
Как искать по двум условиям
Как выполнить две задачи в одном макросе (вставил в столбец А, следующий код для столбца В)
И желательно с описаниями, чтобы я мог понять и применить в своих файлах.

И еще один момент. Код выше ищет и выводит последнее совпадение, если имеются дублирующиеся строки. Хотелось, бы чтобы выводил первый найденный результат.

Бюджет 500 руб.

С уважением.
Код массива по поиску и подстановке работает медленно, Ускорить работу макроса
 
Цитата
Александр Моторин написал: могу предположить только то, что либо есть дубли, либо не 100% совпадение
Верно, в таблице имеются дублирующиеся строки  и наш код выводит значение последнего совпадения, а нужно первого совпадения. Можно, сделать так чтобы получить первое совпадение?

Хотел проверить поиск по двум критериям, но не работает. sl(From(i, 1)&From(i,2)) = From(i, 3). Такое можно сделать?
Код массива по поиску и подстановке работает медленно, Ускорить работу макроса
 
Александр Моторин, Супер. Спасибо большое. Еще один момент. Данные выводятся не совсем точно. В формуле такой ошибки нет.
Через строк 15-20 стоит неверное значение. Кажется, код не так работает как Индекс/Поискпоз.
Изменено: Шерзод Маткаримов - 11.01.2021 01:36:38
Код массива по поиску и подстановке работает медленно, Ускорить работу макроса
 
Цитата
sl(From(i, 1)) = From(i, 1)
С этим кодом работает мгновенно, но результат выводится From(i, 1), а нужно чтобы From(i, 2).
Код массива по поиску и подстановке работает медленно, Ускорить работу макроса
 
Цитата
Александр Моторин написал: к этому надо добавить ещё и словарь
Как я писал, с такими кодами я впервые работаю, и со словарями тоже не знаком.
В начале нужно прописать что то типа Public dicRefData As New Scripting.Dictionary?

1 секунда. Супер. Но в диапазон вставился данные From(i, 1)?
Код массива по поиску и подстановке работает медленно, Ускорить работу макроса
 
Файл с кодом.
Код массива по поиску и подстановке работает медленно, Ускорить работу макроса
 
Здравствуйте,

Сейчас на листе на 20 тыс. строках стоит нижеследующая формула, и работает она медленно. На пересчёт уходит примерно 20 сек.
Хотел, применить код для выполнения задачи в массиве и перенести результат на лист.
Но и этот код работает 22 сек.
С массивными кодами ранее не сталкивался. Как можно добиться нужного результата? Вроде массивный код должен работать очень быстро. И еще, результат, тоже не точный выводит. Может неправильно применил функцию Left()?


Формула
Код
Range("P14:P20000").Formula ="=IFERROR(INDEX(R14C12:R20000C12,MATCH(INDEX(R1C1:R20000C1,ROW())&LEFT(INDEX(R1C3:R20000C3,ROW()),250),R14C11:R20000C11,0)),"""")"

Код
Код
Sub Test()
FastBegin
Dim S As Double
S = Now

Dim From As Variant, Into As Variant, Result As Variant, LastRow1 As String, LastRow2 As String, i As Long, j As Long

LastRow1 = Cells(Rows.Count, "K").End(xlUp).Row
LastRow2 = Cells(Rows.Count, "C").End(xlUp).Row

From = Range(Cells(1, 11), Cells(LastRow1, 12))
Into = Range(Cells(1, 1), Cells(LastRow2, 3))
Result = Range(Cells(1, 20), Cells(LastRow2, 20))

For i = 1 To LastRow1
For j = 1 To LastRow2
    If From(i, 1) = Into(j, 1) & Left(Into(j, 3), 250) Then
        Result(j, 1) = From(i, 2)
        Exit For
     End If
 Next j
Next i

Range(Cells(1, 20), Cells(LastRow2, 20)).Value = Result

FastEnd
MSGBOX Now - S, 64 ' результат 22 секунды
End Sub
Изменено: Шерзод Маткаримов - 11.01.2021 00:12:02
Ввод формул с плюсом в числовом или процентном формате, Ввод формулы
 
Цитата
vikttur написал: Есть понятия: формат значения и формат ячейки
Я говорю о формате ячейки. Если формат ячейки Общий то формула работает, но в таком формате значение выглядит не округлённым. В числовом или процентом формате, можно округлить, но формула не работает.

Странное поведение Excel.
Может, при выборе ячейки установить Общий формат и после ввода и выхода из ячейки установить числовой формат?

Цитата
vikttur написал: +1/1,1 - ошибка
Да, верно. Чтобы узнать какой процент составляет Число от Общего числа необходимо вводить через знак деления. Но неприятно, когда окошко ошибка выскакивает. Нужно отключить это окно. Пользователь, будет через знак равенства вводить.
Ввод формул с плюсом в числовом или процентном формате, Ввод формулы
 
Я обычно ввожу простые формулы с плюсом. Удобно. И другие может, также с плюсом вводят. Хотелось бы чтобы окошко с ошибкой не выскакивало. Может в VBA можно, что то типа если Target.Address начинается со знака плюс, то не принимать. То есть, отключить Плюс, чтобы можно было только со знаком = вводить формулу.? Или может есть другое, простое решение?

Цитата
vikttur написал: Проверил. При вводе формулы с + в начале указанные ошибки не возникают.
Попробуйте, поставить формат ячейки процентный или числовой и целое число разделить на нецелое (45/650,80)

У меня Excel 2010 Win7. Может с кодом запретить использовать плюс в рабочем диапазоне?
Изменено: Шерзод Маткаримов - 07.01.2021 15:59:19
Ввод формул с плюсом в числовом или процентном формате, Ввод формулы
 
Здравствуйте,

Есть столбец для ввода процентов, и обнаружилось что в процентном или в числовом формате если вводить формулу с плюсом, а именно целое число делённое на нецелое то выдаёт ошибку "Ошибка в формуле".
+50 / 250,50 Ошибка
+50 / 250 Работает
+50,5 / 80,5 Работает
+50,5 / 250 Работает

Целое/нецелое работает если вводить со знаком равенства или стоит Общий формат.

Как избежать этой ошибки? Важно, чтобы эта ошибка не выскакивала.
Может есть какой код для Private Sub Worksheet_Change(ByVal Target As Range)?

Спасибо.  
Изменено: Шерзод Маткаримов - 07.01.2021 15:41:00
Получение данных из другой закрытой или открытой книги, VBA Formula
 
Отредактировал код таким образом.
Код
Sub Get_Value_From_Close_Book_Formula()    
Dim sPath As String, sFile As String, sShName As String, WB As Workbook
    sPath = "C:\Documents and Settings\" '"
    sFile = "Книга1.xls" '"
    sShName = "Лист1" '"
    Application.DisplayAlerts = 0
    Range("A1:A100").Formula = "='" & sPath & "[" & sFile & "]" & sShName & "'!" & "A1" '"
    
    For Each WB In Workbooks
    If WB.Name = "Книга1.xls" Then
    Range("A1:A100").Formula = "='" & sPath & "Выбрать лист" & "'!" & "A1" '"
    End If
    Next
    
    Application.DisplayAlerts = 1
End Sub

Если, книга открыта обращение идёт к несуществующей книге и соответственно открывается окно для выбора книги и обновления связей.

Но, в моём оригинальном макросе в начале идёт Application.FileDialog(msoFileDialogOpen) для выбора файла, и у меня следовательно если книга открыта открывается окно для выбора файла поочередно два раза.

У кого нибудь есть идея, как сделать так, чтобы открылось окно выбора файла один раз и код работал как при открытой так и при закрытой книге?

Спасибо.
Получение данных из другой закрытой или открытой книги, VBA Formula
 
Что с указанием пути что без, как вы указали, Макрос не работает если книга открыта. Ошибка Run-time error '1004 Application-defined or object defined error.
Если, sFile, т.е. имя книги указать не существующую, то код работает.
Получение данных из другой закрытой или открытой книги, VBA Formula
 
Когда книга открыта путь к файлу исчезает из формулы. Я не могу найти решение, как через VBA ссылаться в ячейку в другой открытой книге.

Пока, решил вопрос добавив строку до формулы
Код
Workbooks(sFile).Close True
Но, вопрос остаётся без нужного решения. Если книга к которой идёт обращение уже открыта, должна остаться открытой.

Буду благодарен, если у кого есть решение.
Получение данных из другой закрытой или открытой книги, VBA Formula
 

Здравствуйте,

Необходимо получить данные из другой книги, независимо открыта или закрыта эта книга.

Следующий код переносит данные только из закрытой книги. И если книга открыта, нужно закрыть книгу, чтобы код работал.

Код
Sub Get_Value_From_Close_Book_Formula()
    Dim sPath As String, sFile As String, sShName As String
    sPath = "C:\Documents and Settings\" '"
    sFile = "Книга1.xls" '"
    sShName = "Лист1" '"
    Application.DisplayAlerts = 0
    With Range("A1:A100")
        .Formula = "='" & sPath & "[" & sFile & "]" & sShName & "'!" & "A1" '"
        '"A1" - указывается начальная ячейка диапазона, из которого необходимо получить значения
        .Value = .Value
    End With
    Application.DisplayAlerts = 1
End Sub

Можно ли переделать этот код, или другой вариант, чтобы получить из закрытой и открытой книги?

Спасибо.

Полный путь к закрытому файлу и листу, Формула
 
V, Спасибо. Я с помощью другого макроса получаю полный путь к файлу, но получить ИМЕНА листов выбранной книги не получилось. Был вариант с ADO, но он у меня не работает, и не хочется усложняться. Хотя если простого решения, не найдётся, можно оставить без указания имени ЛИСТА. Так работает. И просит, пользователя не называть лист названием книги.

 
Страницы: 1 2 След.
Наверх