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

Страницы: 1 2 След.
Нужна консультация по среде MS Visual Basic 6.0, обноление exe файла
 
testuser, Большое спасибо! Всё получилось.
Нужна консультация по среде MS Visual Basic 6.0, обноление exe файла
 
testuser, спасибо, но не получается.

Подключил библиотеку Microsoft Vesual Basic 6.0 Extensibility. Также пожключена библиотека Microsoft Office 16.0 Object Library

Старая ошибка ушла.  Теперь выдает "user-defined type not defined".

В начале кода есть строка, она выделяется после сообщения об ошибке. Какую ещё библиотеку нужно подключить? Макрос связан с созданием XML файла. Библиотеку Microsoft XML тоже пробовал подключать.
Код
Public myEx As Excel.Application
Изменено: alexpet - 05.02.2024 15:54:36
Нужна консультация по среде MS Visual Basic 6.0, обноление exe файла
 
Добрый день.

Нужна консультация по среде программирования MS Visual Basic 6.0. Макрос написан в ней. В папке лежат файлы с кодом (расширением bas), с интерфейсом (расширение frm). Есть один файл c расширением vbp, при запуске которго можно видеть и код, и интерфейс. Сам макрос запускается файлом с расширением exe.

В код были внесены изменения. Как правильно нужно обновить файл exe, чтобы макрос работал по новому коду? Пытаюсь делать через File - > Make *название файла*.exe. Выдает ошибку "Can't find project or library"
Изменено: alexpet - 05.02.2024 14:36:07
Цикл For-Next работает, а For Each - нет, ошибка Type mismatch
 
Sanja, Дмитрий(The_Prist) Щербаков, Jack Famous, спасибо!
Цикл For-Next работает, а For Each - нет, ошибка Type mismatch
 
Добрый день! Подскажите, пожалуйста.

Необходимо в книге Excel найти лист с определнным именем и "убить" на нем все формулы. Реализовано через цикл For-Next, который нормально работает.
Код
Dim Name1 As Variant

For Name1 = 1 To Worksheets.Count
    If Worksheets(Name1).Name = "Расчёты" Then
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
    End If
Next Name1

Хочу реализовать задачу более компактным образом, через For-Each. Не работает, выдает ошибку Type mismatch. Почему это происходит?
Код
Dim Name1 As Variant

For Each Name1 In Sheets
    If Worksheets(Name1).Name = "Расчёты" Then ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
Next 

Вот так тоже аналогичная ошибка
Код
Dim Name1 As Variant

For Each Name1 In Sheets
    If Worksheets(Name1).Name = "Расчёты" Then Worksheets("Расчёты").UsedRange.Value = Worksheets("Расчёты").UsedRange.Value
Next 
Изменено: alexpet - 06.10.2023 17:03:02
VBA - Поиск номеров строк и столбцов по содержимому ячейки, Наиболее грамотное и изящное решение
 
Цитата
написал:
.Row
Спасибо! А что означает в конце функции .Row и .Rows? Указание, что мы ищем диапазон строк или строку? Почему-то с этой добавкой происходит ошибка object variable or with block variable not set, когда искомое слово отсутствует в диапазоне. Ошибка непосредственно в функции Range.Find.
У всех переменных тип Variant
Код
Set fRow5 = Sheets("Лист1").Range(Cells(fRow1, 2), Cells(fRow2, 2)).Find("Искомое", LookAt:=1).Rows
А если сделать так, то все работает отлично, макрос переходит на следующее действие, формируется данные как надо.
Код
Set fRow5 = Sheets("Лист1").Range(Cells(fRow1, 2), Cells(fRow2, 2)).Find("Искомое", LookAt:=1) 

Правда, полностью работоспособен код только в таком виде. И когда искомого нет, то действия далее происходят, и когда есть, делается нужная замена. Через If Not Is Nothing никак. Выдает ошибки.

Код
Set fRow3 = Sheets("Отчет1").Range(Cells(fRow1, 2), Cells(fRow2, 2)).Find("Материальная помощь на погребение", LookAt:=1)If fRow3 Is Nothing ThenElseIf fRow3.Row < fRow2 And Cells(fRow3.Row, 1).Value = "504" Then   List1.Range(Cells(fRow3.Row, ColEnd + 2), Cells(fRow3.Row, ColEnd + 2)).Value = "(-)"End IfEnd If

Изменено: alexpet - 01.05.2023 19:35:53
VBA - Поиск номеров строк и столбцов по содержимому ячейки, Наиболее грамотное и изящное решение
 
Цитата
написал:
spRow = Sheets("Лист1").UsedRange.Find("Всего начислено").Row
Спасибо! Это наиболее компактный и оптимальный метод. А почему переменная здесь инициируется без Set? С Set выдается ошибка.
VBA - Поиск номеров строк и столбцов по содержимому ячейки, Наиболее грамотное и изящное решение
 
Цитата
написал:
spRow = Sheets("Лист 1").UsedRange.Find("Всего начислено").Rows
Спасибо. Так работает, но только если добавить Set
Код
Set fRow1 = Sheets("Лист1").Columns(2).Find("Всего начислено").Rows

Без этого ошибка object variable or with block variable not set.

В вашем случае UsedRange означает, что поиск ведется на всем Листе1?
VBA - Поиск номеров строк и столбцов по содержимому ячейки, Наиболее грамотное и изящное решение
 
Доброго времени суток!

Я только начинаю погружаться в VBA, сейчас пишу второй в жизни макрос после дипломного. Подскажите, пожалуйста, один момент.

В самом начале алгоритма для решения моей задачи необходимо выявить номера строк и столбцов областей, на которые я буду цеплять данные и формировать сводные таблицы. Делаю это с помощью циклов For Next, как нас учили. Всё работает нормально. Но может есть более изящное и грамотное решение с точки зрения технологии программирования? Например через цикл For Each, (не очень хорошо понимаю, как он работает, если нужно записать в переменные номера строк и столбцов найденных значений). Или может вообще это можно сделать без цикла, стандартной функцией?

Для определения первой и последней строки фрагмента таблицы, с которым в дальнейшей будете работать, вы бы использовали нижеприведенный код или что-то другое? Особенное если хотелось бы сделать его более универсальным, без прописывания количества итераций. Private использован потому что у меня в модуле несколько процедур.
Код
'Для поиска номера строки, в которой начинаются начисления (контрольное слово 1. Начислено)
Private fRow1 As Integer

'Для поиска номера строки, в которой заканчиваются начисления (контрольное слово Всего начислено)
Private fRow2 As Integer

'Поиск номера строки, в которой начинаются начисления, проверка, тот ли файл указан (по слову 1. Начислено)

For fRow1 = 1 To 20
    If Cells(fRow1, 2).Value = "1. Начислено" Then
    Exit For
    End If
Next fRow1

'Если нужного слова нет, значит не тот файл, выводим сообщение и прекращаем макрос
If fRow1 = 21 Then
    MsgBox "Ошибка! Некоректный файл Начислений-Удержаний, программа будет прекращена. Выберите корректный файл ""Свод начислений и удержаний"" и повторите попытку.", vbExclamation, "Упс!"
    End
End If

'Поиск номера строки, в которой заканчиваются начисления, по записи "Всего начислено"
For fRow2 = 20 To 1000
    If Cells(fRow2, 2).Value = "Всего начислено" Then
    Exit For
    End If
Next fRow2
Или, к примеру, если нужно найти в шапке другой таблицы номера столбцов для формирования сводной, есть ли более грамотный и компактный вариант? Нижеприведенный нормально работает. А вы бы как сделали?

ShRowFot - ранее определённый аналогичным методом номер строки, в которой находится шапка.
Код
'Поиск номера столбца, в котором расположены Элементы
For ColElem = 1 To 20
    If Cells(ShRowFot, ColElem).Value = "Элемент" Then
    Exit For
    End If
Next ColElem


'Поиск номера столбца, в котором содержится ключевое слово "Графа 7 (всего)"
For ColGr7 = 1 To 20
    If Cells(ShRowFot, ColGr7).Value = "Графа 7 (всего)" Then
    Exit For
    End If
Next ColGr7

И не подскажете ли хорошую книгу по VBA для начинающих, где доступным языком будет прописана лексика различных команд и будет большой перечень причин стандартных ошибок (когда выводится системное сообщение).
Изменено: alexpet - 29.04.2023 22:20:14
Особенности ссылок на книгу с макросом в VBA, проблемы с VLOOKUP ошибка 1004 Application-defined or object-defined errror
 
Цитата
написал:
Цитата
написал:
В чем может быть причина? Есть какие-то особенности при использовании ссылок на книгу, где содержится макрос? Код ?
если сделаете просто ссылку на свою книгу, из которой тянете данные - то сразу поймете в чем причина: в отсутствии апострофов, т.к. имя книги содержит служебный символ тире. Видимо, надо как-то так:
Код
    [URL=#]?[/URL]       1      List1.Range(Cells(fRow1 + 1, ColEnd + 1), Cells(fRow2 - 1, ColEnd + 1)).Value =   "=VLOOKUP(A"   & fRow1 + 1 &   ",'[Свод_начисления-удержания_2.0.xlsm]Спр1'!$A:$F,5,FALSE)"   
 
Большое спасибо, помогло.
Особенности ссылок на книгу с макросом в VBA, проблемы с VLOOKUP ошибка 1004 Application-defined or object-defined errror
 
Добрый день!  Снова вынужден обратиться за помощью.

Я сделал макрос, который делает суммирование статей начисления заработной платы  по определённым признакам, в указанным в справочнике.
Фрагмент кода, где на выгрузку с начислениями подтягиваются данные их Справочника (внешнего файла) .
fRow1, fRow2, ColEnd - переменные для диапазонов вставки данных формулы. List1 - переменная для листа в книге с отчетом, который нужно обработать.

Переменную для листа Спр1 не объявляю, он нужен только один раз, ссылаюсь прямо на него в формуле.

В этом случае все работает идеально.
Код
List1.Range(Cells(fRow1 + 1, ColEnd + 1), Cells(fRow2 - 1, ColEnd + 1)).Value = "=VLOOKUP(A" & fRow1 + 1 & ",[Справочник.xlsx]Спр1!$A:$F,5,FALSE)"

Для оптимизации и удобства добавил справочную таблицу в тот же файл, где содержится макрос (Свод_начисления-удержания_2.0.xlsm),  Меняю код на...

Выдает ошибку 1004 Application-defined or object-defined errror.

В чем может быть причина? Есть какие-то особенности при использовании ссылок на книгу, где содержится макрос?
Код
List1.Range(Cells(fRow1 + 1, ColEnd + 1), Cells(fRow2 - 1, ColEnd + 1)).Value = "=VLOOKUP(A" & fRow1 + 1 & ",[Свод_начисления-удержания_2.0.xlsm]Спр1!$A:$F,5,FALSE)"
СУММЕСЛИМН в VBA, не могу понять, в чем ошибка
 
Цитата
написал:
alexpet, вроде скобки лишние были, убирал.
Так не ругается, ставит в ячейку 0 -  у меня нет файла!
Код
    [URL=#]?[/URL]       1  2      Cells(1, ColEnd + 6).Value = _    WorksheetFunction.SumIfs(Range(Cells(fRow1 + 1, ColEnd), Cells(fRow2 - 1, ColEnd)), Range(Cells(fRow1 + 1, ColEnd + 1), Cells(fRow2 - 1, ColEnd + 1)), 7)   
 
Огромное спасибо! Теперь всё работает.
СУММЕСЛИМН в VBA, не могу понять, в чем ошибка
 
Цитата
написал:
Да так и указать 7.
Вернее указывайте как записывает рекордер работающую формулу.
Рекордер записывает. То, что в кавычках, перейдет полностью на лист Excel. То есть я не смогу поставить туда переменные.  Сам макрос работает нормально до этой самой итоговой формулы.
Код
ActiveCell.FormulaR1C1 = "=SUMIFS(R[20]C[-6]:R[104]C[-6],R[20]C[-5]:R[104]C[-5],7)"
Изменено: alexpet - 21.04.2023 19:00:31
СУММЕСЛИМН в VBA, не могу понять, в чем ошибка
 
Цитата
написал:
"7" - это текст. У Вас там точно текст?
Нет, там числа. Как указать в формуле числовое значение = 7? Пробовал 7, "7", "=7".
СУММЕСЛИМН в VBA, не могу понять, в чем ошибка
 
1. надо в  List1.Cells(1, ColEnd + 6).Value итог работы формулы.
2. выдает $C$21:$C$105, $D$21:$D$105. Как раз те самые диапазоны, которые нужны
3. Если просто 7, сохраняется ошибка.
Изменено: alexpet - 21.04.2023 18:19:55
СУММЕСЛИМН в VBA, не могу понять, в чем ошибка
 
Добрый день. Помогите, пожалуйста, целый день провозился, не могу понять, в чем дело.

Необходимо в ячейке сделать расчет аналогичный формуле СУММЕСЛИМН. Ниже приведен фрагмент кода. Все переменные объявлены и инициированы (проверял командой Debug.Print). При выполнении кода на данной сроке выдается ошибка 424 Object required. В чем может быть причина?
Пробовал вместо переменных проставить фиксированные координаты ячеек. Не помогает.

ColEnd - это последний столбец таблицы
fRow1 + 1 - с какой строки начинаем брать данные для суммирования и условия
fRow2 - 1 - на какой строке заканчиваем
7 - условие для суммирования. Пробовал его указывать без кавычек и как "=7". Не помогло

Range(Cells(fRow1 + 1, ColEnd), Cells(fRow2 - 1, ColEnd))) - диапазон чисел, которые будут просуммированы
Range(Cells(fRow1 + 1, ColEnd + 1), Cells(fRow2 - 1, ColEnd + 1)) - диапазон условий
7 - значение в диапазоне условий, которые нужно просуммировать.

И как к этой формуле сразу прицепить деление на 1000 с округлением до 1-го знака?

Код
List1.Cells(1, ColEnd + 6).Value = WorksheetFunction.SumIfs((Range(Cells(fRow1 + 1, ColEnd), Cells(fRow2 - 1, ColEnd))), Range(Cells(fRow1 + 1, ColEnd + 1), Cells(fRow2 - 1, ColEnd + 1)), "7")
Записать в переменную окончание имени файла
 
Добрый день. Подскажите, пожалуйста, никак не могу сообразить.

Есть набор файлов типа

БУ__Отчет_о_детализации_затраты после закрытия_субъект_1 кв. 2022.xls
БУ__Отчет_о_детализации_затраты после закрытия_субъект_6 мес. 2022.xls
БУ__Отчет_о_детализации_затраты до закрытия_департамент_год 2022.xls

Необходим универсальный код, который бы записывал в переменную "хвост" этого файла. Т.е. нужно выцепить всё, что между последним "_" и точкой перед расширением. - 1 кв. 2022, 6 мес. 2022, 12 мес. 2022

Как это можно сделать?
Изменено: alexpet - 16.08.2022 18:53:07
Прекращение всех процедур в модуле VBA
 
Цитата
написал:
вместо
используйте

Спасибо! Как всё оказалось просто.


DANIKOLA Тоже спасибо.
Прекращение всех процедур в модуле VBA
 
Добрый день! Подскажите, пожалуйста, одну вещь.

Есть макрос, который разбит на три процедуры. Процедуры запускаются отдельной процедурой:

Sub Start()

Call Proc1
Call Proc2
Call Proc3

End Sub

В середине Второй процедуры провожу проверку наличия на листе ошибки #Н/Д. При обнаружении - процедура прекращается. Код там такой:

Set ND = IzbrSvod.Range(Cells(2, ColEnd + 1), Cells(RowEnd ColEnd + 5)).Find("#N/A", , xlValues, xlPart)
If ND Is Nothing Then
Else
MsgBox "Отсутствуют необходимые значения. Программа будет прекращена", vbExclamation, "Внимание!"
Exit Sub
End If

Всё работает нормально, если запускать отдельно процедуру. Если же запускать макрос целиком, то при наличии ошибки далее пойдет выполнение Третьей процедуры.

Как прекратить все процедуры в модуле при наступлении условия ND?
Деление столбца данных в VBA с округлением
 
Добрый день. Подскажите, пожалуйста, одну вещь.

Есть таблица с количеством столбцов ColEndSTsub и строк RowEndSTsub. Необходимо справа от таблицы вставить данные из последнего столбца, поделенные на 1000 и округленные до 3 знака.

Вот этот метод работает нормально:

Sheets("Итоги_Субъекты").Range(Cells(2, ColEndSTsub + 1), Cells(RowEndSTsub, ColEndSTsub + 1)).Value = "=ROUND(RC[-1]/1000,3)

Но если я хочу сразу вставить значения, то как это сделать? Можно ли как-то применить WorksheetFunction, чтобы столбец сразу заполнились значениями, без формул?
Изменено: alexpet - 05.08.2022 20:44:23
ВПР в VBA для всего столбца
 
Цитата
написал:
во-первых, желательно прикладывать небольшой файл-пример (не рабочий файл на 10Мб, а тестовый небольшой пример)
во-вторых, если вы вводите формулу в 1 ячейку, то и получите формулу в одной ячейке. Если будете вводить в диапазон ячеек, то и получите формулу в диапазоне ячеек.
Что-то типа такого
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7            With   IzbrSvod              'находим номер последней строки в столбце А              LastRow = .Cells(.Rows.Count,   "A"  ).  End  (xlUp).Row               'первое - указываем диапазон, т.е. Range              'второе - указываем LastRow во втором Cells              .Range(.Cells(2, ColEndIzbr + 1), .Cells(LastRow, ColEndIzbr + 1)).Value = WorksheetFunction.VLookup(IzbrSvod.Cells(2, ColEndIzbr - 3), SpravSubj.Range(  "A:F"  ), 4,   False  )          End   With   
 
Спасибо. Я нечто подобное пробовал, только без With. В Вашем варианте вставляет по всему столбцу, но, похоже ищет только самое первое значение (весь столбец получается идентичным).  
ВПР в VBA для всего столбца
 
Добрый день!

Только начинаю изучать VBA. Подскажите, пожалуйста, один момент, никак не могу найти решение.

Требуется прицепить справа от таблицы на листе IzbrSvod  с числом столбцов ColEndIzbr и строк RowEndRpt некоторые данные из справочника, лист SpravSubj.            То есть применить некий аналог ВПР.

Всего там будет семь дополнительных столбцов.

Вот команда для одной из них.
IzbrSvod.Cells(2, ColEndIzbr + 1).Value = WorksheetFunction.VLookup(IzbrSvod.Cells(2, ColEndIzbr - 3), SpravSubj.Range("A:F"), 4, False)

Всё работает отлично, но для одной ячейки. Как заполнить данные до самой последней строки таблицы?
Может можно как-то изменить эту команду или добавить дополнительную?

Или же придется задавать семь циклов?  
Книги по VBA, посоветуйте литературу
 
Добрый день!

На работе начали преподавать VBA в качестве приложения к офисной работе. Увы, идет довольно туго. Посоветуйте каких-нибудь книг, где всё будет объясняться человеческим языком - с аналогиями из реального мира, с картинками. Может быть даже для школьников.
Копирование данных из диапазона через постоянный интервал
 
Спасибо! Моя ошибка была в том, что в массиве указывал ссылку на столбец.  
Копирование данных из диапазона через постоянный интервал
 
Здравствуйте, подскажите пожалуйста. Во вложении - пример задачи. Необходимо из некой мало упорядоченной таблицы слева получить четкую таблицу с данными в правой части. То есть - скопировать данные с интервалом в 4 строки. Пробовал формулы СМЕЩ  и ИНДЕКС (СТРОКА). По одиночке данные переносятся, но добиться сохранения работоспособности формулы при протягивании никак не получается. В чём здесь секрет?
Странный стиль ссылок на ячейки
 
Цитата
vikttur написал:
Ctrl+F3, удалить имена
Спасибо, помогло.
Странный стиль ссылок на ячейки
 
Да, вижу. Там идут ссылки на служебный лист. Но можно ли как-то быстро переименовать в нормальный вид? А то формулы не протягиваются.  
Странный стиль ссылок на ячейки
 
Из служебной программы выгрузился файл, где в качестве адреса ячеек отображается что-то типа =XDO_?SUM_LINE_01? или =XDO_?LINE_01_EMP_CATEGORY_WOKER?. С этим файлом нужно поработать (расставить и протянуть формулы и т.п.), но не получается.

Что это такое и как вернуть нормальные координаты типа F23, A12 и т..п.?
Экспорт в XML. Неактивен пункт "Экспорт" на вкладке Разработчик
 
Пытаюсь наладить преобразование файла Excel для сдачи различной отчётности в формате XML.
Но пункт "Экспорт" на вкладке Разработчик почему-то не активен. В чем может быть причина? Может, нужно какие-то надстройки скачивать? Или порты закрыты?
Не активны в этом разделе также и некоторые другие пункты.

Формула для вычитания двух ячеек, в которых возможен текст
 
ТОЧНО! Спасибо!
Страницы: 1 2 След.
Наверх