Страницы: 1
RSS
Создание кнопки для копирования ячеек
 
Добрый день всем. Помогите, всю голову сломал, облазил форумы, не могу найти инфу.
Есть файл, в нем на первом листе располагаются определенные расчеты. В результате этих расчетов получается диапазон из 6 ячеек с числами.
Затем в книге идет 30 листов на каждый день в месяце. Каждый день ведутся расчеты на 1 листе и результаты нужно копировать в определенный лист исходя из даты. Нужно сделать кнопку, которая будет копировать данные с первого листа и вставлять их на активный лист.
Нужна формула именно для активного листа, чтобы не называть в макросе конкретный лист, т.к. расчетов каждый день много и кнопок копирования только на каждом листе будет по 24 штуки. Можно ли такое осуществить?
 
Цитата
Partizan27 написал:
кнопок копирования только на каждом листе будет по 24 штуки
24 х 30 = 720 (кнопок!) Вы серьезно?
Приложите файл-пример. Как есть - Как надо
Согласие есть продукт при полном непротивлении сторон.

Контакты, благодарности
 
В том и дело, что нужно сделать так, чтобы макросов было всего 24. Можно ли как то обращаться к активному листу? Чтобы макрос для 3 и 4 листа например был одинаковый. Если жмешь кнопку на 3 листе, то активным будет 3 лист, если на 4 листе жмешь кнопку то активным будет 4 лист
Изменено: Partizan27 - 07.02.2024 16:53:20
 
Цитата
Partizan27 написал:
Можно ли как то обращаться к активному листу?
Код
ActiveSheet
Согласие есть продукт при полном непротивлении сторон.

Контакты, благодарности
 
Это я знаю, но в макросе не получается сослаться на него. Пример бы кода для макроса с активным листом
Изменено: Partizan27 - 07.02.2024 16:58:33
 
Странно...
Код
Sub ПримерКода()
  ActiveSheet.Range("A1").Select
End Sub
Согласие есть продукт при полном непротивлении сторон.

Контакты, благодарности
 
Цитата
написал:
Странно...
Ну здесь просто выбор ячейки на активном листе. А если так: кнопка находится на листе 3, при нажатии на кнопку макрос копирует диапазон ячеек из листа 1 и вставляет в лист 3. Но так чтобы «лист 3» не упоминать, чтобы этот же макрос применить на листе 4 например.
 
А как макросу дать понять, что в одном случае скопированные данные вставить на Лист3, а в другом - на Лист4? Если себе ответите на этот вопрос, то, думаю, не составит труда написать такой макрос
Согласие есть продукт при полном непротивлении сторон.

Контакты, благодарности
 
Я не знаю, какую задачу Вы решаете, и Ваш файл-пример мир так и не увидел, но, возможно тут найдете что-то нужное
КТО ВЫЗВАЛ ФУНКЦИЮ ИЛИ ПРОЦЕДУРУ?
Согласие есть продукт при полном непротивлении сторон.

Контакты, благодарности
 
Цитата
написал:
А как макросу дать понять, что в одном случае скопированные данные вставить на Лист3, а в другом - на Лист4? Если себе ответите на этот вопрос, то, думаю, не составит труда написать такой макрос
Скажем так есть две одинаковые кнопки, одна кнопка на 3 листе, вторая кнопка на 4 листе. Если нажимаешь кнопку, которая находится на 3 листе, то данные вставляются на 3 лист, если нажимаешь кнопку на 4 листе, то данные вставляются на лист 4. Я не силён в этом языке и первый мой вопрос реально ли вообще так сделать? И если реально то как? Файл пример большой и можно запутаться, поэтому объясняю в общих чертах, думаю что объяснил доступно что хочу)
 
Ну прямо об этом написано по ссылке выше! Application.Caller
Код
Sub CopyToSheet()
Dim iSheet As Worksheet
Select Case Application.Caller
  Case Is = "cmbtSheet3"
    Set iSheet = Worksheets("Лист3")
  Case Is = "cmbtSheet4"
    Set iSheet = Worksheets("Лист4")
End Select
Worksheets("Лист1").Range("A1:A10").Copy iSheet.Range("A1")
MsgBox "Данные скопированы на лист - '" & iSheet.Name & "'", vbInformation + vbOKOnly
End Sub

См.файл-ПРИМЕР!
Самому нельзя было такой соорудить?
Согласие есть продукт при полном непротивлении сторон.

Контакты, благодарности
 
Если Вам нужно скопировать данные на тот же лист, на котором расположена кнопка, то тогда достаточно одной строки кода
Код
Sub CopyToSheet()
Worksheets("Лист1").Range("A1:A10").Copy ActiveSheet.Range("A1")
MsgBox "Данные скопированы на лист - '" & ActiveSheet.Name & "'", vbInformation + vbOKOnly
End Sub
Согласие есть продукт при полном непротивлении сторон.

Контакты, благодарности
 
Цитата
написал:
Если Вам нужно скопировать данные на тот же лист, на котором расположена кнопка, то тогда достаточно одной строки кода
Вот это уже ближе к делу, завтра попробую. И еще вопрос: как сделать специальную вставку? чтобы вставлял только цифры
 
Цитата
написал:
Если Вам нужно скопировать данные на тот же лист, на котором расположена кнопка, то тогда достаточно одной строки кода
Всё отлично, только как сделать специальную вставку? Чтобы скопировались только значения из ячейки? Потому что в исходной ячейке формула, она и копируется нажатием на кнопку сейчас.
 
Цитата
Partizan27 написал:
Потому что в исходной ячейке формула,
А что еще в исходной ячейке? Может Вы все таки СВОЙ файл-сделаете? С учетом ВСЕХ исходных данных
Цитата
Partizan27 написал:
как сделать специальную вставку?
Записать макрорекордером и допилить под себя
Согласие есть продукт при полном непротивлении сторон.

Контакты, благодарности
 
Цитата
написал:
А что еще в исходной ячейке? Может Вы все таки СВОЙ файл-сделаете? С учетом ВСЕХ исходных данных
Вот исходник. На листе "Грансостав" происходят расчеты, затем в диапазоне C11:H11 появляются результаты. Значения из этих ячеек нужно скопировать на другие листы. Например одна из кнопок располагается на листе "3". Нужно вставить значения из наших расчетов на лист 3 в диапазон D10...
В итоге нужно будет в каждой строчке вставить по кнопке, чтобы было так: посчитал - вставил в строчку, затем посчитал следующее - вставил в строчку.
Изменено: Partizan27 - 12.02.2024 09:45:53
 
?
Код
Sub Кнопка1_Щелчок()
  Worksheets("Грансостав").Range("C11:H11").Copy
  ActiveSheet.Range("D10").PasteSpecial xlPasteValues
End Sub

Цитата
Partizan27 написал:
В итоге нужно будет в каждой строчке вставить по кнопке
А нельзя данные вставлять в таблицу последовательно?
Каждая следующая строка в таблице на листе 3, копируется ниже предыдущей?
Что-бы кнопки не плодить
Согласие есть продукт при полном непротивлении сторон.

Контакты, благодарности
 
Цитата
написал:
А нельзя данные вставлять в таблицу последовательно? Каждая следующая строка в таблице на листе 3, копируется ниже предыдущей? Что-бы кнопки не плодить
Бывает что нужно вставить в определенную строчку данные, либо пересчитать и изменить. Поэтому наверное придется все-таки наплодить кнопок, но хотя бы их будет 24, а не 700...))
 
Цитата
написал:
На листе "Грансостав" происходят расчеты, затем в диапазоне C11:H11 появляются результаты. Значения из этих ячеек нужно скопировать на другие листы. Например одна из кнопок располагается на листе "3". Нужно вставить значения из наших расчетов на лист 3 в диапазон D10...В итоге нужно будет в каждой строчке вставить по кнопке, чтобы было так: посчитал - вставил в строчку, затем посчитал следующее - вставил в строчку.
Файл во вложении

Инструкция:
1. для начала переименуйте все листы с цифрами, что бы лист назывался например "1 "- был пробел, иначе листы с целыми значениями vba воспринимает порядковый номер листа, а не его имя.
2. добавил 2-е кнопки. Сначала необходимо нажать "1.Добавить выпадающий список, и имена листов в него"
3. В ячейке К2 на листе "Грансостав" выбрать имя листа из выпадающего списка, куда нужно вставить расчет
4. Нажать кнопку "2.Скопировать данные на выбранный лист из выпадающего списка".

ps удалил несколько листов для уменьшения размера файла.
При добавлении новых листов нажимайте кнопку "1.Добавить выпадающий список, и имена листов в него", что бы имена попали в выпадающий список

Цитата
написал:
А нельзя данные вставлять в таблицу последовательно? Каждая следующая строка в таблице на листе 3, копируется ниже предыдущей? Что-бы кнопки не плодить
Для заполнения последовательно строк, используй цикл For и условия if и проверяйте на заполненность ячейки. Инфы в интернете масса по этому вопросу.
....Если надо объяснять, то не надо объяснять!
Для связи https://t.me/c4egga
Страницы: 1
Наверх