Юрий М написал: Да Вы даже саму форму не нарисовали... В каком виде Вы представляете себе таблицу на форме, чтобы из этой таблицы можно было что-то копировать?
Вот таблица на форме (таблица, а не картинка таблицы) - в моем представлении. (Обычная простая таблица - без каких-то наворотов, раскрашиваний, рисунков и т.д. - только не на листе, а на форме)
(ну если нельзя вынести прямо кусок экселевского листа - как Spreadsheet - на форму, то хотя бы как набор textboxов : два текстбокса в ширину и три текстбокса в высоту. Я не разбираюсь в этих activex-элементах, но наверно есть там какие-то инструменты чтобы таблицу нарисовать)
а к чему этот цирк? что мешает скопировать ячейки непонятно какого адреса с листа? а) не нужно никакой формы б) ее наполнения в) и процесса копирования непонятно чего и как на листе отметили диапазон Ctrl+C - скопировано, что еще?
кому и как этот гемеррой поможет управлять данными, с учетом того что ввы не понимаете как ими управлять, а я, например, не понимаю для чего все эти потуги? чего добиваемся? каких особых удобств какие неудобства уже нажили - понятно, какие еще предстоит преодолеть не совсем, еще совершенно открытый вопрос как и что копировать и что потом с этим делать?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Судя по скрину Вы хотите ЛистБокс на форме. А пробовали из него копировать? Создайте его пока на листе, а не на форме и посмотрите - подойдёт ли он для Ваших целей?
Юрий М написал: Судя по скрину Вы хотите ЛистБокс на форме. А пробовали из него копировать? Создайте его пока на листе, а не на форме и посмотрите - подойдёт ли он для Ваших целей?
(Я не знаю как создать Листбокс на листе. Вот создал - через элементы управления - объект есть, но он ничем не заполнен.)
Подойдет ли он для моих целей? Если там будут данные в виде таблицы с возможностью копирования в буфер обмена - какого-то выбранного элемента диапазона (по щелчку мыши или через Ctrl+C) - то подойдет.
чем удобнее копировать с формы с какой-то урезанной таблицы от копирования с листа со всеми стандартными возможностиями чем это удобнее? чем? кому это облегчит жизнь и как?
совершенно не обязательно отвечать на эти вопросы мне. ответьте. себе. если у вас есть четкие и понятные ответы - есть смысл продолжать поиски если таких ответов нет, подумайте, может в этой форме и этом способе и смысла нет ни какого
buchlotnik написал: возможно вы удивитесь - еще и #39 есть, безответное
да и 2-е... Да и Правила - тоже. "...2.6. Один вопрос - одна тема. Не следует в открываемой теме обозначать и задавать сразу несколько вопросов. 2.7. Если вам нужен не совет по самостоятельному решению задачи, а чтобы все сделали за вас - добро пожаловать в ветку Работа. ..."
buchlotnik написал: возможно вы удивитесь - еще и #39 есть, безответное
Да нет, я не удивляюсь конечно. Я не понял вопроса из сообщения 39.
(разве что - кому это облегчит жизнь, как и чем. Ответ - облегчит мне. Как облегчит - станет удобнее работать. Чем облегчит - копировать данные станет удобнее.) В общем я как-то не особо понял о чем человек говорит - возможно риторические вопросы задает. Но он уточнил::
Цитата
Ігор Гончаренко написал: совершенно не обязательно отвечать на эти вопросы мне. ответьте. себе.
И еще:
Цитата
Ігор Гончаренко написал: если у вас есть четкие и понятные ответы - есть смысл продолжать поиски
Я вас уверяю - я создал эту тему не в пьяном бреду. Когда я написал первое сообщение - у меня был четкий вопрос:
Цитата
plank1433 написал: Как по таблице T5:V13 назначить определенным фигурам макрос, при котором бы вылетала форма, в которой была бы вписана назначенная фигуре табличка-диапазон (с возможностью что-то скопировать из нее) ?
БМВ,ну я же написал что его нет. И уточнил по этому поводу в сообщении 31:
Цитата
plank1433 написал: если нельзя вынести прямо кусок экселевского листа - как Spreadsheet - на форму, то хотя бы как набор textboxов : два текстбокса в ширину и три текстбокса в высоту. Я не разбираюсь в этих activex-элементах, но наверно есть там какие-то инструменты чтобы таблицу нарисовать)
ну даже подготовленному не всегда понятно имели ли Вы в виду просто Spreadsheet (электронная таблица) или ActiveX о котором я упомянул. Если вам нужно копировать единичные значения, то тогда набор текстбоксов может подойти, но группу уже скопировать не получится.
plank1433 написал: Как по таблице T5:V13 назначить определенным фигурам макрос, при котором бы вылетала форма, в которой была бы вписана назначенная фигуре табличка-диапазон (с возможностью что-то скопировать из нее) ?
Нужно написать макрос, который бы фигурам в указанной таблице вызывал макрос, при котором бы вылетала форма со вписанной в нее табличкой-диапазоном (ТД). Вылетающую форму необходимо создать и вписать в нее табличку-диапазон (ТД). ТД нужно с помощью макроса заполнить значениями в момент активации Формы. Макрос для заполнения ТД необходимо написать. Возможность что-то скопировать из ТД достигается путем написания макроса на какое-нибудь подходящее событие таблички-диапазона.
Из всего этого Вам уже не только рассказали, "как...", но и сделали всё, кроме последнего
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
Вариант: выбранную в ЛистБокс строку копировать в укромное место на листе, рисовать границы и уже с листа копировать диапазон. Но всё это уже вопросы для следующей темы: привязать к фигуре таблицу, получить табличку на форме Вы уже умеете.
Sub ShapeClick()
Set rez = Range("T5:T10").Find(ActiveSheet.Shapes(Application.Caller).Name)
If Not rez Is Nothing Then
txtRange = rez.Offset(, 1)
Call ShowTable(rez.Offset(, 1))
Else
txtRange = ""
End If
End Sub
Sub ShowTable(txtRange As String)
strHTML = ConvertRangeToHTMLTable(Range(txtRange))
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate ("about:blank")
objIE.Toolbar = 0
objIE.StatusBar = 0
objIE.Width = 700
objIE.Height = 300
Set objDoc = objIE.Document.Body
objDoc.InnerHTML = strHTML
objIE.Visible = True
End Sub
Public Function ConvertRangeToHTMLTable(rInput As Range) As String
'Declare variables
Dim rRow As Range
Dim rCell As Range
Dim strReturn As String
'Define table format and font
strReturn = "<Table border='1' cellspacing='0' cellpadding='7' style='border-collapse:collapse;border:none'> "
'Loop through each row in the range
For Each rRow In rInput.Rows
'Start new html row
strReturn = strReturn & " <tr align='Center'; style='height:10.00pt'> "
For Each rCell In rRow.Cells
'If it is row 1 then it is header row that need to be bold
If rCell.Row = 1 Then
strReturn = strReturn & "<td valign='Center' style='border:solid windowtext 1.0pt; padding:0cm 5.4pt 0cm 5.4pt;height:1.05pt'><b>" & rCell.Text & "</b></td>"
Else
strReturn = strReturn & "<td valign='Center' style='border:solid windowtext 1.0pt; padding:0cm 5.4pt 0cm 5.4pt;height:1.05pt'>" & rCell.Text & "</td>"
End If
Next rCell
'End a row
strReturn = strReturn & "</tr>"
Next rRow
'Close the font tag
strReturn = strReturn & "</font></table>"
'Return html format
ConvertRangeToHTMLTable = strReturn
End Function
Юрий М написал:
Вариант: выбранную в ЛистБокс строку копировать в укромное место на листе, рисовать границы и уже с листа копировать диапазон
Юрий М, что-то никак не подходит здесь Listbox. И насчет диапазона - мне нужно с формы не весь диапазон копировать и не частичный диапазон, а одно число. Listbox - это список, а не таблица. Тут подойдет только табличный активХ Spreadsheet (которого уже нет), либо единичные textbox, расставленные в виде таблицы. Мне нужно одно-единственное значение в этой импровизированной таблице - ткнул мышкой в цифру (текстбокс), оно скопировалась в буфер.
Цитата
plank1433 написал: набор textboxов : два текстбокса в ширину и три текстбокса в высоту
Я имел ввиду - под каждую цифру этой "таблицы на форме" - свой маленький текстбокс.
Мужчины, (Михаил Лебедев, ) ну ведь все уже понятно давно. Нужна таблица из которой можно скопировать значение из любой ячейки. В #52 это реализовано через IE. Разве что глянец не наводил, с размером окна и можно всегда одно окно использовать.
Static objIE As Object
strHTML = ConvertRangeToHTMLTable(Range(txtRange))
If objIE Is Nothing Then Set objIE = CreateObject("InternetExplorer.Application")