Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: Как сохранть Выделенный диапозон Добавлено: 19.07.07 22:34  

Автор вопроса:  Yolokuko
Как сохранить Выделенный диапазон?

Пользователь выделяет диапазон ячеек, дальше выполняются действия,а затем восстанавливается выделенный диапазон.

Понимаю что это Range
или Selection

Но как реализовать не понимаю???
Всё уже попробовал что знаю.
Так где же храниться выделенный пользователем диапазон, подскажите пожалуйста?

Ответить

  Ответы Всего ответов: 20  

Номер ответа: 1
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #1 Добавлено: 19.07.07 23:01

Public myrangsel As Range

Sub SaveRange()
    Set myrangsel = ActiveWindow.RangeSelection
End Sub

Sub RestoreRange()
    myrangsel.Select
End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Yolokuko



Вопросов: 3
Ответов: 7
 Профиль | | #2 Добавлено: 20.07.07 00:15
Спасибо очень помогло!

От себя добавлю код для нахождения диапазона выделенных ячеек

Public myrangsel As Range
Public re As Integer
Public ce As Integer
Public rb As Integer
Public cb As Integer


Sub SaveRange()
    Set myrangsel = ActiveWindow.RangeSelection
    cb = myrangsel.Column 'íà÷àëî
    rb = myrangsel.Row
    
    re = rb + myrangsel.Rows.Count - 1 'êîíåö
    ce = cb + myrangsel.Columns.Count - 1

End Sub

Ответить

Номер ответа: 3
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #3 Добавлено: 20.07.07 00:46
re,ce...

Это было бы очень хорошо, если бы выделенный диапазон всегда был бы прямоугольный, тогда можно сохранять только границы. Но удерживая ctrl можно мышкой навыделять диапазоны хоть в шахматном порядке.

Ответить

Номер ответа: 4
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #4
Добавлено: 20.07.07 00:52
____ Да и зачем знать его границы? Диапазон — это всего лишь множество ячеек и какой-либо порядок в них — частный случай.

Ответить

Номер ответа: 5
Автор ответа:
 Yolokuko



Вопросов: 3
Ответов: 7
 Профиль | | #5 Добавлено: 20.07.07 01:54
Хорошо
а как тогда обойти все ячейки, которые мы выделили Ctrl

так

 For Each c in Selection
[Do something]
 Next

Ответить

Номер ответа: 6
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #6 Добавлено: 20.07.07 02:05

Sub scancellsinrange()
Dim c As Range

For Each c In Selection
 Debug.Print c.Row & vbTab & c.Column & vbTab & c.Value
Next

End Sub

Ответить

Номер ответа: 7
Автор ответа:
 Yolokuko



Вопросов: 3
Ответов: 7
 Профиль | | #7 Добавлено: 20.07.07 02:20
Теперь у всё встало на свои места, ещё раз спасибо!

Ответить

Номер ответа: 8
Автор ответа:
 Yolokuko



Вопросов: 3
Ответов: 7
 Профиль | | #8 Добавлено: 20.07.07 17:20

For Each c In Selection
 Debug.Print c.Row & vbTab & c.Column & vbTab & c.Value
Next


хм...
теперь я запутался совсем, а как изменить то что внутри выделенного диапазона?

Ответить

Номер ответа: 9
Автор ответа:
 Stormy



ICQ: 527-627 

Вопросов: 0
Ответов: 3
 Web-сайт: displey.com
 Профиль | | #9
Добавлено: 21.07.07 09:26
Всем привет!
В продолжение темы.
А как можно скопировать плавающий диапазон в закрытой книги (книга1) и вставить в указанное место активной книги (книга2)?
Плавающий диапазон - находиться так. В ячейках А1 и В1 есть значения. В А1 - пишеться номер послед заполненной в Книга1 (Лист1)при предыдущем копировании, в ячейке В1 формульно расчитывается текущий послед номер строки в Книга1 Лист 1 , получается примерно такое.
А1= 10 , В1 = 35

Теперь вот хотелось бы при открытие книги вызвать форму (Ок, Отмена) тоесть или принять скопированное или отказаться.
Может кто нить помочь? Делал через сравнение, по
.Cells(k, 2).Value = Getvalue(pt, nime, sh, "C" & n)
Но эт немного не то :( Если будет 1-2 тыс строк то потребуется 1-2 минуты на проверку.

Ответить

Номер ответа: 10
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #10 Добавлено: 21.07.07 17:27
Если Yolokuko и Stormy переформулируют вопросы, то, возможно, найдутся ответы.

Ответить

Номер ответа: 11
Автор ответа:
 Yolokuko



Вопросов: 3
Ответов: 7
 Профиль | | #11 Добавлено: 21.07.07 23:26
Всё с Range я разобрался!

Теперь другая проблемма

Объект RefEdit

Пользователь может ввести туда диапазон, но я так и не нашёл, как проверить, что это действительно диапазон, туда же можно ввести всё что угодно!

Неужели писать собственную функцию...
При постраении диаграмм Excel срузу ругается если введённая информация не диапазон.

Значит процедура есть, а найти не могу(

Ответить

Номер ответа: 12
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #12 Добавлено: 22.07.07 03:40

Private Sub RefEdit1_Change()
    Debug.Print IsRangeOk(RefEdit1.Text)
End Sub

Function IsRangeOk(s As String) As Boolean
    On Error Resume Next
    IsRangeOk = Not Range(RefEdit1.Text) Is Nothing
End Function

Ответить

Номер ответа: 13
Автор ответа:
 Stormy



ICQ: 527-627 

Вопросов: 0
Ответов: 3
 Web-сайт: displey.com
 Профиль | | #13
Добавлено: 23.07.07 08:11
Значить есть у меня 2 книги, одна на компе 1(книга1), вторая на компе 2 (книга2).
Нужно переодически проверять книгу1 на наличие обновления и если они есть, то копировать их в книгу 2. Данные должны браться из закрытой книги, диапазон поиска думаю, тоже можно указать точный. Но вот как проделать все остальное не знаю :(

Ответить

Номер ответа: 14
Автор ответа:
 Fever



Вопросов: 60
Ответов: 808
 Профиль | | #14 Добавлено: 23.07.07 18:07
сторми, для синхронизации двух файлов есть великолепная вещь под названием портфель. правой клавишей в проводнике - создать - портфель. остальное в справке винды, сам этим не пользовался почти

Ответить

Номер ответа: 15
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #15 Добавлено: 23.07.07 20:25

Dim r1 As Range
Set r1 = Workbooks("Книга1";).Worksheets(1).Range("A10:B35";) ' произвольный диапазон
r1.Copy Workbooks("Книга2";).Worksheets(1).Range("E2";)  ' левый верхний угол вставки

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам