Доброго всем. Имеется реестр записей сумм выполнения. Каким образом определить общую сумму по отфильтрованным данным столбца "B" при нескольких значениях? Список и количество значений произвольное. Пример предполагаемого принципа расчета приведен в столбце "H", в ячейке "H13". Сначала суммирование по конкретному критерию, затем на неё начисление НДС, и так по каждому критерию. Как видно, результат отличается от построчного вычисления в столбце "F", в ячейке "F13".
Всем здравствуйте. Формируется реестр, с привязкой субподряда. По смете может быть один подрядчик на всю сумму, или не на всю, но может быть и более одного подрядчика. Подскажите, каким образом в столбце "B" для второго подрядчика (Подрядчик1 дог2) по смете 02-01-10 отобразить генподрядную сумму сметы, но так, чтобы итоговая сумма осталась без изменений? Ввод как текста не помогает, да и фильтровать тогда неудобно.
Добрый день. Подскажите, как заполнить Combobox текстом вводимым с клавиатуры? Пробовал так:
Код
Private Sub ИмяЛСР2_Change()
With ИмяЛСР2
.AddItem ИмяЛСР2.Text
End With
End Sub
и так:
Код
Private Sub ИмяЛСР2_Change()
Dim sText As String
With ИмяЛСР2
sText = Trim$(ИмяЛСР2.Value)
.AddItem sText
End With
End Sub
Но в результате Combobox заполняется посимвольно, по мере ввода. А хотелось бы только осмысленными, завершенными, словами (словосочетаниями). Сохранять полученный список никуда не надо он каждый раз разный.
Доброго времени, друзья. Недавно пришлось заниматься дурным делом: для более 30 файлов надо было создать папки с такими же названиями, и переместить файлы в соответствующие папки. Поскольку лень двигатель прогресса, я решил что в дальнейшем комп должен это делать сам. Надергал с разных источников нужных мне кодов (сам я знаток не очень), и собрал в нужном мне виде. Работает. Кроме перемещения файлов. Что я сделал не так? Выдает ошибку, что файл уже существует, на этой строке:
Добрый вечер, знатоки VBA. Возможно ли в TextBox по мере ввода числа сделать его визуальную разбивку по разрядам? Число в дальнейшем будет задействовано в расчетах, поэтому использование маски с пробелами нежелательно. Числа могут быть более 6-8 разрядов, а из-за слитного написания, при вводе случаются ошибки ввода.
Уважаемые знатоки excel, возможно ли сохранить действующими, либо каким-то образом преобразовать чтобы они действовали потом, имеющиеся в книге гиперссылки между листами книги при её экспорте в pdf? При формировании книги, для создания содержания был использован прием https://www.planetaexcel.ru/techniques/12/60/. Но после экспорта в pdf эти ссылки стали просто текстом. Я знаю, в word при формировании содержания документа, и последующем экспорте в pdf ссылки из содержания продолжают действовать, и ими можно пользоваться. Сам так делал. Возможно ли такое в excel?
Всем всего хорошего.Что-то я делаю не так, а что не пойму. Требуется собрать данные со всех листов из определенных ячеек на один лист в умную таблицу. В общем-то всё работает, но только если код запускается не с того листа, куда всё должно собираться. А я как раз хотел подвесить макрос на кнопочку именно на листе куда производится сбор. Что я делаю не так? Я уж и опрашиваемый лист пробовал активировать, понимаю что глупо, но не помогло.
Код
For i = Worksheets.Count To 2 Step -1 ' Проход по листам
iDate = Worksheets(i).Name
For z = 1 To UBound(task)
Set Findtask1 = Worksheets(i).UsedRange.Find(task(z), , xlValues, xlPart) ' начало блока
If z = UBound(task) Then
lastrow = Cells(Rows.Count, 3).End(xlUp).Row
Set Findtask2 = Cells(lastrow + 1, 3)
Else
Set Findtask2 = Worksheets(i).UsedRange.Find(task(z + 1), , xlValues, xlPart) ' конец блока
End If
For x = Findtask1.Row + 1 To Findtask2.Row - 1
If IsEmpty(Cells(x, 3)) = False Then
Worksheets(i).Activate
Set NewRow = tbl.ListRows.Add
With NewRow.Range
.Columns(1).Value = iDate
.Columns(2).Value = Sheets(i).Cells(x, 2).Value
.Columns(3).Value = Findtask1
.Columns(4).Value = Sheets(i).Cells(x, 3).Value
.Columns(5).Value = Sheets(i).Cells(x, 4).Value
.Columns(6).Value = Sheets(i).Cells(x, 5).Value
.Columns(7).Value = Sheets(i).Cells(x, 6).Value
.Columns(8).Value = Sheets(i).Cells(x, 7).Value
End With
End If
Next x
Next z
Next i
Всем доброго времени суток. Возникла необходимость установки особого колонтитула для первой страницы для существующих документов. С этим я без проблем справился:
Код
.FirstPage.RightHeader.Text = _ "&""Times New Roman,обычный""&14&UТратата_"
Поскольку документы существующие, в них могли ранее быть установлены свои колонтитулы, которые теперь (и это закономерно) не отображаются на первой странице. Возможно ли подтянуть эти существующие колонтитулы (заголовок, нумерация страниц) на первую страницу? Мой опыт в VBA весьма мал, я попробовал варианты типа этих, но они либо не сработали, либо выдавали ошибку:
Туплю, и не могу сообразить как в формуле реализовать подстановку одновременно нескольких разных символов, более одного. Значения артикулов имеют цифро-буквенное значение, необходимо подменить встречающиеся символы "-" и "/" на "_". Подмена связана с ограничениями на имя умной таблицы, и необходима для реализации связи с элементами таблиц по их именам.
Возможно ли каким-то способом залить каким-либо цветом ячейки участвующие в расчете формулы? К примеру: =ОКРУГЛ((G62+G66+G67+G72+G73)*G86*1,02;2).Понятно, что при нажатии F2 на ячейке с формулой, все ячейки расчета подсвечиваются. Но бывает, что надо проверить учтена ли вот эта ячейка в формуле? Значит надо переместиться в ячейку с формулой, жать F2, скролить лист в поисках нужной строки/ячейки, и при этом ни в коем случае не выходя из режима редактирования итоговой ячейки. А так, раскрасил - и сразу видно, где и что надо поправить.
Доброго времени. Возможно ли каким-то образом повторно использовать выделение диапазона, но у же в соседнем столбце или строке? Например, для какого-то группового действия выбран диапазон B4:B11, после выполнения действия надо выбрать такой же диапазон в другом столбце,к примеру D4:D11, затем M4:M11. В каждом из диапазонов выполняется свое действие, скажем - изменение формулы. Понятно, что это делается каждый раз новым выделением нужных ячеек. А нет ли чего-то вроде копирования формата, что-то наподобие копирования набора?
Доброго времени всем. Подскажите, возможно ли отфильтровать сразу по нескольким столбцам строки, в которых присутствуют значения выделенные красным шрифтом? Реальная таблица имеет бОльшее количество строк и столбцов, необходимо проанализировать данные нуждающиеся в уточнении, поэтому и желательно отобразить только красные, но все сразу. Понятно, что если в строке помимо красных значений будут отображены и черные, но хотелось бы скрыть те строки, в которых только черные значения. Ведение дополнительных столбцов с каким-либо маркером вместо выделения цветом очень нежелательно, т.к. их (доп. столбцов) потребуется значительное количество, и это усложнит таблицу.
Доброго дня, уважаемые знатоки екселя. Обращаюсь за помощью или разъяснением т.к. мои навыки в VBA начальные. В продолжение темы Не сквозная нумерация озаботился написанием макроса печатающего набор файлов разного типа, в нужном мне порядке, для формирования комплекта документации. Обычно в комплектах бывают файлы ворд, ексель и пдф, количество и состав файлов разный. Первым макросом формируется список файлов на листе, за основу взял код из примера https://www.planetaexcel.ru/techniques/12/45/. Затем получаю список принтеров доступных компьютеру, хотелось бы иметь возможность направления на печать на определенный принтер, а не только на тот, что по умолчанию, но пока не понимаю как это сделать не для еселевских файлов. Дело еще не завершено, но столкнулся вот с таким моментом: во время отладки кода по F8 весь код печати нормально отрабатывается, все файлы из списка распечатываются. В отладочном примере был использован список из 3-х файлов, один ексель и два - ворд. При полноценном же запуске этого же кода, на печать выводятся только 2 файла ворд. Что я делаю не так? Подозреваю что это связано с процедурой печати, но почему при отладке всё срабатывает?
Код
Sub ListPrnt()
Dim lprnt(), t As Single
'Dim vTimeout
Const vTimeout = 3
k = [C4].Value ' кол-во экземпляров
Pt = [C8] ' Принтер
With Selection
ReDim lprnt(1 To Selection.Count)
For x = 1 To k ' кол-во экземпляров
For i = 1 To Selection.Count
' lprnt(i) = Selection(i) ' это я хотел через массив оформить, передумал
CreateObject("Shell.Application").ShellExecute _
Selection(i), "", "", "Print", 0&
t = Timer + vTimeout
While Timer < t
DoEvents
Wend
Next
Next
End With
End Sub
Доброго дня. Возможно ли настроить при печати всей книги или нескольких выделенных листов не сквозную нумерацию страниц, так чтобы у каждого листа (это отдельные документы) сохранялась своя нумерация страниц, от первой до последней страницы каждого листа? Конечно, можно выводить на печать листы по одному, и всё будет в порядке, но ведь удобнее распечатать всё сразу, особенно если надо несколько экземпляров.
Добрый день. Никак не соображу, как мне из Listbox отобрать данные из четвертого столбца по выбранным строкам. Всего столбцов четыре, в первых трех находятся справочно-описательная информация, собственно данные - в четвертом. Числовые значения. Вот этот код работает, но только для первого столбца:
Код
Private Sub ButtonSetKoef_Click()
' ///////////формула коэф-тов
Dim Msg As String
Dim i As Integer
If ListBoxKoef.ListIndex = -1 Then
Msg = "Ничего не выделено"
Else
Msg = ""
For i = 0 To ListBoxKoef.ListCount - 1 ' работает
If ListBoxKoef.Selected(i) Then _
Msg = Msg & ListBoxKoef.List(i) & vbCrLf ' работает, но выводит толькой 1-й столбец
Next i
End If
MsgBox "Вы выбрали: " & vbCrLf & Msg
End Sub
Пытался прописать так, но во все отобранные позиции загружается значение последнего из выбранных:
Код
If ListBoxKoef.Selected(i) Then _
Msg = Msg & ListBoxKoef.List(ListBoxKoef.ListIndex, 3) & vbCrLf
Потом уже вычитал, что при мультивыборе ListIndex так и должен работать. В дальнейшем выбранные данные предполагается использовать при расчете в формуле:
где, 1,02... 1,04 и есть данные, которые надо выгрузить из 4-го столбца. Данных может быть от одного до нескольких значений. Но думаю с формулой то я справлюсь. Было бы что в неё подставлять.
Доброго всем здоровья. Подскажите, как правильно заново подгрузить данные из массива в форму при её повторном вызове после закрытия? Проблема такая: в первую форму (так получилось что это UserForm2) загружается список справочников, после выбора справочника вызывается вторая форма (UserForm1), в которую подгружается содержимое выбранного справочника. Решил добавить кнопку возврата к форме со справочниками, для возможности выбора другого справочника, но форма открывается пустой (я так понимаю, при закрытии формы её данные очищаются?). Не долго думая, вставил в код кнопки вызова формы копию кода её заполнения данными из массива из модуля инициализации формы, но ничего не получилось. Пытался объявить переменную массива глобальной - тоже не помогло. Постоянно выдает разного рода ошибки, т.к. я не спец в VBA, понял далеко не всё. Как поправить код, чтобы повторно вызываемая форма так же заполнялась перечнем справочников?
Всем здравствуйте. Необходимо в отфильтрованном диапазоне найти максимальное значение цифро-символьного кода.
В пределах диапазона первые пять символов каждого значения одинаковые, представляют собой две пары чисел разделенных знаком тире(минус), дальше могут быть варианты: 1. всего лишь эти пять символов и больше ничего, 2. после этих пяти символов стоит точка и число. Число может быть однозначным или двузначным. Очень желательно сделать это формулой, и без дополнительных столбцов.
Всем здравствуйте. Вроде этот вопрос обсуждался, но что-то не смог отыскать. Суть вопроса: в ячейках, отформатированных как текст, содержатся текстовая информация типа "СР 02-01-04" или "смета 02-01-03". Набор чисел может быть разный, но всегда шестизначный с разделение пар чисел знаком тире, т.е. напоминает дату. При замене через Ctrl+H, к примеру "СР " на "" , 02-01-04 преобразуется в дату 02.01.2004. Каким-то образом можно это отключить, чтоб цифровая составляющая осталась без изменений? При редактировании каждой такой ячейки вручную такой замены не происходит. Данные ниоткуда не подгружаются, были в свое время введены в таком виде.
Всем доброго времени суток. Пришлось собирать данные из нескольких файлов в один, на один лист, последовательно, сверху вниз, сохраняя структуру и формулы. Когда количество файлов перевалило за сотню, озадачился автоматизацией процесса. Сам в VBA не силен, поэтому искал что-то подходящее в тырнете. Многократно предлагаемый вариант сбора листов не подходит, надо собирать на один лист. Наткнулся на задачу похожую на мою, и даже написано что работает, но у меня не завелось. Нашел здесь https://forumvba.ru/index.php?topic=1285.0
При запуске выводится сообщение об ошибке "... User-defined type not defined", и выделяется строка:
Код
Dim fso As Scripting.FileSystemObject
Подскажите пожалуйста, что не так, либо другое решение моей задачи. Копируемый диапазон в разных файлах по количеству строк разный, но шапка одна и та же, везде данные начинаются с одной и той же строки. Количество столбцов одинаковое.
Всем доброго времени. Имеется файл в котором ведется журнал работ. Файл должен храниться доступно на сетевом диске, но т.к. временами случаются сбои сети, веду файл на локальном диске с последующим копированием на сетевой. Обновлять файл приходится часто, поэтому решил облегчить себе жизнь - делать это макросом. Но народ на работе пугливый, макросов боится, поэтому в доступе желательно хранить файл как обычную таблицу xlsx. Посмотрел образцы в приемах и на https://www.excel-vba.ru/ . На их основе наваял. Всё получилось, работает, но некоторые моменты не нравятся. Если использовать ActiveWorkbook.SaveAs то после выполнения кода активной становится книга-копия для всех, и если файл не закрыть, то последующие изменения вносятся в неё, а не в исходный файл, и могут элементарно не сохраниться при перезаписаны исходным файлом, т.е. надо следить за тем, какой файл правишь.
Код
Sub Backup()
iPath$ = "z:\eee\hhhh\jjjj\"
iFileName$ = ActiveWorkbook.Name
ActiveWorkbook.Save
iFileName$ = Left(iFileName$, Len(iFileName$) - 4) & "xlsx"
ActiveWorkbook.SaveAs Filename:= _
iPath$ & iFileName$, FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
End Sub
При использовании ActiveWorkbook.SaveCopyAs, вроде бы все происходит как надо, но при попытке открыть файл-копию выдается сообщение об ошибке, что расширение не соответствует типу файла, и не открывается.
Код
Sub Backup_Active_Workbook()
Dim x As String
strPath = "z:\eee\hhhh\jjjj" 'папка для сохранения резервной копии
On Error Resume Next
x = GetAttr(strPath) And 0
If Err = 0 Then ' если путь существует - сохраняем копию книги, добавляя дату-время
FileNameXls = strPath & "\" & "AAAA" & ".xlsx"
ActiveWorkbook.SaveCopyAs Filename:=FileNameXls
Else 'если путь не существует - выводим сообщение
MsgBox "Папка " & strPath & " недоступна или не существует!", vbCritical
End If
End Sub
Что можно сделать со всем этим? Хотелось бы чтоб работало так: вносятся правки в исходный файл, запускается код создающий копию в формате xlsx; вносятся новые правки и, дальше по накатанной.
Всем доброго дня. Что-то я делаю не так, но не соображу что именно. Необходимо в формуле, вставляемой на лист макросом, использовать значение переменной (можно считать её постоянной, в течении работы макроса её значение неизменно). На все свои попытки получаю сообщения об ошибке, либо от дебагера, либо уже на листе. Надо значение ячейки разделить на индекс, задаваемый переменной. Сильно не пинайте, в кодах хромаю на обе ноги, что нужно исправить?
Код
Sub Смета_Ф()
......
Dim Ind2 As Double
Ind2 = 6.9
......
Cells(x + 15, 11).FormulaR1C1 = "=R[-3]C/6.9" ' работает
Cells(x + 15, 11).FormulaR1C1 = "=R[-3]C/Ind2" ' не работает, ошибка #ИМЯ? на листе
Cells(x + 15, 11).FormulaR1C1 = "=R[-3]C/" & Ind2 ' не работает ошибка кода 1004
......
Всем здравствуйте. Подскажите, возможно ли изменение изменение предела счетчика в процессе работы цикла For Next? Т.е. в цикле заданном For i=1 To n, возможно ли изменение величины n в процессе исполнения цикла?
Доброго времени суток. Информация поступающая из Кореи подкинула задачку, просто для общего развития хотел разобраться. Как видно из таблицы (столбы A-F заполненны данными взятыми с https://sport.mail.ru/korea/medals/), места определяются по количеству золотых медалей, при их равенстве по серебряным и т.д. Страны набравшие равное количество балов занимают одно место сообща, при этом страна находящаяся на ступеньку ниже них, по странному расчету по факту стоит на 2 ступеньки ниже. Вот как этот скачек через ступеньку и не соображу как просчитать. "Массовую долю" медалей в (C1:E1) взял с потолка.
Добрый день, уважаемые. В целях облегчения работы задался целью создания таблицы подсчета объемов работ. Все вроде получилось более или менее, но готов выслушать предложения по улучшению. Не нравится как я сделал выборку объемов по дверям, формула получилось громоздкая, и если понадобиться добавлять столбцы, надо будет сидеть править. Хотел реализовать то же самое через СУММПРОИЗВ, но что-то я делаю не так. Помогите найти ошибку, пожалуйста. Данные по размерам подтягиваются в основную таблицу с другого листа, в этом примере я их отсек, для облегчения файла.
Добрый вечер. Написал макрос для вставки формулы округления в ячейку с уже имеющейся формулой . Не хватает познаний в VBA для того, чтобы сделать то же самое для произвольного количества выделенных ячеек, произвольного расположения. Помогите пожалуйста доработать макрос.
Всем здравствуйте. Возникла необходимость извлечь из ячейки три числовые значения, записанные с разделением переносом строки, как одно число. У меня получилось их извлечь, первое и второе - как текст, третье - как число. Но мне надо чтобы они все три были числами, т.к. будут участвовать в расчетах. Вариант получить иной вариант исходной ячейки не проходит, данные формируются сметной программой, и на это повлиять невозможно.
Добрый день. Как программно закрыть вызванное окно ActiveWindow.SelectedSheets.PrintPreview? Дело в том, что это окно приходится вызывать потому, что команда ActiveWorkbook.Worksheets(1).HPageBreaks.Count + 1 выдает верные данные только после предварительного просмотра. Файл просматривается не один, и хотелось бы избежать ручного закрытия каждого всплывающего окна. Если есть другие способы узнать количество печатных страниц в листе книги, буду только рад узнать его.
Код
Dim pg As Integer ' кол-во страниц
...
ActiveWindow.SelectedSheets.PrintPreview ' Требуется ручное закрытие предпросмотра
pg = ActiveWorkbook.Worksheets(1).HPageBreaks.Count + 1
Добрый день. Подскажите, как в макросе использовать подстановочные символы типа "*" или "?", используемые при обычном поиске? Никак не соображу, а поиск в инете уводит в такие теоретические выкладки, что мозг закипает. Задача такая: есть книга (заполняется она другим отделом, и повлиять на этот процесс нет возможности), в ней листы по месяцам, и к сожалению в именах листов встречаются лишние пробелы, например "май ", а есть и без "излишеств". Каким образом отсечь такие лишние пробелы?
Код
Sub General_Work()
Dim dLastRow As Long, sLastRow As Long, sSheet As String, Mounth As String, sPath As String, sFileName As String
Set dbk = Application.ActiveWorkbook
Mounth = Sheets(1).Cells(2, 7) ' ячейка в которой указан необходимый месяц
dLastRow = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
sPath = "D:\отдел\"
sFileName = "реестр.xls"
Workbooks.Open Filename:=sPath & sFileName, _
ReadOnly:=True
Set sbk = Application.ActiveWorkbook
sLastRow = Sheets("ВЫП " & Mounth & " ").Cells(Rows.Count, 2).End(xlUp).Row 'работает, нужен подст симв
' sLastRow = Sheets("ВЫП " & Mounth & "*").Cells(Rows.Count, 2).End(xlUp).Row 'не работает
MsgBox " Последняя строка: " & sLastRow
End Sub
Добрый день. Знаю, похожие темы поднимались, я старательно изучал что смог найти. И не только на этом замечательном сайте. Задача состоит в том, чтобы получить имя другого пользователя, открывшего в режиме редактирования книгу excel, расположенную на сетевом диске. Все изученные мной примеры выводят имя пользователя запустившего макрос, т.е. меня самого. Это вообще возможно? Наверное да, ведь в сообщении о том что файл занят пишется кем он занят, правда иногда пишется имя пользователя, а иногда - другой пользователь. Смысл в том, что макрос определения имени надо запускать не из того файла который бывает занят, а из другого.