|
Страници по тази тема: 1 | 2 | 3 | (покажи всички)
Тема
|
For and Next ...
|
|
Автор |
vector_m (непознат
) |
Публикувано | 19.03.12 19:20 |
|
Здравейте!
Моля ви ако някой знае да ме светне що се получава така:
Имам два листа : "Справка" и "База",до тук добре
В лист "База" от "А1" до "А30" съм поставил трите имена на хора...
В лист "Справка в колона "А" от 1 ред до 30 ред имам същия списък от хора но в разбъркан ред , тоест ако Димитър Петров Петров в лист "База" е на първия ред , то в лист "Справка" е да кажем на третия ред...
В лист "Справка" съм поставил бутон който прехвърля данните срещу всеки човек в лист "База" срещу съответния човек!
Ето го кода:
For J = 12 To 55
If (Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(J, 2)) Then
Sheets("База").Cells(J, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(J, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(J, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(J, 41) = Sheets("Справка").Range("AP" & J)
End If
Next J
Нещата се получават ако в лист "Справка" и в лист "База" имената се съвпадат по редове , пример: лист "Справка" в клетка "А1" - Димитър Петров Петров и в лист "База" в клетка "А1"- Димитър Петров Петров.
Идеята ми е такава: реда на имената написани в лист "Справка" да не съвпада с реда на имената в лист "База"
Тоест взимам си едно име примерно: Петър Петров Петров е в клетка "А3" в лист : "Справка", а в лист "База" Петър Петров Петров е в клетка "А10". Когато натисна бутона "Прехвърли" то данните срещу Петър в лист "Справка" да се отпечатат точно срещу Петър в клетка "А10" в лист "База".
Много съм обстоятелствен, но вече дълго време не мога да си обясня защо с този сорс не се поучава.
Благодаря ви !
| |
Тема
|
Re: For and Next ...
[re: vector_m]
|
|
Автор | Ивaн (Нерегистриран) |
Публикувано | 19.03.12 19:36 |
|
Аз бих сложил преди
END IF
едно ELSE
после да мушна един код между ELSE и ENDIF , с който да потърся тва дет ми требе и като го намерия да си прехвърля (ако го намеря де).
Напиши кво не е ясно и ако има проблем да ръсим още мозък....
Малко тва A1 do A30 не схванах що цикъла е от 12 до 55, ама нейсе...Може съм попрекалил с мастиката...
| |
Тема
|
Re: For and Next ...
[re: Ивaн]
|
|
Автор |
vector_m (непознат
) |
Публикувано | 19.03.12 20:02 |
|
Ами идеята ми е такава :
В лист "База" списъка от хора няма да се променя , т.е мястото на хората в списъка няма да се променя , та така да стане че да се търси съвпадение на имена и когато има такова то там да постави данни .
Защото с този сорс, който съм постнал ако примерно Иван в лист "Справка" е в клетка "А1" и в клетка "В1" има числото 5 , а в лист "База" Иван е в клетка "А10" то срещу Иван , в клетка "В10" в лист "База" , се отпечатва нула а не числото 5 , тоест приема, че ЧОВЕКА в лист "Справка" в клетка "А1" не равно на аналогичната клетка в лист "База"
Не зная как да го обясня...
| |
Тема
|
Re: For and Next ...
[re: Ивaн]
|
|
Автор | Ивaн (Нерегистриран) |
Публикувано | 20.03.12 08:09 |
|
Казано с други думи:
По-горе написах, че ти проверяваш (и правиш нещоситам), когато ЕДНОТО е РАВНО на ДРУГОТО. Драсни код и в случаите, когато ЕДНОТО НЕ Е РАВНО на ДРУГОТО. Демек В ПРОТИВЕН СЛУЧАЙ - тва дет американците му викат ELSE.
Там трябва да има код, дето да търси на кой ред е РАВНОТО НЕЩО и ако го намери да го прехвърли в другия лист.
Напиши кода и ако не работи го copy/paste тука.
| |
|
Първо виж какво прави командата
VLOOKUP, дали няма да се разминеш без макрос.
Второ, ако държиш на макроса, трябва да вложиш
два цикъла - външният да обхожда единия списък поред,
а вътрешният - да претърсва другия списък за съвпадение.
Дали ме разбра?
Съкращавайте фразите до размера на мисъл. М.Вайсберг
| |
Тема
|
Re: For and Next ...
[re: пpивeт]
|
|
Автор |
vector_m (непознат
) |
Публикувано | 21.03.12 09:32 |
|
Здравей!
По- добре с макрос!
Разбирам идеята ти , но не ми е ясно как да я реализирам! Би ли ми подсказал как става това? Благодаря за съдействието! :)
| |
Тема
|
Re: For and Next ...
[re: vector_m]
|
|
Автор | Ивaн (Нерегистриран) |
Публикувано | 21.03.12 12:05 |
|
For J = 12 To 55
If (Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(J, 2)) Then
Sheets("База").Cells(J, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(J, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(J, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(J, 41) = Sheets("Справка").Range("AP" & J)
End If
Next J
това аз бих го преработил така:
sub AlaBala( J as long)
DIM J as long, Namereno as boolean, K as long, St as String
namereno=false
K=11
while (K<55) and (not namereno) do
K=K+1
namereno=(Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(K, 2))
wend
if namereno then
Sheets("База").Cells(K, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(K, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(K, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(K, 41) = Sheets("Справка").Range("AP" & J)
else
st="Не спи като въвеждаш!"
Sheets("База").Cells(K, 5) = st
Sheets("База").Cells(K, 6) = st
Sheets("База").Cells(K, 7) = st
Sheets("База").Cells(K, 41) = st
end if
end Sub
Е, не претендирам за грешки в кода, ама нещо таквоз...
Ако цикълът е с FOR имаш винаги обхождане до края (освен ако не излезеш принудително, ама не е за предпочитане таквоз програмиране).Даже и да го намери тенекето на 1 още....При голяма номенклатура - ще се бави.
Разбира се могат да се ползват и готовите функции на М$. Аз не го правя по 2 причини (винаги когато мога де):
1.По-лесно е ако един ден се наложи за преработка за в опънатия офис
2.Мразим М$ (работим на продуктите му по принуда). По секакъв начин те карат те да си все по-зависим от тях...
Ади пиши кво стана с кода.
| |
Тема
|
Re: For and Next ...
[re: Ивaн]
|
|
Автор | Ивaн (Нерегистриран) |
Публикувано | 21.03.12 12:08 |
|
Дефинирал съм по погрешка още веднъш J.
DIM J as long, Namereno as boolean, K as long, St as String
го направи:
DIM Namereno as boolean, K as long, St as String
То интерпретатора на ЕКСЕЛА сигурно щеше да ревне, ама знам ли... Дано нема още грешки че кода го писах направо тука.
| |
Тема
|
Re: For and Next ...
[re: Ивaн]
|
|
Автор |
vector_m (непознат
) |
Публикувано | 21.03.12 20:25 |
|
Както казваш ти Ексела ревна!
Аз ти благодаря, че съдействаш!
Значи, първо реда с do светна - не ми е ясно за какво е и за това го махнах; Второ, реда Namereno = (Sheets("Ñïðàâêà").Cells(J, 2)) = (Sheets("Áàçà").Cells(K, 2)) и той светна;
ето сорса:
Private Sub CommandButton2_Click()
Dim Namereno As Boolean, K As Long, St As String
If MsgBox("Моля, изчакайте, докато данните се прехвърлят !", vbOKCancel + vbInformation, "Прехвърляне...") = vbOK Then
For J = 12 To 55
Namereno = False
K = 11
While (K < 55) And (Not Namereno)
K = K + 1
Namereno = (Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(K, 2))
Wend
If Namereno Then
Sheets("База").Cells(K, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(K, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(K, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(K, 41) = Sheets("Справка").Range("AP" & J)
Else
St = "Не спи като въвеждаш!"
Sheets("База").Cells(K, 5) = St
Sheets("База").Cells(K, 6) = St
Sheets("База").Cells(K, 7) = St
Sheets("База").Cells(K, 41) = St
End If
Next J
End If
end sub
Благодаря!
| |
Тема
|
Re: For and Next ...
[re: vector_m]
|
|
Автор | Ивaн (Нерегистриран) |
Публикувано | 21.03.12 21:09 |
|
Сорка за error-a проблемът е в предмониторното устройство. Все ги бъркам двата щата БАЗИКА и ПАСКАЛА (делфи де). Махнал си го DO - добре!
Ако бях на твое място бих преработи кода така:
Private Sub CommandButton2_Click()
Dim Namereno As Boolean, K As Long, St As String
Dim Name1 as string,Name2 as string, J as long
'J си го дефинирам по навик от паскала,че там е задължително
'при различните видове БАЗИЦИ и може и да не се дефинира
'но имаше некъв БАЗИК дето бачкаше до 10 недефиниран масив (напр)....
Name1="База"
Name2="Справка"
'тука избягвам варианта - кирилица/латинаица и грешно изписване на името на листа
If MsgBox("Моля, изчакайте, докато данните се прехвърлят !", vbOKCancel + vbInformation, "Прехвърляне...") = vbOK Then
For J = 12 To 55
Namereno = False
K = 11
While (K < 55) And (Not Namereno)
K = K + 1
Namereno = (Sheets(Name2).Cells(J, 2).value = Sheets(Name1).Cells(K, 2) .Value)
Wend
If Namereno Then
Sheets(Name1).Cells(K, 5) = Sheets(Name2).Range("AQ" & J)
Sheets(Name1).Cells(K, 6) = Sheets(Name2).Range("AL" & J)
Sheets(name1).Cells(K, 7) = Sheets(Name2).Range("AK" & J)
Sheets(Name1).Cells(K, 41) = Sheets(Name2).Range("AP" & J)
Else
St = "Не спи като въвеждаш!"
Sheets(Name1).Cells(K, 5).value = St
Sheets(name1).Cells(K, 6).value = St
Sheets(Name1).Cells(K, 7).value = St
Sheets(Name1).Cells(K, 41).value = St
End If
Next J
End If
end sub
И да знаш: тва VALUE все го изтървам...Ае че чъм на греянка, че с тва гадното време - пролет-зимя-лято нещо съм прихванал. А както казват мислителите:
ВСИЧКИ БОЛЕСТИ ИДАТ ОТ НЕРЕДОВНОТО ПИЕНЕ!
Наздраве и пиши кво е станало.
| |
|
Страници по тази тема: 1 | 2 | 3 | (покажи всички)
|
|
|