Thread View: pl.comp.lang.vbasic
11 messages
11 total messages
Started by nothing.at.all
Fri, 26 Feb 2010 11:33
Makro - przesuń wiersze - problem:(
Author: nothing.at.all
Date: Fri, 26 Feb 2010 11:33
Date: Fri, 26 Feb 2010 11:33
64 lines
2587 bytes
2587 bytes
Napisałam sobie makro, które przesuwa mi wiersze, to znaczy gdy mam w Excelu
jakiś link z adresem bezwzględnym, to klikając na makro zostanie ten adres
linku przesunięty o tyle wierszy ile mu podam. I coś niestety nie działa:(
Proszę o zerknięcie i pomoc. I z góry dziękuję.
Sub PrzesunWiersze()
Dim Liczba As String
Dim Cyfra As Integer
Dim Znak As Integer
Dim Nliczba As Integer
Dim NowaFormula As String
Dim Zakres As Range
Dim Zmiana
Zmiana = InputBox("Podaj przesunięcie wierszy")
If Zmiana = "" Then Exit Sub
' ustala zakres do zmian
Set Zakres = Selection
For Each Cell In Zakres
Cell.Activate
' zamiana cyfer w jednej komórce
For Znak = 1 To Len(ActiveCell.Formula)
' dodaje znak jeśli nie numeryczny
If IsNumeric(Right(Left(ActiveCell.Formula, Znak), 1)) = False Then
NowaFormula = NowaFormula & Right(Left(ActiveCell.Formula, Znak), 1)
'modyfikuje i dodaje znaki jeśli liczbowe
If IsNumeric(Right(Left(ActiveCell.Formula, Znak), 1)) = True Then
If Right(Left(ActiveCell.Formula, Znak - 1), 1) = "$" Then
Cyfra = 0
Do Until IsNumeric(Right(Left(ActiveCell.Formula, Znak +
Cyfra),1)) = False Or Znak + Cyfra - 1 = Len(ActiveCell.Formula)
Liczba = Liczba & Right(Left(ActiveCell.Formula, Znak +Cyfra),
1)
Cyfra = Cyfra + 1
Loop
Nliczba = CInt(Liczba) + Zmiana
NowaFormula = NowaFormula & Nliczba
Liczba = ""
Znak = Znak + Cyfra - 1
Else
NowaFormula = NowaFormula & Right(Left(ActiveCell.Formula,
Znak), 1)
End If
End If
Next Znak
ActiveCell.Formula = NowaFormula
NowaFormula = ""
Next Cell
End Sub
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Makro - przesuń wiersze - problem:(
Author: Jacek
Date: Fri, 26 Feb 2010 12:26
Date: Fri, 26 Feb 2010 12:26
3 lines
1040 bytes
1040 bytes
Proponuje F8. P.S. Dlaczego nie korzystasz z Selection.Insert?
Re: Makro - przesuń wiersze - problem:(
Author: nothing.at.all
Date: Mon, 01 Mar 2010 07:21
Date: Mon, 01 Mar 2010 07:21
6 lines
1072 bytes
1072 bytes
Tylko jak dla mnie do Next jest For i nie wiem, czy oślepłam czy coś innego:(. A jakos tak nie użyłam Selection.Insert. A byłoby prościej? nie sądze. -- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Makro - przesuń wiersze - problem:(
Author: nothing.at.all
Date: Mon, 01 Mar 2010 14:27
Date: Mon, 01 Mar 2010 14:27
5 lines
1029 bytes
1029 bytes
Poprawiłam tą pętlę, znaczy Edn If, ale nadal coś nie tak:(. Pomóżcie proszę. -- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Makro - przesuń wiersze - problem:(
Author: nothing.at.all
Date: Mon, 01 Mar 2010 14:28
Date: Mon, 01 Mar 2010 14:28
5 lines
1006 bytes
1006 bytes
Poprawiłam End If i znowu coś nie tak:(. Pomóżcie proszę. -- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Makro - przesuń wiersze - problem:(
Author: Michal AKA Miki
Date: Mon, 01 Mar 2010 22:48
Date: Mon, 01 Mar 2010 22:48
26 lines
1920 bytes
1920 bytes
Użytkownik <nothing.at.all@NOSPAM.gazeta.pl> napisał w wiadomości
news:hmfpti$3js$1@inews.gazeta.pl...
> Tylko jak dla mnie do Next jest For i nie wiem, czy oślepłam czy coś
> innego:(.
>
> A jakos tak nie użyłam Selection.Insert. A byłoby prościej? nie sądze.
>
No wlasnie z proponowana metoda Insert byloby duzo prosciej - bo wtedy Excel
zrobi automatem to, co ty probujesz robic recznie. Pod warunkiem, ze ciebie
dobrze rozumiemy...
Zrob sama taki przyklad:
- w arkuszu w komorce np. A3 wpisz sobie dowolna wartosc, np 120.
- w komorce A6 wpisz formule z adresem bezwzglednym, np "=$A$3"
- teraz wstawiasz wiersz ponad wierszem 3
- i zauwaz, ze w komorce A7 masz zmieniony adres bezwzgledny w formule
"=$A$4"
Makra dzialaja tak samo:
ActiveCell.FormulaR1C1 = "120"
Range("A6").FormulaR1C1 = "=R3C1"
Rows("2:2").Insert Shift:=xlDown
Pozdrawiam
Michal
Re: Makro - przesuń wiersze - problem:(
Author: nothing.at.all
Date: Tue, 02 Mar 2010 13:54
Date: Tue, 02 Mar 2010 13:54
12 lines
1633 bytes
1633 bytes
Hm, to chyba się nie rozumiemy. Chce móc szybko zmieniać wiersz do którego mam odwołanie w pliku. Np. w całej jednej zakładce mam odwołania do innego pliku, po kolei np. 1 wiersz w pliku X, odwołuje się do wiersza 120 w pliku Y, wiersz 2 w pliku X odwołuje się do wiersza 121 w pliku Y, itd. I teraz chce przesunąć odwołania, np. o 5 wierszy, czyli chce aby wiersz 1 odwoływał się do wiersza 125, wiersz 2 do 126, itd. Oczywiście chce to robić tylko w adresach bezwgędnych i szybko od razu wszystkie razem. Przepraszam, że tak łopatologicznie, ale wkurzam się, że coś co miało mi ułatwić pracę tak nie działa:(. -- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Makro - przesuń wiersze - problem:(
Author: Jacek
Date: Tue, 02 Mar 2010 17:32
Date: Tue, 02 Mar 2010 17:32
27 lines
2383 bytes
2383 bytes
Dnia Tue, 2 Mar 2010 13:54:14 +0000 (UTC), nothing.at.all@NOSPAM.gazeta.pl napisał(a): > Hm, to chyba się nie rozumiemy. Chce móc szybko zmieniać wiersz do którego > mam odwołanie w pliku. Np. w całej jednej zakładce mam odwołania do innego > pliku, po kolei np. 1 wiersz w pliku X, odwołuje się do wiersza 120 w pliku > Y, wiersz 2 w pliku X odwołuje się do wiersza 121 w pliku Y, itd. I teraz > chce przesunąć odwołania, np. o 5 wierszy, czyli chce aby wiersz 1 odwoływał > się do wiersza 125, wiersz 2 do 126, itd. Oczywiście chce to robić tylko w > adresach bezwgędnych i szybko od razu wszystkie razem. > Przepraszam, że tak łopatologicznie, ale wkurzam się, że coś co miało mi > ułatwić pracę tak nie działa:(. Badz uprzejma operowac nazwami przyjetymi. Wiersz, kolumana oraz komorka. > 'Chce móc szybko zmieniać wiersz do którego mam odwołanie w pliku' Jest plik .xls, ktory zawiera arkusze, ten zawiera wiersze i kolumny. Komorka to dana okreslona przez wiersz i kolumne, etc. Nic nie mowilas o wiecej niz jenym pliku. >Oczywiście chce to robić tylko w > adresach bezwgędnych i szybko od razu wszystkie razem. Wstawiajac wiersz/kolumny, nie aktualizujac odwolan wzglednych chcesz, zeby 'przed' komorka A3 zawierala '=A1', a 'po' '=A2'?
Re: Makro - przesuń wiersze - problem:(
Author: Michal AKA Miki
Date: Thu, 04 Mar 2010 22:24
Date: Thu, 04 Mar 2010 22:24
91 lines
4626 bytes
4626 bytes
Użytkownik <nothing.at.all@NOSPAM.gazeta.pl> napisał w wiadomości
news:hmj5a6$s9m$1@inews.gazeta.pl...
> Hm, to chyba się nie rozumiemy. Chce móc szybko zmieniać wiersz do którego
> mam odwołanie w pliku. Np. w całej jednej zakładce mam odwołania do innego
> pliku, po kolei np. 1 wiersz w pliku X, odwołuje się do wiersza 120 w
> pliku
> Y, wiersz 2 w pliku X odwołuje się do wiersza 121 w pliku Y, itd. I teraz
> chce przesunąć odwołania, np. o 5 wierszy, czyli chce aby wiersz 1
> odwoływał
> się do wiersza 125, wiersz 2 do 126, itd. Oczywiście chce to robić tylko w
> adresach bezwgędnych i szybko od razu wszystkie razem.
> Przepraszam, że tak łopatologicznie, ale wkurzam się, że coś co miało mi
> ułatwić pracę tak nie działa:(.
Ok, chyba zaczynam rozumiec :)
Moze ja sprecyzuje po swojemu, a ty potwierdzisz, ze o to chodzi:
twoje makro nie ma przesuwac wierszy, a jedynie WYSZUKIWAC I ZMIENIAC
definicje odwolan bezwzglednych w formulach, we wskazanym zakresie komorek,
tak?
Zmiana definicji tych odwolan bezwzglednych ma polegac na zwiekszeniu
wartosci w tym odwolaniu o zadana wielkosc.
Ok - pierwszy podstawowy blad - jesli w formule, ktora przerabiasz pojawia
sie nazwa z cyfra, np. "Arkusz2", to numerek 2 z nazwy jest zjadany.
drugi - brakuje "end if" - wewnatrz petli for - "otwierasz" 3 razy "if", a
zamykasz tylko 2 razy.
zmienilem troche twoj kod, daj znac, czy to jest to, co chcialas. Nie
testowalem zbyt dokladnie, wiec pewnie pojawi sie jakis blad...
Tylko od razu mowie, ze kod ma spora wade - mianowicie - jesli teksty typu
$23 znajda sie nie w formule, ale normalnie w wartosci komorki, to tez
zostana zmienione...
takze zadziala rowniez dla komorek z tekstem typu: "Te buty kosztuja $200"
Sub PrzesunWiersze2()
Dim Cyfra As Integer
Dim NrZnaku As Integer 'nr biezacego znaku, ktory analizujemy
Dim Znak As String 'biezacy znak
Dim Liczba As String 'liczba za znakiem $ w postaci tekstowej
Dim Nliczba As Integer 'liczba za znakiem $ w postaci INT
Dim NowaFormula As String 'formula po zmianie
Dim Zmiana As Variant 'zmienna okreslajaca przesuniecie w formule
Dim komorka As Range ' pojedyncza komorka z zadanego zakresu
Zmiana = InputBox("Podaj przesunięcie wierszy")
If Zmiana = "" Then Exit Sub
' ustala zakres do zmian
Set Zakres = Selection
For Each komorka In Selection
NowaFormula = ""
' zamiana cyfer w jednej komórce
NrZnaku = 1
Do While NrZnaku <= Len(komorka.Formula)
Znak = Mid(komorka.Formula, NrZnaku, 1)
' dodaje znak jeśli nie numeryczny
If IsNumeric(Znak) = False Then
NowaFormula = NowaFormula & Znak
Else
'modyfikuje i dodaje znaki jeśli liczbowe
If Mid(komorka.Formula, NrZnaku - 1, 1) = "$" Then
Liczba = ""
Do While IsNumeric(Mid(komorka.Formula, NrZnaku, 1))
Liczba = Liczba & Mid(komorka.Formula, NrZnaku, 1)
If NrZnaku = Len(komorka.Formula) Then Exit Do
NrZnaku = NrZnaku + 1
Loop
If Liczba <> "" Then
Nliczba = CInt(Liczba) + Zmiana
NowaFormula = NowaFormula & Nliczba
End If
Else
NowaFormula = NowaFormula & Znak
End If
End If
NrZnaku = NrZnaku + 1
Loop
komorka.Formula = NowaFormula
Next komorka
End Sub
Pozdrawiam
Michal
Re: Makro - przesuń wiersze - problem:(
Author: nothing.at.all
Date: Fri, 05 Mar 2010 07:34
Date: Fri, 05 Mar 2010 07:34
4 lines
1121 bytes
1121 bytes
Przepraszam, faktycznie powinnam pisać formalnie przyjętym językiem. -- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Re: Makro - przesuń wiersze - problem:(
Author: nothing.at.all
Date: Fri, 05 Mar 2010 07:46
Date: Fri, 05 Mar 2010 07:46
12 lines
1374 bytes
1374 bytes
Dokładnie tak. Napisałam nieformalnie, pod siebie i dziwie się, że nikt nie potrafi zrozumieć. Poprawię się. Brak zakończenia pętli poprawiłam już wcześniej. Ale nie widziałam tego zjadanego numerka. Dziękuję bardzo, to już po częsci działa tak jak chciałam. Muszę jeszcze te wady poprawić. Pozdrawiam. -- Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads