Страницы: 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 - 09.04.2018 10:58:18
 
Цитата
SoliDeoGloria26 написал:
ту же задачу без использования буфера обмена
А в чем задача не использовать его? Там что-то есть уже, что нельзя затирать? Нельзя с точки зрения безопасности?
По вопросам из тем форума, личку не читаю.
 
да гоняют по вба, стимулируют к изучению так сказать) и добавляют/меняют задание)
 
Понятно. Думаю не лишним бы было указать что вопрос имеет больше теоретический, чем практический смысл.
По вопросам из тем форума, личку не читаю.
 
прошу прощения за еще один глупый вопрос: можно ли как то в выбранном диапазоне сохранить атрибуты ячеек (как я понял это к примеру: курсив, жирность и т.д.), и потом применить их куда я вставляю. какой командой это выполнимо, опять же без буфера.
Изменено: SoliDeoGloria26 - 09.04.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 - 09.04.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 - 09.04.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, Андрей, приветвую. Мастерство не пропьешь, это по тому,  что светлое и легкое :-) .
Изменено: БМВ - 09.04.2018 20:32:32
По вопросам из тем форума, личку не читаю.
 
Offtop.
Привет, Михаил.
Это не моё, это Владимир (ZVI) на форуме в прошлом году выложил. Так что полезно нет нет, да ковырять объектную модель.
 
Цитата
SoliDeoGloria26 написал:
гоняют по вба
Привет!
Метод от обратного: скопировать лист, ненужное очистить.
БУфер обмена Windows не затронется..
Сравнение прайсов, таблиц - без настроек
 
Цитата
Inexsu написал:
Метод от обратного: скопировать лист, ненужное очистить.
идем дальше, скопировать файл .... :-)
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
дальше
и дальше = скопировать вселенную  8)  
Сравнение прайсов, таблиц - без настроек
 
Цитата
Андрей VG написал:
попробуйте ...Value(xlRangeValueXMLSpreadsheet)...
спасибо большое, форматирование пошло как по маслу, а выравнивание по ширине и высоте сделал автоматическое. завтра буду сдавать) даст что то новенькое.  
Страницы: 1
Наверх