🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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:(
#104491
Author: nothing.at.all
Date: Fri, 26 Feb 2010 11:33
64 lines
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:(
#104492
Author: Jacek
Date: Fri, 26 Feb 2010 12:26
3 lines
1040 bytes
Proponuje F8.

P.S. Dlaczego nie korzystasz z Selection.Insert?
Re: Makro - przesuń wiersze - problem:(
#104493
Author: nothing.at.all
Date: Mon, 01 Mar 2010 07:21
6 lines
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:(
#104494
Author: nothing.at.all
Date: Mon, 01 Mar 2010 14:27
5 lines
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:(
#104495
Author: nothing.at.all
Date: Mon, 01 Mar 2010 14:28
5 lines
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:(
#104496
Author: Michal AKA Miki
Date: Mon, 01 Mar 2010 22:48
26 lines
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:(
#104497
Author: nothing.at.all
Date: Tue, 02 Mar 2010 13:54
12 lines
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:(
#104498
Author: Jacek
Date: Tue, 02 Mar 2010 17:32
27 lines
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:(
#104500
Author: Michal AKA Miki
Date: Thu, 04 Mar 2010 22:24
91 lines
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:(
#104499
Author: nothing.at.all
Date: Fri, 05 Mar 2010 07:34
4 lines
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:(
#104501
Author: nothing.at.all
Date: Fri, 05 Mar 2010 07:46
12 lines
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