Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Выдиление ячеек


Автор: Gannibal 21.5.2005, 08:19
задача такова, у меня есть ексцел лист в нём например в 4 ячейках которые разбросаны по целому листу, можно было производить выдиление области между этими 4 записями или тремя как это реализовать с помощю xlUP

я вот пытаюсь проходить целый лист

Код

Dim rw, col As Integer

For rw = 1 To 2000
 For col = 1 To 2000

 Next col
Next rw


но как яа незнающий человек... хотелось бы знать как бы так можно было реализовать

Автор: likhobory 21.5.2005, 11:32
Попробуй сформулировать вопрос поконкретнее, что необходимо – выделить диапазон между 4-мя произвольно расположенными ячейками ??

Автор: Gannibal 21.5.2005, 11:39
Цитата(likhobory @ 21.5.2005, 10:32)
выделить диапазон между 4-мя произвольно расположенными ячейками ??


да именно вот это и надо.. даже если будут три ячейки росположены произвольно .. то будет выделятся область между этими ячейками

я вот уже дошёл до стадии когда узнаю адрес ячейки в которой уже записан текст

Код

For rw = 1 To 50
 For col = 1 To 50
    If Cells(rw, col).Text <> "" Then
        MsgBox Cells(rw, col).Address
    End If
 Next col
 Next rw

Автор: Gannibal 21.5.2005, 11:50
вот уже дошёл до стадии когда выделяю диапазон между двумя ячейками

Код

Private Sub CommandButton1_Click()
Dim rw, col As Integer
Dim a()
Dim i As Integer

For rw = 1 To 50
 For col = 1 To 50
    If Cells(rw, col).Text <> "" Then
      ReDim Preserve a(i)
      a(i) = Cells(rw, col).Address
      i = i + 1
    End If
Next col
Next rw
 
Range(a(0) & " : " & a(1)).Select
End Sub


но ето я делаю программно а то говорят что можно с помощхю xlUP функции чтоли или как то так... вот мне с помощью неё и надо

Автор: likhobory 21.5.2005, 16:39
Цитата(M @ 21.5.2005, 11:39)
даже если будут три ячейки росположены произвольно .. то будет выделятся область между этими ячейками

все же - что имеешь в виду: ячейки должны быть "углами" некой прямоугольной области ??
Если объяснение проблематично - прикрепи к тексту вопроса файл с примером - быстрее найдем общий язык smile
Цитата(M @ 21.5.2005, 11:50)
можно с помощхю xlUP функции

поправочка: xlUP - константа, другое дело, где ее применять - пока затрудняюсь ответить, т.к. сам вопрос до конца не ясен smile

Автор: Gannibal 21.5.2005, 16:46
короче постораюсь поподробнее.. есть у нас лист
- пользовател в тот лист либовольно задаёт в ячейки какой нибудь текст всёравно что ну например по листу разброссано в ячейке А1="привет" В10="вот так" Е5="что то"
- заполненые ячейки служат как границы как ты написал выше
- надо выделить диапазон(область) ячеек внутри этих границ

-------------

написаны границы в ячейках выделение должно произойти в диапазоне С16 : Е25

Автор: likhobory 21.5.2005, 17:02
попробуй так
Код

ActiveSheet.UsedRange.Select

Автор: Gannibal 21.5.2005, 17:05
Цитата(likhobory @ 21.5.2005, 16:02)
ActiveSheet.UsedRange.Select


ну это выделяет всю рабочию область в которой я работаю на топик выше я написал какая область должна выплнится и фаил прикрепил

Автор: likhobory 21.5.2005, 17:20
тогда почему в примере заполнена ячейка B10 ??
в листе (кроме введенных 3-4 значений) подразумевается наличие и других значений ??

Автор: Gannibal 21.5.2005, 17:23
Цитата(likhobory @ 21.5.2005, 16:20)
тогда почему в примере заполнена ячейка B10 ??


она определяет левую границу выделения


Цитата(likhobory @ 21.5.2005, 16:20)
в листе (кроме введенных 3-4 значений) подразумевается наличие и других значений ??


ну их может быть записаных и три и 4 и пять значений.. например.. и эти значения определяют границы выделения мне так было сказано в школе..
мне самому в голову неидёт... как это сделать
Добавлено @ 17:24
ну 5 значений неможет быть то значение пятое небудет участвовать границы та всёже 4 только

Автор: likhobory 21.5.2005, 18:47
тем не менее можно начать с выделения именно рабочей области, а потом её же и "доводить до ума"
Код

ActiveSheet.UsedRange.Select
'обработка правой и нижней границ
Selection.Resize(numRowsSelection.Rows.Count - 1, Selection.Columns.Count - 1).Select
'.........................

Автор: Gannibal 21.5.2005, 18:56
Цитата(likhobory @ 21.5.2005, 17:47)
Selection.Resize(numRowsSelection.Rows.Count - 1, Selection.Columns.Count - 1).Select


в этой строчке ошибку кидает типо object required run=time error 424

Добавлено @ 18:57
можешь поподробнее .. немножко а то я вба приказы вообще незнаю

Автор: Gannibal 21.5.2005, 19:16
Цитата(M @ 21.5.2005, 17:56)
Selection.Resize(numRowsSelection.Rows.Count - 1, Selection.Columns.Count - 1).Select


уже с этом розобрался как работает smile буду пробовать спасибо пока если есть ещё идеи скажи smile

ну проблема настало когда я отчитываю от выделения.. оно берётся только с права и с низу.. и всё с верху незнаю как.. и работает некоректно .. это непоможет я думаю

Цитата(likhobory @ 21.5.2005, 17:47)
Selection.Resize(numRowsSelection.Rows.Count - 1, Selection.Columns.Count - 1).Select


и кстати у тебя ошибка в этой строчке она должна выглядит вот так

Код

Selection.Resize(Selection.Rows.Count - 1, Selection.Columns.Count - 1).Select

Автор: likhobory 21.5.2005, 19:36
угу, очепятка

Автор: Gannibal 21.5.2005, 20:03
ну вот например я узнал адреса всех ячеек в которых записан текст но блин как всё сделать незнаю smile

Автор: Staruha 22.5.2005, 10:55
Благодаря Вашим рассуждениям у меня получилось
Код

 Private Sub CommandButton1_Click()
Dim dRange As Range 'äèàïàçîí
Dim dr As Integer
Dim dc As Integer
Dim c As Integer
Dim r As Integer
 
ActiveSheet.UsedRange.Select
  Set dRange = Selection
  r = dRange.Range("A1").Row + 1 'Ñòðîêà ïåðâîé ÿ÷åéêè âíóòðè äèàïàçîíà
  c = dRange.Range("A1").Column + 1
     dc = dRange.Columns.Count - 2 - 1
     dr = dRange.Rows.Count - 2 - 1
  Range(Cells(r, c), Cells(r + dr, c + dc)).Select
End Sub

Автор: Gannibal 22.5.2005, 15:00
замечятельный код .. огромное сапсибо smile токо вото н ещё некоректно работает ну как так как надо ... но неполностью ещё надо подпровлять будет smile а так огромное спасибо.. smile

Автор: Staruha 22.5.2005, 19:29
smile Не забудь показать финальную версию smile

Автор: Gannibal 22.5.2005, 21:39
это обязательно smile

Автор: Staruha 22.5.2005, 22:03
Посмотрела насчет корректности .Ну да есть.
Вот здесь поправила
Код

  r = dRange.Range("B2").Row 'вторая ячейка в диапазоне
 c = dRange.Range("B2").Column
dc = dRange.Columns.Count - 3
dr = dRange.Rows.Count - 3

Автор: Ochkaric 17.7.2007, 16:21
Добрый день (вечер или ночь)!
Помогите решить проблему: надо заставить работать индикатор текущего состояния (с помощью UserForm). В книге Джона Уокенбаха рассматривается частный пример, который не годится.
У меня макрос долго работает, выполняя как перенос данных так и их анализ. Есть ли другие примеры
на эту тему ?

Автор: bilya 18.7.2007, 12:19
Может - ну его, Джона Уокенбаха, к соседям постучим? http://forum.developing.ru/showthread.php?t=10446
  smile 

Автор: mihanik 19.7.2007, 11:48
Ochkaric!!!
Модератор: Пожалуйста, один топик - один вопрос.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)