Страницы: 1
RSS
Вывод текста по условиям
 
Народ! подскажите плиз! Необходимо программно(средствами VB) выводить типа подсказки "что не так" для вводимых данных. Мне главное принцип, а дальше я разберусь...
 
Что-то типа:  
Dim x as Integer 'переменная для номера строки  
Dim a as Integer 'переменная для номера столбца  
x = 1  
a = 1  
if cells(x,a) < cells(x+1,a) then Msgbox "Значение ячейки " & x & "в столбце" & a & "меньше чем значение ячейки" & x+1 & "в столбце" & a  
x=x+1  
End if  
 
Это если принцип.
 
ну, в общем то схему я понял, только вот выпадающие окна мне не кстати, должно быть все на форме
 
тьфу, на данном листе с которым работается
 
Что-то типа:  
Dim x as Integer 'переменная для номера строки  
Dim a as Integer 'переменная для номера столбца  
Dim er as Integer 'номер столбца, в котором нужном выводить записи об ошибках  
x = 1  
a = 1  
er = 9  
if cells(x,a) < cells(x+1,a) then cells(x,er) = "Значение ячейки " & x & "в столбце" & a & "меньше чем значение ячейки" & x+1 & "в столбце" & a  
x=x+1  
End if
 
Но это именно принцип, а не рабочий макрос.  
Нужно также добавить циклы и прочее. Сможете?
 
{quote}{login=Светлана В}{date=03.03.2011 05:07}{thema=}{post}Но это именно принцип, а не рабочий макрос.  
Нужно также добавить циклы и прочее. Сможете?{/post}{/quote}  
 
Признаюсь, я в vb не силен... :-[ А вот, если условие-сумма? это уже другая процедура? В общем, формульно, вот что у меня получилось:
 
=ЕСЛИ(ИЛИ(С6<С7;D6<D7;E6<E7);Лист1!A1;(ЕСЛИ(ИЛИ(C6<C8;D6<D8;E6<E8);Лист1!A2;ЕСЛИ(ИЛИ((C9+C10)<C6;(D9+D10)<D6;(E9+E10)<E6);Лист1!A3;"ОК"))))  
 
На листе1 в ячейках A1,A2,A3-текстовка поясняющая ошибки  
 
В общем, т.к. в моей "реальной" форме диапазон редактируемого листа довольно большой, то ессесссно в ячейку ОЧЕНЬ большую формулу не запихнешь...запутаешься, вот потому и прошу помощи...:-)
 
Подскажите, я правильно понимаю, что таблица может расширяться только вправо, а количество строк конечно?
 
{quote}{login=Светлана В}{date=03.03.2011 05:28}{thema=}{post}Подскажите, я правильно понимаю, что таблица может расширяться только вправо, а количество строк конечно?{/post}{/quote}  
 
В реальной форме количество столбцов 33, строк 44 - это максимальный диапазон, есть листы, где количество столбцов уже меньше, а количество строк-фиксировано. И условия распространяются не на "подряд" все столбцы
 
Private Sub Worksheet_Change(ByVal Target As Range)  
Dim li As Long  
For li = 3 To 5'столбцы  
   If Cells(6, li) < Cells(7, li) Then  
       If sTXT = Empty Then  
       sTXT = sTXT & " " & "Х не должен быть меньше Y"  
       End If  
   End If  
Next  
Cells(1, 1) = sTXT  
End Sub
 
{quote}{login=sva}{date=03.03.2011 05:42}{thema=}{post}Private Sub Worksheet_Change(ByVal Target As Range)  
Dim li As Long  
For li = 3 To 5'столбцы  
   If Cells(6, li) < Cells(7, li) Then  
       If sTXT = Empty ...{/post}{/quote}  
 
вопросик: а где изначальное присвоение данных переменной sTXT ?
Редко но метко ...
 
А зачем?  
Если ошибок не будет sTXT останется пустой и в A1 никаких предупреждений не будет.
 
Спасибо sva! Все здорово! Возникла попутно такая проблемка: есть диапазон столбцов по которым проверяется условие(если судить по последнему решению) и в зависимости от выполнения этого, либо не пишет в ячейке ничего, либо пишет описание что не так. Так вот, вопрос в следующем, можно ли в соседней ячейке вывести "проблемные" ячейки, т.е. допустим, у нас ошибки в 3,5 и 10 столбцах, и вывести надо текст "C3;E3;J3 - содержат ошибки!" (строка 3 взята наугад и роли не играет, т.к. она учитывается в выполняемом условии), и естественно, после того как в этих столбцах будут убираться ошибки, то и перечисление ячеек должно сокращаться. Можно такое сделать? Немного поясню, просто т.к. много столбцов(да и строк около 60), пользователь может недоумевать, где же ошибка.Помогите, плиз!
 
{quote}{login=sva}{date=03.03.2011 05:42}{thema=}{post}Private Sub Worksheet_Change(ByVal Target As Range)  
Dim li As Long  
For li = 3 To 5'столбцы  
   If Cells(6, li) < Cells(7, li) Then  
       If sTXT = Empty Then  
       sTXT = sTXT & " " & "Х не должен быть меньше Y"  
       End If  
   End If  
Next  
Cells(1, 1) = sTXT  
End Sub{/post}{/quote}  
 
Конечно, как я сказал-все здорово! НО! Нужно только для определенных столбцов(в реальной форме задействованы столбцы: F,G,I,J,L,M,O,P,R,S,U,V,X,Y,AA,AB,AD,AE,AG,AH,AJ,AK)
 
В общем так:  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
Dim li As Long, r As Range  
Set r = Range("c6:e10") 'задаем диапазон проверки, чтобы не отслеживать весь лист  
If Not (Intersect(Target, r) Is Nothing) Then  
   For li = 3 To 5 'столбцы  
   If Cells(6, li) < Cells(7, li) Then  
   If sTXT = Empty Then  
   sTXT = sTXT & " " & "Х не должен быть меньше Y"  
   End If  
   sAdr = sAdr & " " & Cells(6, li).Address  
   End If  
   Next  
End If  
Cells(1, 1) = sTXT  
If sAdr <> Empty Then  
Cells(1, 2) = "Ошибки в " & sAdr  
Else  
Cells(1, 2) = Empty  
End If  
End Sub
 
Со столбцами так:  
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
Dim li As Long, r As Range  
colArr = Array("F", "G", "I", "J", "L") 'указать нужные названия столбцов  
Set r = Range("f6:ak10") 'задаем диапазон проверки, чтобы не отслеживать весь лист  
If Not (Intersect(Target, r) Is Nothing) Then  
   For li = 0 To UBound(colArr) 'столбцы  
   If Range(colArr(li) & 6) < Range(colArr(li) & 7) Then  
   If sTXT = Empty Then  
   sTXT = sTXT & " " & "Х не должен быть меньше Y"  
   End If  
   sAdr = sAdr & " " & Range(colArr(li) & 6).Address  
   End If  
   Next  
End If  
Cells(1, 1) = sTXT  
If sAdr <> Empty Then  
Cells(1, 2) = "Ошибки в " & sAdr  
Else  
Cells(1, 2) = Empty  
End If  
End Sub
 
Спасибо! сейчас попробую...
Страницы: 1
Читают тему
Наверх