почему глупый ВБА не работает ;-(

Программирование на Visual Basic for Applications
Мишка
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 22.05.2007 (Вт) 13:01
Откуда: из Пензы

почему глупый ВБА не работает ;-(

Сообщение Мишка » 31.05.2007 (Чт) 12:07

Уважаемые профи, объясните мне...
такой код:
Код: Выделить всё
For i = 1 To Range("dish").Columns.Count
For j = 1 To Range("poducti").Rows.Count + 1
rr = Range("poducti").Rows(j).Row
cc = Range("dish").Columns(i).Column
'ya4 = Cells(rr - 1, cc)
  If Cells(rr - 1, cc) = "" Or IsNumeric(Cells(rr - 1, cc)) = False Then Cells(rr - 1, cc) = 0
Next j
Next i

гавёха работает на ненужном листе! знаю, можно добавить шитс("лист2").и т.д.

но вот такой код почему не работает?:
Код: Выделить всё
For i = 1 To Range("dish").Columns.Count
For j = 1 To Range("poducti").Rows.Count + 1
rr = Range("poducti").Rows(j).Row
cc = Range("dish").Columns(i).Column
ya4 = sheets("Лист2").Cells(rr - 1, cc)
  If ya4 = "" Or IsNumeric(ya4) = False Then ya4 = 0
Next j
Next i

Я идиот! Убейте меня, кто-нибудь!?? :? :shock: :( :cry:
Последний раз редактировалось Мишка 31.05.2007 (Чт) 12:11, всего редактировалось 1 раз.
;-)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 31.05.2007 (Чт) 12:11

Головой надо думать, а не бездумно использовать код, который не понимаешь.
Lasciate ogni speranza, voi ch'entrate.

Мишка
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 22.05.2007 (Вт) 13:01
Откуда: из Пензы

Сообщение Мишка » 31.05.2007 (Чт) 12:17

alibek писал(а):Головой надо думать, а не бездумно использовать код, который не понимаешь.

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

в коде берется пересечение диапазона столбов с именем dish с диапазоном строк с именем poducti
получаестся "прямоугольник" из которого берется начиная со строки выше чем poducti ячейка из первого столба dish и по правую нижнюю ячейку перебираются и если не цифровое значение то заменяется на 0
Последний раз редактировалось Мишка 31.05.2007 (Чт) 12:25, всего редактировалось 1 раз.
;-)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 31.05.2007 (Чт) 12:19

В таком случае что по твоему означает Range?
Lasciate ogni speranza, voi ch'entrate.

Krasnaja Shapka
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 87
Зарегистрирован: 26.10.2006 (Чт) 12:13
Откуда: Киев

Сообщение Krasnaja Shapka » 31.05.2007 (Чт) 12:23

cells(n,m) это объект - ячейка, cells(n.m).value - это содержимое ячейки
Если ясность вашего объяснения исключает ложное толкование, все равно кто-то поймет вас неправильно.

Мишка
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 22.05.2007 (Вт) 13:01
Откуда: из Пензы

Сообщение Мишка » 31.05.2007 (Чт) 12:28

alibek писал(а):В таком случае что по твоему означает Range?

диапазон!

Krasnaja Shapka писал(а):cells(n,m) это объект - ячейка, cells(n.m).value - это содержимое ячейки

я понимаю, я в предыдущем посте описАл происходящее.
предлагаете в конце строки дописать валуе?: ya4=...................value
;-)

Мишка
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 22.05.2007 (Вт) 13:01
Откуда: из Пензы

Сообщение Мишка » 31.05.2007 (Чт) 12:35

в таком виде тоже не работает!
Код: Выделить всё
ya4 = Sheets("Лист2").Cells(rr - 1, cc).Value
  If ya4 = "" Or IsNumeric(ya4) = False Then ya4 = 0

но в предыдущих постах коды не выдавали ошибки!!! не в первом ни во втором случае!!! (не было никаких носоответствий типов!)
в первом посте второй код не работает! он что то делает примерно то же время что и рабочий, но результата нет!
:-( я не понимаю... можете просто сказать что не так? плиз...
;-)

AleksMiass
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 30.05.2007 (Ср) 13:31
Откуда: От туда!

Сообщение AleksMiass » 31.05.2007 (Чт) 12:41

С диапазоном лучше (нужно) работать на активном листе!!!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 31.05.2007 (Чт) 12:51

Мишка писал(а):диапазон!

Чего?
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.05.2007 (Чт) 13:09

AleksMiass писал(а):С диапазоном лучше (нужно) работать на активном листе!!!

Бред.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Мишка
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 22.05.2007 (Вт) 13:01
Откуда: из Пензы

Сообщение Мишка » 31.05.2007 (Чт) 13:16

alibek писал(а):
Мишка писал(а):диапазон!

Чего?

это проверка? :-(
диапазон ячеек
range("a:a") - столб А
range("a1:e100") - диапазон с а1 по е100
если например .селект, то он выделит с а1 по е100.
;-)

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 31.05.2007 (Чт) 13:30

Мишка писал(а):в таком виде тоже не работает!
Код: Выделить всё
ya4 = Sheets("Лист2").Cells(rr - 1, cc).Value
  If ya4 = "" Or IsNumeric(ya4) = False Then ya4 = 0

но в предыдущих постах коды не выдавали ошибки!!! не в первом ни во втором случае!!! (не было никаких носоответствий типов!)
в первом посте второй код не работает! он что то делает примерно то же время что и рабочий, но результата нет!
:-( я не понимаю... можете просто сказать что не так? плиз...


1) указывай листы для всех рангов

2) ya4 = "" в любом случае подпадает под IsNumeric(ya4) = False
Привет,
KL

Мишка
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 22.05.2007 (Вт) 13:01
Откуда: из Пензы

Сообщение Мишка » 31.05.2007 (Чт) 13:50

KL писал(а):1) указывай листы для всех рангов

2) ya4 = "" в любом случае подпадает под IsNumeric(ya4) = False

не в любом, а точнее-никогда. :-( проверил уже, наверно раз сто!
не работает:
For i = 1 To Sheets("Лист2").Range("dish").Columns.Count
For j = 1 To Sheets("Лист2").Range("poducti").Rows.Count + 1
rr = Sheets("Лист2").Range("poducti").Rows(j).Row
cc = Sheets("Лист2").Range("dish").Columns(i).Column
ya4 = Sheets("Лист2").Cells(rr - 1, cc).Value
If ya4 = "" Or IsNumeric(ya4) = False Then ya4 = 0
Next j
Next i

работает:
For i = 1 To Range("dish").Columns.Count
For j = 1 To Range("poducti").Rows.Count + 1
rr = Range("poducti").Rows(j).Row
cc = Range("dish").Columns(i).Column
If Cells(rr - 1, cc).Value = "" Or IsNumeric(Cells(rr - 1, cc).Value) = False Then Cells(rr - 1, cc).Value = 0
Next j
Next i

ладно... видимо не сталкивался с этим никто. или глюк просто...
;-)

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Сообщение anvg » 31.05.2007 (Чт) 14:35

If ya4 = "" Or IsNumeric(ya4) = False Then ya4 = 0

А с чего ты взял, что такой код должен что-то менять в таблице?
Ну, присвоил ты переменной уа4 значение 0, а в таблицу кто будет значение заносить?
If Cells(rr - 1, cc).Value = "" Or IsNumeric(Cells(rr - 1, cc).Value) = False Then Cells(rr - 1, cc).Value = 0

Потому и обнуляет ячейки таблицы, поскольку ты ноль записываешь в ячейку Cells(rr - 1, cc).Value
Да и пересечение зачем искать столь пошлым образом?
Код: Выделить всё
Dim pCell As Range

For Each pCell In Application.Intersect(Range("poducti"), Range("dish"))
    If IsEmpty(pCell.Value) Or Not IsNumeric(pCell.Value Then '...
Next pCell

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 31.05.2007 (Чт) 14:36

Мишка писал(а):диапазон ячеек

Каких именно ячеек, не задумывался?
Lasciate ogni speranza, voi ch'entrate.

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 31.05.2007 (Чт) 14:46

Мишка писал(а):
KL писал(а):1) указывай листы для всех рангов

2) ya4 = "" в любом случае подпадает под IsNumeric(ya4) = False

не в любом, а точнее-никогда. :-( проверил уже, наверно раз сто!
не работает:
For i = 1 To Sheets("Лист2").Range("dish").Columns.Count
For j = 1 To Sheets("Лист2").Range("poducti").Rows.Count + 1
rr = Sheets("Лист2").Range("poducti").Rows(j).Row
cc = Sheets("Лист2").Range("dish").Columns(i).Column
ya4 = Sheets("Лист2").Cells(rr - 1, cc).Value
If ya4 = "" Or IsNumeric(ya4) = False Then ya4 = 0
Next j
Next i

работает:
For i = 1 To Range("dish").Columns.Count
For j = 1 To Range("poducti").Rows.Count + 1
rr = Range("poducti").Rows(j).Row
cc = Range("dish").Columns(i).Column
If Cells(rr - 1, cc).Value = "" Or IsNumeric(Cells(rr - 1, cc).Value) = False Then Cells(rr - 1, cc).Value = 0
Next j
Next i

ладно... видимо не сталкивался с этим никто. или глюк просто...

а так?
Код: Выделить всё
For i = 1 To Range("dish").Columns.Count
For j = 1 To Range("poducti").Rows.Count + 1
rr = Range("poducti").Rows(j).Row
cc = Range("dish").Columns(i).Column
Set ya4 = sheets("Лист2").Cells(rr - 1, cc)
If ya4 = "" Or IsNumeric(ya4) = False Then ya4 = 0
Next j
Next i
Привет,
KL

Мишка
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 17
Зарегистрирован: 22.05.2007 (Вт) 13:01
Откуда: из Пензы

Сообщение Мишка » 04.06.2007 (Пн) 13:02

KL писал(а):а так?
Код: Выделить всё
For i = 1 To Range("dish").Columns.Count
For j = 1 To Range("poducti").Rows.Count + 1
rr = Range("poducti").Rows(j).Row
cc = Range("dish").Columns(i).Column
Set ya4 = sheets("Лист2").Cells(rr - 1, cc)
If ya4 = "" Or IsNumeric(ya4) = False Then ya4 = 0
Next j
Next i

нет, тоже не работает... :-( ладно наплюйте... обойдусь с одним вариантом.
;-)

@Nik
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 14.05.2007 (Пн) 12:11

Сообщение @Nik » 05.06.2007 (Вт) 9:52

Не работает, потому что отсутствует "Dim ya4 As Range"


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 96

    TopList