|
Тема
|
цикли с for... next...
|
|
Автор |
vector_m (непознат
) |
Публикувано | 11.08.11 17:00 |
|
Здравейте !
Ще погледнете ли сорса:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For j = 12 To 100
If (Sheets("Януари").Cells(j, 1)) = (Sheets("База").Cells(j, 1)) Then
Sheets("База").Cells(j, 4) = Sheets("Януари").Range("AM" & j)
Sheets("База").Cells(j, 5) = Sheets("Януари").Range("AK" & j)
End If
Next j
End Sub
Защо се цикъла се завърта само два пъти , тоест отпечатва стойности само в 12 и 13 ред .
Пробвах да използвам две променливи: J- за sheets(Януари) и N- за sheets(База)
и докато не се завъртят и двата цикъла не мога да въвеждам данни ,тоест програмата забива !
Ето сорса с две променливи
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For j = 12 To 100
For N = 12 To 100
If (Sheets("Януари").Cells(j, 1)) = (Sheets("База").Cells(N, 1)) Then
Sheets("База").Cells(N, 4) = Sheets("Януари").Range("AM" & j)
Sheets("База").Cells(N, 5) = Sheets("Януари").Range("AK" & j)
End If
Next N
Next j
End Sub
А ако използвам само една променлива и за sheets(Януари) и sheets(База) тоест използвам само един цикъл то той се завърта само 2 пъти .
Каде бъркам?
<P ID="edit"><FONT class="small"><EM>Редактирано от vector_m на 11.08.11 17:04.</EM></FONT></P>Редактирано от vector_m на 11.08.11 17:09.
| |
Тема
|
Re: цикли с for... next...
[re: vector_m]
|
|
Автор |
zhitov (член) |
Публикувано | 12.08.11 09:22 |
|
Ти изпълни ли макроса стъпка по стъпка, да видиш какво точно става?
Според мен, цикълът си се завърта колкото трябва, просто условието If (Sheets("Януари").Cells(j, 1)) = (Sheets("База").Cells(j, 1)) Then не се изпълнява след 13-я ред.
Има няколко варианта за действие. Единият е да сложиш преди условието нещо подобно: Sheets("Януари").Cells(j, 10) = (Sheets("Януари").Cells(j, 1)) = (Sheets("База").Cells(j, 1)) Така в десета колона на Sheets("Януари") ще се изпише TRUE, ако условието е изпълнено или FALSE, ако условието не е изпълнено. Ако в десета колоно имаш данни, замени червената десятка с номера на някоя свободна колона от таблицата си.
Относно "цикъла с двете променливи" - това всъщност е цикъл с вложен цикъл и върши нещо доста по-различно от първия (с едната променлива). Първия цикъл сравнява (Sheets("Януари").Cells(j, 1)) само с клетката на ред j, колона 1 в Sheets("База") и ако условието е изпълнено, прави нещо. Цикъла с "двете променливи" сравнява (Sheets("Януари").Cells(j, 1)) с всяка клетка от масива A12:A100 на Sheets("База") и всеки път, когато срещне съвпадение прави нещо, като препокрива резултата от предишния цикъл.
Всъщност, по-сложно е за обяснение, отколкото за разбиране . Изпълни двата цикъла стъпка по стъпка и ще видиш разликата.
Редактирано от zhitov на 12.08.11 13:56.
| |
Тема
|
Re: цикли с for... next...
[re: zhitov]
|
|
Автор |
vector_m (непознат
) |
Публикувано | 15.08.11 18:27 |
|
Разбрах , защо не се отпечатват всички записи...
защото между списъка от записи има празни редове или записи, които не съвпадат с търсените и , когато брояча попадне на ред, в който се съдържат различни данни от търсените, то той спира.
Въпроса ми е, как при търсене на съвпадащи данни, брояча да не спира , ако стигне до ред, който е празен или данни различни от търсените, а да ги игнорира и да продължи да отпечатва записите съвпадащи с търсените ...
Прилагам линк за да видите нагледно ....
http://tranzit.dir.bg/load.php?id=hfL1uftudNJRlJG5935036
| |
|
|
|
|