Добрый вечер! Благодаря знаниям и умениям знатоков удалось добавлять строки макросом в таблицы, расположенные на одном листе, не смещая при этом исходные таблицы: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=111903&a..., за что еще раз всем огромное спасибо. Теперь появилась необходимость удалять строки в каждой таблице. Не имеет значения есть в них данные или нет. Важно, чтобы нельзя было удалить строку, если она последняя в данной таблице. Помогите, пожалуйста.
Юрий М, спасибо огромное!!! "подпилил" под свои наименования таблиц -- все работает!!! Разобрался, как изменить количество копируемых столбцов (или ячеек в данном случае). Но вот так и не понял, как изменить код, если нужно не одну строку добавить, а три. Причем часть ячеек объединенные, как в прилагаемом примере.
ЮрийМ, изначально все таблицы с одной пустой строкой и шапкой. После ее заполнения ползователь может добавить еще одну, если есть необходимость. Но у него могут быть данные только на одну строку в таблице. А может быть такое, что и вовсе не будет заполнять и перейдет к следующей таблице
_Igor_61, здравствуйте. есть некоторое количество таблиц, которые заполняет пользователь. Например, в таблице 1 вводятся родственники: отец, мать, брат, сват и т.д. Изначально в таблице одна строка. После ее заполнения пользователь добавляет вторую и зполняет ее, затем еще одну. После того, как родственники закончились переходит к таблице 2 - например, опыт работы. Там тоже изначально одна строка. Заполнил первую, добавляет вторую и т.д. Далее таблица 3 и т.д. конечно, он может вернуться к предыдущей таблице и добавить еще сведения. ну вот как то так. Не очень кратко, но, хотелось бы верить, что понятно
Z, кнопка добавляет по одной строке, таких добавлений может быть сколь угодно много. Строки добавляю пустые, внизу таблицы. Но для того, чтобы сохранить форматы делаю это копированием.
Ігор Гончаренко, понимать понимаю, но не контролирую ))) Другими словами, все мое понимание в том, что макрос добавляет строку именно в том месте, где я ему указал. Дальше этого мое понимание не простирается Потому и записал макрорекодером - знаний не хватает
Добрый всем вечер! Есть три таблицы на одном листе. В каждую есть необходимость добавлять строки. Записал макрорекодером. Если идти снизу вверх (от Таблицы 3 к Таблице 1), то никаких проблем - строки копируются и добавляются. Но если, например, добавить несколько строк в Таблицу 1, то при выполнении макроса к таблице 2, строки добавляются уже со смещением (не в Таблице 2, а выше). Понимаю, почему это происходит, но не знаю, как это обойти.
приятно быть в числе некоторых менее приятно быть в числе некоторых, о которых говорят в уничижительном смысле
Юрий, я не профессионал, я только учусь если форум для профессионалов, имеет смысл таким как я не позволять задавать вопросы, а только дать доступ к чтению или вообще оставить доступ только избранным.
что не так с первоначальным названием темы? в пояснении и сообщении я излагаю суть проблемы
Андрей VG написал: А почему не делаете сводной? В чём смысл именно формулами?
Есть история продаж, например, с января по июль. Нужно добавить к ней новый месяц, например, август, в котором могли появиться новые артикулы. Как это учесть при формировании сводной?
gling написал: А макрос где? В формате .xlsx макросы не живут, выложите пример в формате .xls или .xlsm.
выложил. понимаю, что он корявый )) но в условиях отсутствия знаний vba приходится пользоваться макрорекодером P.S. пользовался и макросом 1, и макросом 8
gling написал:... возможно есть формулы на других листа и они тормозят расчеты. СУММЕСЛИ не должна так тормозить
Да в том то и дело, что нет никаких формул, кроме СУММЕСЛИ. Я их с помощью Копировать - Вставить значения убираю в ходе выполнения макроса. приложил файл
БМВ написал: Ответ очевиден. Нужно оптимизировать процесс. Но так как он не описан тут , то помочь в этом мы не сможем.
старался не сильно загружать подробностями Задача следующая: есть продажи артикулов по месяцам (строки - артикулы, столбцы - месяцы), нужно каждый новый месяц добавлять новые продажи,при этом могут появляться новые артикулы. Я пошел по следующему пути: собрал на новый лист старые артикулы и новые, отсортировал их и удалил дубликаты. Далее на новом листе собираю данные с исходного при помощи СУММЕСЛИ и листа с данными нового месяца. Вот и весь процесс
Доброго дня! С Днем знаний! Поделитесь, пожалуйста, познаниями и опытом )
Подтягиваю данные с одного листа на другой с помощью СУММЕСЛИ. Таблица очень большая: 60 тысяч + строк на 60 столбцов. СУММЕСЛИ использую внутри макроса, написанного макрорекодером. Запускаю макрос --- время на выполнение уходит от 20 минут до ... Попробовал в макрос добавить процедуру выключения/включения обновлений экрана и пересчетов в начале и в конце макроса. Значительно быстрее, но все равно долго. Подскажите, как можно оптимизировать процесс?
Anchoret, конечно, как *xlsm сохранил. Он ведь с кучей макросов был. Чудеса )) Ваш файл работает - мой нет )) Сначала думал, что дело все в апострофе перед данными в ячейке (кстати, так и не разобрался откуда он взялся и что значит). Апостроф убрал, но результат остался тем же: "Недопустимая ссылка". файл прилагаю
Anchoret, после выполнения макроса в столбце В значения ячеек определяются как гиперссылки, но когда нажимаю на нее появляется сообщение "Недопустимая ссылка"
Доброго всем дня/ночи)) Возможно ли совместить Inputbox и выпадающий список? Например: в диалоговом окне запрашиваем у пользователя "Введите город", пользователь может выбрать только предложенные варианты (по аналогии с выпадающим списком).
Спасибо, Юрий! Получилось вывести список листов, исключая сам "Реестр":
Код
Dim sheet As Worksheet
Dim cell As Range
s = 1
With ActiveWorkbook
For Each sheet In ActiveWorkbook.Worksheets
If sheet.Name <> "Реестр" Then
Set cell = Worksheets("Реестр").Cells(s + 2, 2)
s = s + 1
.Worksheets("Реестр").Hyperlinks.Add anchor:=cell, Address:="", SubAddress:="'" & sheet.Name & "'" & "!A1"
cell.Formula = sheet.Name
End If
Next
End With
End Sub
Но мой алгоритм предусматривает, что сначала создается лист с наименованием АВС, затем в столбце В в листе "Реестр" создается ячейке присваивается значение АВС.
Часть данных в лист "Реестр" подтягивается этим же макросом из листа АВС, а часть вводится вручную. После добавления нового листа запускаем макрос из "Приемов" и данные плывут. С теми, которые заполняются моим макросом проблем быть не должно, а вот данные, введенные руками, сдвинутся. Возможно ли все-таки не выводить список гиперссылок всех нужных листов, а преобразовать содержимое ячейки в гиперссылку?
Добрый день! Есть макрос, который создает новые листы в книге и присваивает им имена по некоторому правилу. В другом листе (назовем его "Реестр") в столбце, например B, присвоенные имена добавляются по мере добавления новых листов. Другими словами: есть листы ВВА, СВА, АВС и т.д. На отдельном листе "Реестр" в столбце В в ячейках прописаны эти же самые ВВА, СВА, АВС и т.д. Возможно ли в листе реестр в столбце В сделать ВВА, СВА, АВС и т.д гиперссылками на соответствующие листы? Прописывать руками не шибко рационально, т.к. новые листы с новыми именами постоянно создаются пользователем. возможно, несколько кривовато объяснил, поэтому файл, на всякий случай, прилагаю
Sub Zakaz()
Dim Sht As Worksheet
Dim i As Long
Dim iLastRow As Long
Dim iLR As Long
Dim Naimenovanie As Range
Dim FoundZakaz As Range
Dim TSena As Range
Range("A7:E33").ClearContents 'очищаем диапазон под данные
For Each Sht In Worksheets
If Sht.Name <> "заказ" Then
With Sht
Set FoundZakaz = .Rows("1:2").Find("заказ", , xlValues, xlWhole, 2)
iLR = .Cells(.Rows.Count, FoundZakaz.Column).End(xlUp).Row
Set TSena = .Rows("1:2").Find("Цена", , xlValues, xlWhole)
Set Naimenovanie = .Rows("1:2").Find("Наименование", , xlValues, xlWhole, 2)
For i = 3 To iLR
If Not IsEmpty(.Cells(i, FoundZakaz.Column)) Then 'есть заказ
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
If iLastRow < 34 Then
Cells(iLastRow, 1) = .Cells(i, Naimenovanie.Column) 'наименование
Cells(iLastRow, 2) = .Name 'поставщик
Cells(iLastRow, 3) = .Cells(i, FoundZakaz.Column) 'кол-во
Cells(iLastRow, 5) = .Cells(i, TSena.Column) 'цена
Else
MsgBox "Закончились строки бланка заказа"
Exit Sub
End If
End If
Next
End With
End If
Next
For Each Sht In Worksheets
If Sht.Name <> "Заказ" Then
With Sht
Set FoundZakaz = .Rows("1:2").Find("заказ", , xlValues, xlWhole, 2)
.Columns(FoundZakaz.Column).ClearContents
.Cells(1, FoundZakaz.Column) = "заказ"
End With
End If
Next
End Sub