Страница: 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
       
    
       
  
 
    
Selection.Copy
А так работает?
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа:
 GSerg
![]()
![]()
Вопросов: 0
Ответов: 1876
      
 Профиль |  | #2
       
Добавлено:  20.02.06 09:55
       
    
       
  
Код выполняется из VB или из VBA?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа:
 angrynews
![]()
Вопросов: 33
Ответов: 119
      
 Web-сайт:  
 Профиль |  | #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-сайт:  
 Профиль |  | #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-сайт:  
 Профиль |  | #6
      
Добавлено:  20.02.06 13:26
       
    
       
  
Жопа какая-то...из той программы, в которой все работает перенес - тот-же косяк...может причина как-то в том сидит, что этот код (см выше) выполняется в процедуре, которая вызывается из основной....??
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа:
 GSerg
![]()
![]()
Вопросов: 0
Ответов: 1876
      
 Профиль |  | #7
       
Добавлено:  20.02.06 13:46
       
    
       
  
 
    
Нет.
Скажи смысл кода словами. Потому что написано так, что не понятно.
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа:
 angrynews
![]()
Вопросов: 33
Ответов: 119
      
 Web-сайт:  
 Профиль |  | #8
      
Добавлено:  20.02.06 13:58
       
    
       
  
В общем в основной процедуре вызывается ЭТА NoZamerTwoDays. Аргументы не передуются никакие. Эта процедура должна при выполнении условия  
    
.Cells(1, 1) = ""
		
	  
			 
	
		 
    
       
    
Номер ответа: 9 
      
Автор ответа:
 GSerg
![]()
![]()
Вопросов: 0
Ответов: 1876
      
 Профиль |  | #9
       
Добавлено:  20.02.06 14:57
       
    
       
  
Я не понимаю, зачем в цикле каждый раз проверяется If Worksheets("замеры" 
    
.Cells(1, 1) = "". 65533*9 раз проверяется.
Плюс циклы, счётчики которых нигде не используются. Плюс твоё объяснение - которое окончательно всё запутывает...
		
	  
			 
	
		 
    
       
    
Номер ответа: 10 
      
Автор ответа:
 angrynews
![]()
Вопросов: 33
Ответов: 119
      
 Web-сайт:  
 Профиль |  | #10
      
Добавлено:  21.02.06 06:30
       
    
       
  
Ладно, я уже разобрался!
 
    
GSerg - счетчик проверяет пустоту ячейки - это необходиое условие выполнения дальнейших операторов.
В общем затык такой - эта SELECT работает тогда. когда код пишется на этом же листе, из которого надо брать диапазон...не понял правда почему так...обидно, я хотел вест листинг на первом листе сделать
		
	  
			 
	
		 
    
       
    
Номер ответа: 11 
      
Автор ответа:
 GSerg
![]()
![]()
Вопросов: 0
Ответов: 1876
      
 Профиль |  | #11
       
Добавлено:  21.02.06 09:12
       
    
       
  
В общем, от тебя внятного объяснения алгоритма не добьёшься... Может всё-таки ответишь, зачем 65533*9 раз проверять одну и ту же ячейку и зачем счётчики циклов, которые нигде не используются?
 
    
Когда сам поймёшь сей факт, приспособишь данный код под себя.
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-сайт:  
 Профиль |  | #12
      
Добавлено:  26.02.06 09:33
       
    
       
  
эээ
 
    
Может я путано говорил
Счетчики используются, т.к. просматриваются строки со второй по НЕПУСТУЮ, поэтому до 65536. А пустота проверяется при начале обработки каждой строки! Есть конечно еще одна инструкиця (да нверное их куча), но тоже сиди в цикле 65536. Я просматриваю ведь весь лист, а цикл выполняется пока ячейка НЕПУСТАЯ. Вроде так 
 работает!
		
	  
			 
	
		 
    
       
    
Номер ответа: 13 
      
Автор ответа:
 GSerg
![]()
![]()
Вопросов: 0
Ответов: 1876
      
 Профиль |  | #13
       
Добавлено:  26.02.06 12:14
       
    
       
  
Да?
 
    
.Cells(1, 1) = "" Then
Объясни, как это относится к просмотру всего листа.
		
	  
			 
	
		 
    
       
    
Номер ответа: 14 
      
Автор ответа:
 angrynews
![]()
Вопросов: 33
Ответов: 119
      
 Web-сайт:  
 Профиль |  | #14
      
Добавлено:  26.02.06 12:44
       
    
       
  
этот код неактуален. а его писал, когда по разному пытался с select разобраться!  
    
Уже все работает как и задумано было, просто необходимо было лист активировать. а не просто на него сослаться
		
	  
			 
	
		 
    
       
    
Номер ответа: 15 
      
Автор ответа:
 GSerg
![]()
![]()
Вопросов: 0
Ответов: 1876
      
 Профиль |  | #15
       
Добавлено:  26.02.06 13:33
       
    
       
  
Нет никакой необходимости выделять что-то, чтобы обратиться к нему.
 
    
См. № 11.