Нужна консультация по среде программирования MS Visual Basic 6.0. Макрос написан в ней. В папке лежат файлы с кодом (расширением bas), с интерфейсом (расширение frm). Есть один файл c расширением vbp, при запуске которго можно видеть и код, и интерфейс. Сам макрос запускается файлом с расширением exe.
В код были внесены изменения. Как правильно нужно обновить файл exe, чтобы макрос работал по новому коду? Пытаюсь делать через File - > Make *название файла*.exe. Выдает ошибку "Can't find project or library"
Необходимо в книге 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
Я только начинаю погружаться в 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 для начинающих, где доступным языком будет прописана лексика различных команд и будет большой перечень причин стандартных ошибок (когда выводится системное сообщение).
Добрый день! Снова вынужден обратиться за помощью.
Я сделал макрос, который делает суммирование статей начисления заработной платы по определённым признакам, в указанным в справочнике. Фрагмент кода, где на выгрузку с начислениями подтягиваются данные их Справочника (внешнего файла) . fRow1, fRow2, ColEnd - переменные для диапазонов вставки данных формулы. List1 - переменная для листа в книге с отчетом, который нужно обработать.
Переменную для листа Спр1 не объявляю, он нужен только один раз, ссылаюсь прямо на него в формуле.
Добрый день. Помогите, пожалуйста, целый день провозился, не могу понять, в чем дело.
Необходимо в ячейке сделать расчет аналогичный формуле СУММЕСЛИМН. Ниже приведен фрагмент кода. Все переменные объявлены и инициированы (проверял командой 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-го знака?
Добрый день. Подскажите, пожалуйста, никак не могу сообразить.
Есть набор файлов типа
БУ__Отчет_о_детализации_затраты после закрытия_субъект_1 кв. 2022.xls БУ__Отчет_о_детализации_затраты после закрытия_субъект_6 мес. 2022.xls БУ__Отчет_о_детализации_затраты до закрытия_департамент_год 2022.xls
Необходим универсальный код, который бы записывал в переменную "хвост" этого файла. Т.е. нужно выцепить всё, что между последним "_" и точкой перед расширением. - 1 кв. 2022, 6 мес. 2022, 12 мес. 2022
Есть макрос, который разбит на три процедуры. Процедуры запускаются отдельной процедурой:
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?
Есть таблица с количеством столбцов ColEndSTsub и строк RowEndSTsub. Необходимо справа от таблицы вставить данные из последнего столбца, поделенные на 1000 и округленные до 3 знака.
Но если я хочу сразу вставить значения, то как это сделать? Можно ли как-то применить WorksheetFunction, чтобы столбец сразу заполнились значениями, без формул?
Только начинаю изучать 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 в качестве приложения к офисной работе. Увы, идет довольно туго. Посоветуйте каких-нибудь книг, где всё будет объясняться человеческим языком - с аналогиями из реального мира, с картинками. Может быть даже для школьников.
Здравствуйте, подскажите пожалуйста. Во вложении - пример задачи. Необходимо из некой мало упорядоченной таблицы слева получить четкую таблицу с данными в правой части. То есть - скопировать данные с интервалом в 4 строки. Пробовал формулы СМЕЩ и ИНДЕКС (СТРОКА). По одиночке данные переносятся, но добиться сохранения работоспособности формулы при протягивании никак не получается. В чём здесь секрет?
Из служебной программы выгрузился файл, где в качестве адреса ячеек отображается что-то типа =XDO_?SUM_LINE_01? или =XDO_?LINE_01_EMP_CATEGORY_WOKER?. С этим файлом нужно поработать (расставить и протянуть формулы и т.п.), но не получается.
Что это такое и как вернуть нормальные координаты типа F23, A12 и т..п.?
Пытаюсь наладить преобразование файла Excel для сдачи различной отчётности в формате XML. Но пункт "Экспорт" на вкладке Разработчик почему-то не активен. В чем может быть причина? Может, нужно какие-то надстройки скачивать? Или порты закрыты? Не активны в этом разделе также и некоторые другие пункты.
Подскажите пожалуйста. В двух ячейках есть постоянно меняющиеся значения. Либо какое-то число, либо значок "-".
Если бы нужно было сложить эти ячейки, то проблем нет, существует формула СУММ. Но нужно вычесть одну из другой. Есть ли какая-то формула, чтобы это сработало при наличии прочерка?
Никак не могу понять, почему не работает формула. Требуется в ячейку А2 вывести предупредительную надпись, если в ячейках А1 - К1 содержатся недопустимые значения. Допустимы только 16, 0 и пустые ячейки.
Формула в моем представлении такая:
=ЕСЛИ(ИЛИ(СЧЁТЕСЛИ(A1:K1;{16;"";0}));"ДАННЫЕ ВЕРНЫ";"Проверьте коды. Должно быть 16 символов")
Но Excel считает, что недопустимых значений нет. Почему так?
Посоветуйте какой-нибудь начальный курс по VBA для полных чайников в программировании. Чтобы все разъяснялось максимально доступно, на пальцах, спичках и рыбках. На Youtube этого добра много. Но что лучше выбрать?
Имеется список адресов в столбце А. Необходимо выбрать фильтром нужный, содержащий одновременно три значения - город. улицу и номер дома.
Вручную понятно. как это сделать - воспользоваться текстовым фильтром с параметром "содержит" и прописать, например, "Белгород*Ватутина*36". Но это очень долго. Существует ли какая-то формула, которая позволит осуществлять выбор всех строк, содержащих в столбце А все три значения в столбцах С, D и Е? Или какая-то функция стандартная может быть есть? Пример - во вложении.
Пытался записать макрос. Но когда выведено окно поиска, то возможность работать с книгой пропадает - не скопировать в ячейку с поиском данные. даже не остановить запись макроса.
Добрый день, подскажите, пожалуйста. Необходимо скопировать из левой таблицы в правую название веществ и их коды. При этом вещества с кодами "8888" и "х" копировать не требуется. Как при помощи формул это сделать? Информация об объемах выбросов подтягивается при помощи ВПР, там все в порядке.
Добрый день. помогите. пожалуйста, написать команду на VBA.
Имеется небольшая табличка (во вложении). Требуется переместить строку под №220 вверх, чтобы таблица приобрела вид как на листе "как нужно". При этом количество заполненных строк с 201 по 219 заранее неизвестно, может быть только две строки заполнено, а может и 10. В конечном итоге необходимо сохранить все вещества, а все строки после вещества 8888 должны стать пустыми.
Внезапно стал тормозить Excel. Те же самые небольшие файлы (для моей работы это таблицы на 100к знаков), которые месяц назад летали, теперь работают со скрипом. А большие (200-300к строк) и вовсе зависают. Особенно это заметно при использовании ВПР с других книг. Очень долго, минут пять, выполняется. Да и потом, при работе с фильтрами, тоже подвисает. Даже элементарная вставка значения в одну (!) ячейку выполняется секунд 20. Аналогичная проблема и у коллег. Стало просто невозможно работать.
Никаких скрытых объектов и формул нет, границы таблицы установлены в нужном месте. Сохранение как двоичной книги помогает слабо. Установка ручного пересчета формул и отключение автосохранения тоже. ИТ-шники ничего толком сказать не могут.
Что интересно, если в разгар работы, когда бешено крутится кулер, и медленно идет отсчет процесса %, нажать ESC, то все операции, вроде бы, будут выполнены. А иногда и нет... Также во время простоя могут самопроизвольно запустится какие-то вычисления.
В чем может быть причина? Обновления какие-то скачались? В настройках что-то включилось? Повторюсь, еще месяц назад все спокойно ВПР-ли 100 тысячные таблицы.
Комп, если что, i5/16Gb. При зависаниях происходит 100% загрузка процессора. Excel 2016/