Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Копирование без буфера обмена
 
Доброго времени суток.
Есть задача: копировать выделенный диапазон значений,  после нажатия кнопки, данные копируются на другой лист, с буфером обмена с этим проблем нет. но теперь нужно выполнить ту же задачу без использования буфера обмена, не могу понять как это реализовать. то ли нужно как то выделенную область засунуть в массив или как то можно по другому. Заранее спасибо. в файле весь код с комментариями.
Код
Function SheetExists(shtName As String) As Boolean 
Dim sht As Worksheet
On Error Resume Next
Set sht = ThisWorkbook.Sheets(shtName)
SheetExists = Not sht Is Nothing
End Function

Sub copy()
Dim myRange As Variant 
Dim sheetname As String
Selection.copy 
myRange = Selection.Address 
sheetname = InputBox("Введите название листа")
If (sheetname = "") Then Exit Sub 
If (Not SheetExists(sheetname)) Then Sheets.Add.Name = sheetname 
Worksheets(sheetname).Activate
Worksheets(sheetname).Paste Destination:=Range(myRange) 
Application.CutCopyMode = False 
End Sub
 
Код
Sub copy()
Dim myRange As Variant 'объявили выделямый диапазон
Dim sheetname As String, sh As Worksheet
Set sh = ActiveSheet
myRange = Selection.Address 'присвоили переменной адрес выделенного диапазона
sheetname = InputBox("Введите название листа")
If (sheetname = "") Then Exit Sub 'проверка на пустое имя листа
If (Not SheetExists(sheetname)) Then Sheets.Add.Name = sheetname 'если такой же страницы не найденно, тогда добавить страницу с введенным названием
Worksheets(sheetname).Activate
Worksheets(sheetname).Range(myRange) = sh.Range(myRange).Value 'вставка в тот же диапазон на новый лист
End Sub
 
огромное спасибо, правильно ли я понял, вы просто продублировали (если можно так сказать) значения командой .Value,  из выделенного диапазона?
 
Ёжик присвоил значения одного диапазона другому. Если же Вы именно про копирование, то принцип такой: Ячейка1.Copy Ячейка2.
 
хмм... Спасибо большое.
 
При копировании сохранятся не только значения, но и форматирование.
 
всё зависит от того, какую цель Вы преследуете. Если просто получить значения, то копирование лишнее. Можно просто ячейке присвоить значение другой ячейки (Value и есть значение). Переходить на другой лист тоже необязательно, если лист у Вас уже есть
Изменено: yozhik - 9 Апр 2018 10:58:18
 
Цитата
SoliDeoGloria26 написал:
ту же задачу без использования буфера обмена
А в чем задача не использовать его? Там что-то есть уже, что нельзя затирать? Нельзя с точки зрения безопасности?
 
да гоняют по вба, стимулируют к изучению так сказать) и добавляют/меняют задание)
 
Понятно. Думаю не лишним бы было указать что вопрос имеет больше теоретический, чем практический смысл.
 
прошу прощения за еще один глупый вопрос: можно ли как то в выбранном диапазоне сохранить атрибуты ячеек (как я понял это к примеру: курсив, жирность и т.д.), и потом применить их куда я вставляю. какой командой это выполнимо, опять же без буфера.
Изменено: SoliDeoGloria26 - 9 Апр 2018 19:47:25
 
Юрий М,  вы писали, вам и отвечать :-) как раз и вопрос для модератора
Цитата
SoliDeoGloria26 написал:
прошу прощения за еще один .....  вопрос:
 
нашел вот такой вот код, копирует только форматирование, насколько я понял, тут с буфером, и вообще возможно ли без буфера. чето я в тупике.
Код
Sub CopyFormat() 
Dim CopyRng As Range, PasteRng As Range 
xTitleId = "KutoolsforExcel" 
Set CopyRng = Application.Selection Set CopyRng = Application.InputBox("Ranges to be copied :", xTitleId, CopyRng.Address, Type:=8)
 Set PasteRng = Application.InputBox("Paste to (single cell):", xTitleId, Type:=8) 
CopyRng.Copy 
PasteRng.Parent.Activate 
PasteRng.PasteSpecial xlPasteFormats 
Application.CutCopyMode = False End Sub
Изменено: SoliDeoGloria26 - 9 Апр 2018 16:56:47
 
чувствую я, закроют эту тему..) если Вам надо сделать что-то не через буфер обмена, не произносите для себя слово "копировать". Думайте, как "присвоить".
Надо ячейку B1 залить цветом как в А1, вот и "думайте" - ячейке B1 присвоить цвет ячейки А1
Код
Range("B1").Interior.Color = Range("A1").Interior.Color
надо в В1 поместить значение из А1,
Код
Range("B1").Value = Range("A1").Value
такой же шрифт
Код
Range("B1").Font.Name = Range("A1").Font.Name
и вообще, набираете Range("A1"). (с точкой) - и смотрите сколько много всего интересного..)
 
Цитата
SoliDeoGloria26 написал:
... сохранить атрибуты ячеек (как я понял это к примеру: курсив, жирность и т.д.), и потом применить их куда я вставляю. какой командой это выполнимо, опять же без буфера.
SoliDeoGloria26, а Вы читаете ВСЁ, что Вам пишут, или выборочно? На этот Ваш вопрос есть ответ в #6.
===
Миша, то был не я )) Я знаю, кто там был.
 
SoliDeoGloria26, только в дополнение к №14 если был отформатирован текст в ячейке  ( qwertyui )а не вся ячейка , то .....
 
Доброе время суток
Такое ощущение, что все забыли про подход, предложенный Владимиром ZVI, с использованием аргумента для Range.Value
 
Цитата
yozhik написал:
набираете Range("A1"). (с точкой) - и смотрите сколько много всего интересного..)
спасибо больше, принцип понял, но еще беда в том, что тогда это нужно перечислить все свойства ячейки (цвет, ширина, высота, шрифт, курсив, подчеркивание и т.д.) это мне нужно перечислять каждый по отдельности?, как то по глупому будет. нет какого то общего параметра описывающее всё форматирование. Нашел NumberFormat который сохраняет формат данных в ячейке. неужели нету и для свойств подобного. Народ ну не серчайте на меня, войдите в положение, только учусь, если есть агрессия лучше нечего не писать:))), прошу помощи только у тех у кого есть свободное время помочь новичкам.
Изменено: SoliDeoGloria26 - 9 Апр 2018 20:03:38
 
Цитата
Андрей VG написал:
Такое ощущение, что все забыли про подход, предложенный Владимиром ZVI, с использованием аргумента для Range.Value
Здравствуйте, Андрей! Такое не забывается  :)  
Владимир
 
Цитата
sokol92 написал:
Здравствуйте, Андрей! Такое не забывается
Добрый вечер, Владимир.

SoliDeoGloria26, попробуйте
Код
Worksheets(2).Range("A1:B2").Value(xlRangeValueXMLSpreadsheet) = Worksheets(1).Range("A1:B2").Value(xlRangeValueXMLSpreadsheet)

Успехов.
 
Off.
Андрей VG, Андрей, приветвую. Мастерство не пропьешь, это по тому,  что светлое и легкое :-) .
Изменено: БМВ - 9 Апр 2018 20:32:32
 
Offtop.
Привет, Михаил.
Это не моё, это Владимир (ZVI) на форуме в прошлом году выложил. Так что полезно нет нет, да ковырять объектную модель.
 
Цитата
SoliDeoGloria26 написал:
гоняют по вба
Привет!
Метод от обратного: скопировать лист, ненужное очистить.
БУфер обмена Windows не затронется..
 
Цитата
Inexsu написал:
Метод от обратного: скопировать лист, ненужное очистить.
идем дальше, скопировать файл .... :-)
 
Цитата
БМВ написал:
дальше
и дальше = скопировать вселенную  8)  
 
Цитата
Андрей VG написал:
попробуйте ...Value(xlRangeValueXMLSpreadsheet)...
спасибо большое, форматирование пошло как по маслу, а выравнивание по ширине и высоте сделал автоматическое. завтра буду сдавать) даст что то новенькое.  
Страницы: 1
Читают тему (гостей: 1)