Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

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

 

  Вопрос: VBA объект RANGE Добавлено: 20.02.06 09:23  

Автор вопроса:  angrynews | Web-сайт: www.angrynews.ru
Такой вопросик назрел
Пишу

Range(Cells(counter, 2), Cells(counter, 21)).Select
Selection.Copy

ругается, воворит, что МЕТОД select из класса Range завершен неверно.
Пишу так

Range(Cells(counter, 2), Cells(counter, 21)).Select: Selection.Copy

работает
Странно, но ведь это одно и тоже, просто записано на одной строке

Ответить

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

Номер ответа: 1
Автор ответа:
 Черный ворон



Разработчик

ICQ: 342881585 

Вопросов: 32
Ответов: 256
 Профиль | | #1 Добавлено: 20.02.06 09:43

Range(Cells(counter, 2), Cells(counter, 21)).Select _
Selection.Copy

А так работает?

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #2 Добавлено: 20.02.06 09:55
Код выполняется из VB или из VBA?

Ответить

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



Вопросов: 33
Ответов: 119
 Web-сайт: www.angrynews.ru
 Профиль | | #3
Добавлено: 20.02.06 10:10
Я ошибся.
Это в другом проекте работает такая запись без косяков:

Range(Cells(counter, 2), Cells(counter, 21)).Select
Selection.Copy

А в том, уоторый щас делаю, эта же НЕ работает. Пишу один в один...
VBA

Ответить

Номер ответа: 4
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #4 Добавлено: 20.02.06 12:34
И чему равен counter?
И есть ли активный лист?

Ответить

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



Вопросов: 33
Ответов: 119
 Web-сайт: www.angrynews.ru
 Профиль | | #5
Добавлено: 20.02.06 12:52
Вот весь код

Private Sub NoZamerTwoDays()

 Dim counter As Long
 For counter = 4 To 65536
  For cellCounter = 7 To 15
    If Worksheets("замеры";).Cells(1, 1) = "" Then
    Worksheets("замеры";).Activate
    Range(Cells(counter, 2), Cells(counter, 21)).Select'тут ругается
    Selection.Copy
    Sheets("нет замера 2 сут";).Cells(counter, 2).Select
    ActiveSheet.Paste
    End If
   Next cellCounter
 Next counter
End Sub

Ответить

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



Вопросов: 33
Ответов: 119
 Web-сайт: www.angrynews.ru
 Профиль | | #6
Добавлено: 20.02.06 13:26
Жопа какая-то...из той программы, в которой все работает перенес - тот-же косяк...может причина как-то в том сидит, что этот код (см выше) выполняется в процедуре, которая вызывается из основной....??

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #7 Добавлено: 20.02.06 13:46
может причина как-то в том сидит

Нет.


Скажи смысл кода словами. Потому что написано так, что не понятно.

Ответить

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



Вопросов: 33
Ответов: 119
 Web-сайт: www.angrynews.ru
 Профиль | | #8
Добавлено: 20.02.06 13:58
В общем в основной процедуре вызывается ЭТА NoZamerTwoDays. Аргументы не передуются никакие. Эта процедура должна при выполнении условия
If Worksheets("замеры";).Cells(1, 1) = ""
выделить на листе ЗАМЕРЫ диапазон в строке counter от столба 2 до 21 и вставить его на лист НЕТ ЗАМЕРА 2 СУТ. Исходно активный лист не присутствует в этом коде, да он и не нужен, я программой активирую нужные листы. Вот. Программа доходит до условия, проверяет его, активирует лист ЗАМЕРЫ, но не может выделить диапазон...уже по всякому попробовал...

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #9 Добавлено: 20.02.06 14:57
Я не понимаю, зачем в цикле каждый раз проверяется If Worksheets("замеры";).Cells(1, 1) = "". 65533*9 раз проверяется.
Плюс циклы, счётчики которых нигде не используются. Плюс твоё объяснение - которое окончательно всё запутывает...

Ответить

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



Вопросов: 33
Ответов: 119
 Web-сайт: www.angrynews.ru
 Профиль | | #10
Добавлено: 21.02.06 06:30
Ладно, я уже разобрался!
GSerg - счетчик проверяет пустоту ячейки - это необходиое условие выполнения дальнейших операторов.
В общем затык такой - эта SELECT работает тогда. когда код пишется на этом же листе, из которого надо брать диапазон...не понял правда почему так...обидно, я хотел вест листинг на первом листе сделать

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #11 Добавлено: 21.02.06 09:12
В общем, от тебя внятного объяснения алгоритма не добьёшься... Может всё-таки ответишь, зачем 65533*9 раз проверять одну и ту же ячейку и зачем счётчики циклов, которые нигде не используются?

Когда сам поймёшь сей факт, приспособишь данный код под себя.

dim w as worshkeet, w2 as worksheet
set w=worksheets("замеры";)
set w2=worksheets("нет замера 2 сут";)
...
w.range(w.cells(counter,2),w.cells(counter, 21)).copy w2.cells(counter,2)

Ответить

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



Вопросов: 33
Ответов: 119
 Web-сайт: www.angrynews.ru
 Профиль | | #12
Добавлено: 26.02.06 09:33
эээ
Может я путано говорил
Счетчики используются, т.к. просматриваются строки со второй по НЕПУСТУЮ, поэтому до 65536. А пустота проверяется при начале обработки каждой строки! Есть конечно еще одна инструкиця (да нверное их куча), но тоже сиди в цикле 65536. Я просматриваю ведь весь лист, а цикл выполняется пока ячейка НЕПУСТАЯ. Вроде так ;-) работает!

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #13 Добавлено: 26.02.06 12:14
Да?

If Worksheets("замеры";).Cells(1, 1) = "" Then


Объясни, как это относится к просмотру всего листа.

Ответить

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



Вопросов: 33
Ответов: 119
 Web-сайт: www.angrynews.ru
 Профиль | | #14
Добавлено: 26.02.06 12:44
этот код неактуален. а его писал, когда по разному пытался с select разобраться! ;-)
Уже все работает как и задумано было, просто необходимо было лист активировать. а не просто на него сослаться

Ответить

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



Вопросов: 0
Ответов: 1876


 Профиль | | #15 Добавлено: 26.02.06 13:33
Нет никакой необходимости выделять что-то, чтобы обратиться к нему.
См. № 11.

Ответить

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

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



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