Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Копирование с форматированием на другой лист макросом - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Копирование с форматированием на другой лист макросом
nordri Дата: Вторник, 20.06.2023, 19:43 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
В книге есть несколько листов, из которых нужно вызвать макрос для записи на другом:

В книге Лист1 и Лист3 на них кнопка для вызова макроса на Лист2

[vba]
Код
Sub CopyPastInsert()
Dim myRange As Range
Set myRange = ActiveWorkbook.Sheets("Лист2").Range("A1")
'Set myRange = ActiveWorkbook.Worksheets("Лист2").Range("A1")
myRange.Activate 'Пытаюсь сделать активной ячейку A1 на листе Лист2
    Range("c10").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'  Вставляю новые ячейки со сдвигом вниз, со вставкой формата оригинала
myRange.Copy
' Range("A1").Copy
    Range("c10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("c10").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
         Application.CutCopyMode = False
Range("A1").Select
End Sub
[/vba]
Пример
работает только если его вызывать на Лист2

Нагуглил, но подружить их не смог. Что я не понимаю?

P.S. Хочу использовать переменные для диапазона ячеек:
[vba]
Код
Set myRange = ActiveWorkbook.Sheets("Лист2").Range("A1:A2, B2:D4")
'И тому подобное...
[/vba]
К сообщению приложен файл: vremja_5.xlsm (22.1 Kb)


Сообщение отредактировал nordri - Вторник, 20.06.2023, 21:07
 
Ответить
СообщениеВ книге есть несколько листов, из которых нужно вызвать макрос для записи на другом:

В книге Лист1 и Лист3 на них кнопка для вызова макроса на Лист2

[vba]
Код
Sub CopyPastInsert()
Dim myRange As Range
Set myRange = ActiveWorkbook.Sheets("Лист2").Range("A1")
'Set myRange = ActiveWorkbook.Worksheets("Лист2").Range("A1")
myRange.Activate 'Пытаюсь сделать активной ячейку A1 на листе Лист2
    Range("c10").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'  Вставляю новые ячейки со сдвигом вниз, со вставкой формата оригинала
myRange.Copy
' Range("A1").Copy
    Range("c10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("c10").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
         Application.CutCopyMode = False
Range("A1").Select
End Sub
[/vba]
Пример
работает только если его вызывать на Лист2

Нагуглил, но подружить их не смог. Что я не понимаю?

P.S. Хочу использовать переменные для диапазона ячеек:
[vba]
Код
Set myRange = ActiveWorkbook.Sheets("Лист2").Range("A1:A2, B2:D4")
'И тому подобное...
[/vba]

Автор - nordri
Дата добавления - 20.06.2023 в 19:43
cmivadwot Дата: Вторник, 20.06.2023, 21:59 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 531
Репутация: 96 ±
Замечаний: 0% ±

365
nordri, Что-то сделал.. начал работать с др. листов))) а что делает тест зачем?
К сообщению приложен файл: 1832300.xlsm (24.7 Kb)


Сообщение отредактировал cmivadwot - Вторник, 20.06.2023, 22:05
 
Ответить
Сообщениеnordri, Что-то сделал.. начал работать с др. листов))) а что делает тест зачем?

Автор - cmivadwot
Дата добавления - 20.06.2023 в 21:59
cmivadwot Дата: Вторник, 20.06.2023, 22:16 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 531
Репутация: 96 ±
Замечаний: 0% ±

365
nordri, вот еще поковырял... макрос тест.. теперь зависает на стр2 3 секунды, вставляет дата..время, еще подвисает и переходит на лист 1.. теперь типа видно, что там скопировалось)))
К сообщению приложен файл: 2073377.xlsm (24.8 Kb)


Сообщение отредактировал cmivadwot - Вторник, 20.06.2023, 22:22
 
Ответить
Сообщениеnordri, вот еще поковырял... макрос тест.. теперь зависает на стр2 3 секунды, вставляет дата..время, еще подвисает и переходит на лист 1.. теперь типа видно, что там скопировалось)))

Автор - cmivadwot
Дата добавления - 20.06.2023 в 22:16
nordri Дата: Четверг, 22.06.2023, 16:31 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
У меня наконец то сформировалось понимание, что мне надо в данной задаче!

Три листа (новый Пример), на одном хранятся ДАННЫЕ, а с других происходит вызов скрипта...
Из Листа ОТБЫТИЕ мне нужно взять значение из ячейки A1 и вставить его в ячейку C5 на листе ДАННЫЕ, после копирования текущего времени уже на листе ДАННЫЕ.
А в ячейку B5 имя листа... А если скрипт вызван с листа ДАННЫЕ то ничего вставлять не нужно (возможно тут нужно If ?).
И да, особенно необходимо диапазоны передавать через переменные...
Вот здесь я хотел бы для уже объявленного столбца [vba]
Код
Set myNewRange = ActiveWorkbook.Sheets("Данные").Range("a5")
[/vba]
сходу получить [vba]
Код
Sheets("Данные").Range("с5")' Там где "Не будет работать..."
[/vba] Это возможно?




[offtop]Оказывается не в той ветке тему создал... Стыдно... :blink:
К сообщению приложен файл: vremja_10_dlja_foruma.xlsm (33.5 Kb) · 5765943.jpg (55.7 Kb)


Сообщение отредактировал nordri - Четверг, 22.06.2023, 19:14
 
Ответить
СообщениеУ меня наконец то сформировалось понимание, что мне надо в данной задаче!

Три листа (новый Пример), на одном хранятся ДАННЫЕ, а с других происходит вызов скрипта...
Из Листа ОТБЫТИЕ мне нужно взять значение из ячейки A1 и вставить его в ячейку C5 на листе ДАННЫЕ, после копирования текущего времени уже на листе ДАННЫЕ.
А в ячейку B5 имя листа... А если скрипт вызван с листа ДАННЫЕ то ничего вставлять не нужно (возможно тут нужно If ?).
И да, особенно необходимо диапазоны передавать через переменные...
Вот здесь я хотел бы для уже объявленного столбца [vba]
Код
Set myNewRange = ActiveWorkbook.Sheets("Данные").Range("a5")
[/vba]
сходу получить [vba]
Код
Sheets("Данные").Range("с5")' Там где "Не будет работать..."
[/vba] Это возможно?




[offtop]Оказывается не в той ветке тему создал... Стыдно... :blink:

Автор - nordri
Дата добавления - 22.06.2023 в 16:31
RAN Дата: Четверг, 22.06.2023, 22:04 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
В принципе, код не сложный. но
У меня наконец то сформировалось понимание, что мне надо в данной задаче!

мне, в отличие от вас, так и не удалось это понять.
Про слова в столбце В вопросов нет. Но какие цифирьки, и откуда в столбцах А и С?
22.06.2023 В 15:18:20 Прибытие 21.06.2023 19:24
22.06.2023 В 15:18:12 Отбытие 20.06.2023 21:59
booze killed


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВ принципе, код не сложный. но
У меня наконец то сформировалось понимание, что мне надо в данной задаче!

мне, в отличие от вас, так и не удалось это понять.
Про слова в столбце В вопросов нет. Но какие цифирьки, и откуда в столбцах А и С?
22.06.2023 В 15:18:20 Прибытие 21.06.2023 19:24
22.06.2023 В 15:18:12 Отбытие 20.06.2023 21:59
booze killed

Автор - RAN
Дата добавления - 22.06.2023 в 22:04
nordri Дата: Пятница, 23.06.2023, 13:13 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 37
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Но какие цифирьки, и откуда в столбцах А и С?

На листе ДАННЫЕ столбце A это текущее время из Ячейки A1 листа ДАННЫЕ. А в столбце C с листа ПРИБЫТИЕ из "Итог" с красным шрифтом G4, ну либо на том же листе ПРИБЫТИЕ из ячейки A1.
А сами цифИрькИ это так, пример...
Хотя вроде бы я написал что и откуда:
Из Листа ОТБЫТИЕ мне нужно взять значение из ячейки A1 и вставить его в ячейку C5 на листе ДАННЫЕ, после копирования текущего времени уже на листе ДАННЫЕ.

[offtop]Я художник, я так вижу! :)
Но может я неправильно сформулировал? Ведь правильно поставленное задание, наполовину выполненное задание?[/offtop]
Только мне не импонирует вариант с формулой =ТДАТА()... Наверное лучше макросом в ячейку А1 листа Данные записывать скриптом время...

   myNewRange [ 1+2, 1].Value.myExitRange

Сам не понял, что хотел, но это похоже на [vba]
Код
Dim Smesh$
Set Smesh = 3
MyNewRAnge(  Cellс(1,5) , Cellc( 3+ Smesh , 5)  ) ' По другому NyNewRange(A5:С5),
' Со смещением принял бы значение NyNewRange(A5:F5)
[/vba]
Скорее всего я хотел изменять ширину диапазона заданного не именем столбцов/строк, а номерам столбцов/строк с возможностью смещения (Set Smesh)


Сообщение отредактировал nordri - Пятница, 23.06.2023, 15:51
 
Ответить
Сообщение
Но какие цифирьки, и откуда в столбцах А и С?

На листе ДАННЫЕ столбце A это текущее время из Ячейки A1 листа ДАННЫЕ. А в столбце C с листа ПРИБЫТИЕ из "Итог" с красным шрифтом G4, ну либо на том же листе ПРИБЫТИЕ из ячейки A1.
А сами цифИрькИ это так, пример...
Хотя вроде бы я написал что и откуда:
Из Листа ОТБЫТИЕ мне нужно взять значение из ячейки A1 и вставить его в ячейку C5 на листе ДАННЫЕ, после копирования текущего времени уже на листе ДАННЫЕ.

[offtop]Я художник, я так вижу! :)
Но может я неправильно сформулировал? Ведь правильно поставленное задание, наполовину выполненное задание?[/offtop]
Только мне не импонирует вариант с формулой =ТДАТА()... Наверное лучше макросом в ячейку А1 листа Данные записывать скриптом время...

   myNewRange [ 1+2, 1].Value.myExitRange

Сам не понял, что хотел, но это похоже на [vba]
Код
Dim Smesh$
Set Smesh = 3
MyNewRAnge(  Cellс(1,5) , Cellc( 3+ Smesh , 5)  ) ' По другому NyNewRange(A5:С5),
' Со смещением принял бы значение NyNewRange(A5:F5)
[/vba]
Скорее всего я хотел изменять ширину диапазона заданного не именем столбцов/строк, а номерам столбцов/строк с возможностью смещения (Set Smesh)

Автор - nordri
Дата добавления - 23.06.2023 в 13:13
InExSu Дата: Пятница, 23.06.2023, 23:59 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 648
Репутация: 96 ±
Замечаний: 0% ±

Excel 2010, 365
Sub CopyPastInsert()


Привет!

Как вариант.

[vba]
Код

Sub CopyPastInsert()
    With Sheets("Лист2")
        CellValue _
            .Range ("A1"), _
            CellsShiftDown(.Range("C10"), 1)
    End With
End Sub

Sub CellValue(sour As Range, dest As Range)
    dest.Value = sour.Value
End Sub

Function CellsShiftDown(rnge As Range, rowsCount As Long) As Range
    ' сдвигает от cell на count ячеек вниз
        
    Dim origin As String
    origin = rnge.Address
        
    rnge.Resize( _
        rowsCount, _
        rnge.Columns.count).Insert _
        Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow

    Set CellsShiftDown = rnge.Parent.Range(origin)

End Function
[/vba]


Разработчик Битрикс24 php, Google Apps Script, VBA Excel Windows/Mac

Сообщение отредактировал InExSu - Суббота, 24.06.2023, 00:00
 
Ответить
Сообщение
Sub CopyPastInsert()


Привет!

Как вариант.

[vba]
Код

Sub CopyPastInsert()
    With Sheets("Лист2")
        CellValue _
            .Range ("A1"), _
            CellsShiftDown(.Range("C10"), 1)
    End With
End Sub

Sub CellValue(sour As Range, dest As Range)
    dest.Value = sour.Value
End Sub

Function CellsShiftDown(rnge As Range, rowsCount As Long) As Range
    ' сдвигает от cell на count ячеек вниз
        
    Dim origin As String
    origin = rnge.Address
        
    rnge.Resize( _
        rowsCount, _
        rnge.Columns.count).Insert _
        Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow

    Set CellsShiftDown = rnge.Parent.Range(origin)

End Function
[/vba]

Автор - InExSu
Дата добавления - 23.06.2023 в 23:59
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!