Michał Pawłowski

Michał Pawłowski Student, Szkoła
Główna Handlowa w
Warszawie

Temat: Makra i Visual Basic

Nie wiem, czy o to Ci chodzi bo nie do końca rozumiem Twoją prośbę.

Sub ZmianaFormuly()

Dim i As Integer, j As Integer
Dim sFormula As String
Dim iNumerZnaku1 As Integer
Dim iNumerZnaku2 As Integer
Dim PierwszyNumer As Integer

For i = 4 To 300
sFormula = Cells(i, "S").Formula
iNumerZnaku1 = InStr(1, sFormula, "{", vbTextCompare)
iNumerZnaku2 = InStr(iNumerZnaku1, sFormula, ",", vbTextCompare)
PierwszyNumer = CInt(Mid(sFormula, iNumerZnaku1 + 1, iNumerZnaku2 - iNumerZnaku1 - 1))
For j = 0 To 4
sFormula = Mid(sFormula, 1, iNumerZnaku1) & PierwszyNumer + 5 + j & ","
iNumerZnaku1 = iNumerZnaku1 + 3
Next j
sFormula = Mid(sFormula, 1, iNumerZnaku1 - 1) & "},0)"
MsgBox sFormula
Cells(i, "S").Formula = sFormula
Next i
End Sub

Temat: Makra i Visual Basic

Chodzi mi o to dokładnie że mam w kolumnie formułe:

SUMA(WYSZUKAJ.PIONOWO(A23;Rozchody!A:IK;{14;15;16;17;18};0)

I teraz chciałbym żeby po uruchomieniu makro żeby zmieniał się tylko zakres kolumn ;{14;15;16;17;18}; na kolejny ciąg liczb ;{15;16;17;18;19};
i tak za każdym razem czyli po kolejnym uruchomieniu makra znów
;{15;16;17;18;19};na ;{20;21;22;23;24};. reszta formuły powinna pozostać bez zmian. Jestem początkującym użytkownikiem języka VBA jakby ktoś mógłby mi pomóc będe wdzięczny.

Pozdrawiam
Michał Pawłowski

Michał Pawłowski Student, Szkoła
Główna Handlowa w
Warszawie

Temat: Makra i Visual Basic

A próbowałeś użyć tego co napisałem? Makro zmienia formuły w sposób przez Ciebie opisany w zakresie S4:S300.
Bogusław Wasiak

Bogusław Wasiak Specjalista ds.
Controllingu

Temat: Makra i Visual Basic

Po w pisaniu w pole A1 wartości 14 będziesz miał podstawę. każde ponowne uruchomienie makra pozwoli na zwiększenie wartości zgodnie z tym o co prosiłeś. Rozwiązanie chyba najprostsze. Uwaga, nie sprawdzałem czy to działa po wklejeniu. Przetestować musisz sam :D.

dim a as long
a = activesheets.cells(1, 1).value
Range("H4").Select
ActiveWindow.SmallScroll ToRight:=6
Range("S4").Select
ActiveCell.FormulaR1C1 = _
"=SUM(VLOOKUP(RC[-18],Rozchody!C[-18]:C[226],{" & a & "," & a+1 & "," & a+2 & "," & a+3 & "," & a+4 & "},0))"
activesheets.cells(1, 1).value = a + 5
Range("S4").Select
Selection.AutoFill Destination:=Range("S4:S300")
Range("S4:S300").Select
Range("S4").Select

Temat: Makra i Visual Basic

Michał Pawłowski:
A próbowałeś użyć tego co napisałem? Makro zmienia formuły w sposób przez Ciebie opisany w zakresie S4:S300.

Sprawdzalem to makro pojawia sie okienko wyswietaljące ciąg na który zostanie zamieniony ale po naciśnięciu ok wyskakuje błąd makra który dotyczy ostaniej linijki:
Cells(i, "S").Formula = sFormula

wiesz może jak to porawić

Pozdrawiam
Michał Pawłowski

Michał Pawłowski Student, Szkoła
Główna Handlowa w
Warszawie

Temat: Makra i Visual Basic

Przez przypadek wkleiłem Ci wersję roboczą. Dobrze, że zawierała błąd, bo inaczej wyświetlałby się 300 razy MsgBox:) Poprawione makro (o ile jeszcze potrzebne):

Sub ZmianaFormuly()

Dim i As Integer, j As Integer
Dim sFormula As String
Dim iNumerZnaku1 As Integer
Dim iNumerZnaku2 As Integer
Dim PierwszyNumer As Integer

For i = 1 To 300
sFormula = Cells(i, "S").Formula
iNumerZnaku1 = InStr(1, sFormula, "{", vbTextCompare)
iNumerZnaku2 = InStr(iNumerZnaku1, sFormula, ",", vbTextCompare)
PierwszyNumer = CInt(Mid(sFormula, iNumerZnaku1 + 1, iNumerZnaku2 - iNumerZnaku1 - 1))
For j = 0 To 4
sFormula = Mid(sFormula, 1, iNumerZnaku1) & PierwszyNumer + 5 + j & ","
iNumerZnaku1 = iNumerZnaku1 + 3
Next j
sFormula = Mid(sFormula, 1, Len(sFormula) - 1) & "},0))"
Cells(i, "S").Formula = sFormula
Next i
End Sub
Daniel Stanisławski

Daniel Stanisławski WYKŁADOWCA,
Uniwersytet
Przyrodniczy w
Poznaniu

Temat: Makra i Visual Basic

Witam
Czy ma ktoś makro lub może pomoc je stworzyć.
Chodzi o to aby powielać w nowym arkuszu wiersze
tyle razy ile wskaże licznik zapisany w w kolumnie arkusza.
Np, wiersz:
5 xxx yyyy zzzz
99 aaa bbb ccc
należy skopiować 5 razy do arkusza drugiegoa wiersz drugi 99 razy itd.
aż do końca bazy danych

Temat: Makra i Visual Basic

Michał Pawłowski:
Przez przypadek wkleiłem Ci wersję roboczą. Dobrze, że zawierała błąd, bo inaczej wyświetlałby się 300 razy MsgBox:) Poprawione makro (o ile jeszcze potrzebne):

Sub ZmianaFormuly()

Dim i As Integer, j As Integer
Dim sFormula As String
Dim iNumerZnaku1 As Integer
Dim iNumerZnaku2 As Integer
Dim PierwszyNumer As Integer

For i = 1 To 300
sFormula = Cells(i, "S").Formula
iNumerZnaku1 = InStr(1, sFormula, "{", vbTextCompare)
iNumerZnaku2 = InStr(iNumerZnaku1, sFormula, ",", vbTextCompare)
PierwszyNumer = CInt(Mid(sFormula, iNumerZnaku1 + 1, iNumerZnaku2 - iNumerZnaku1 - 1))
For j = 0 To 4
sFormula = Mid(sFormula, 1, iNumerZnaku1) & PierwszyNumer + 5 + j & ","
iNumerZnaku1 = iNumerZnaku1 + 3
Next j
sFormula = Mid(sFormula, 1, Len(sFormula) - 1) & "},0))"
Cells(i, "S").Formula = sFormula
Next i
End Sub
Witam próbowałem odpalic to makro wyskakuje błąd
w linijce:
iNumerZnaku2 = InStr(iNumerZnaku1, sFormula, ",", vbTextCompare)

Czy wiesz może jak to jeszcze poprawić??

Makro powinno sie odnosić do kolumny F ale to już sam zmieniłem

Z góry dziękuje za pomoc
Michał Pawłowski

Michał Pawłowski Student, Szkoła
Główna Handlowa w
Warszawie

Temat: Makra i Visual Basic

Moje makro działa bo je testowałem w Excelu. Błąd, który pojawia się u Ciebie musi więc wynikać z innego sposobu jego wykorzystywania. Opisz dokładniej co robisz, kiedy wyskakuje błąd, jaki to błąd, to może coś poradzimy.

Temat: Makra i Visual Basic

Michał Pawłowski:
Moje makro działa bo je testowałem w Excelu. Błąd, który pojawia się u Ciebie musi więc wynikać z innego sposobu jego wykorzystywania. Opisz dokładniej co robisz, kiedy wyskakuje błąd, jaki to błąd, to może coś poradzimy.

Makro działa jednak działA ale w excelu 2007 operacja trwa około 7 minut natomiast w excelu 2003 nawet po 15 minutach excel dalej nie kończy pracy makra:(. Niestety w pracy mam do dyspozycji tylko excela 2003. Da się jakoś dostosować to makro bardziej do excela 2003?

Jeżeli nie ma inną prośbę myślę że można by to zrobić prościej pod excela2003 Wprowadziłem do kolumny QI w zakładce Rozchody do której odnosiło się poprzednie makro funkcje:
=SUMA(A9:E9) formuła jest w komórkach QI9:QI600
Oczywiście w komórce QI9 jest funkcja =SUMA(A9:E9) w QI10 =SUMA(A10:E10) i tak do QI600. Teraz może masz pomysł jak zrobić takie makro aby po włączeniu tutaj przesuwał się zakres w sumie o 5 kolumn do przodu w komórkach QI9:QI600 następny zakres powinien być =Suma(F9:J9) w komórce QI9 w komórce QI10 =Suma(F10:J10) itd. Do Q600
Później bym sobie tylko zrobił wyszukiwanie pionowo odnoszące się do tej kolumny.

Pozdrawiam!

Temat: Makra i Visual Basic

Działa już na excelu 2003 w odniesieniu do jednej komórki a pozniej AutoFill w dół:) Jedyny problem jaki został to taki że funkcja w komórce U2 przed włączeniem makra jest zatwierdzona tablicowo ctr+shift+enter natomiast po
użyciu makra już nie jest czy da się coś z tym zrobić aby była zatwierdzona tablicowo po użyciu makra???

Sub cotydzien()
Dim i As Integer, j As Integer
Dim sFormula As String
Dim iNumerZnaku1 As Integer
Dim iNumerZnaku2 As Integer
Dim PierwszyNumer As Integer

For i = 2 To 2
sFormula = Cells(i, "U").Formula
iNumerZnaku1 = InStr(1, sFormula, "{", vbTextCompare)
iNumerZnaku2 = InStr(iNumerZnaku1, sFormula, ",", vbTextCompare)
PierwszyNumer = CInt(Mid(sFormula, iNumerZnaku1 + 1, iNumerZnaku2 - iNumerZnaku1 - 1))
For j = 0 To 4
sFormula = Mid(sFormula, 1, iNumerZnaku1) & PierwszyNumer + 5 + j & ","
iNumerZnaku1 = iNumerZnaku1 + 3
Next j
sFormula = Mid(sFormula, 1, Len(sFormula) - 1) & "},0))"
Cells(i, "U").Formula = sFormula
Next i
Range("U2").Select
Selection.AutoFill Destination:=Range("U2:U607")
Range("U2:U607").Select
Range("U2").Select
End Sub
Michał Pawłowski

Michał Pawłowski Student, Szkoła
Główna Handlowa w
Warszawie

Temat: Makra i Visual Basic

Michal Żołyniak:
Jedyny problem jaki został to taki że funkcja w komórce U2 przed włączeniem makra jest zatwierdzona tablicowo ctr+shift+enter natomiast po
użyciu makra już nie jest czy da się coś z tym zrobić aby była zatwierdzona tablicowo po użyciu makra???

Tak. Zamiast właściwości Formula obiektu Range należy użyć właściwości FormulaArray. Innymi słowy zmienić jedną istrukcję kodu.

Z: Cells(i, "U").Formula = sFormula
Na: Cells(i, "U").FormulaArray = sFormula

Temat: Makra i Visual Basic

Dzięki wielkie działa:)

Mam jeszcze jedną prośbę takie makro też ułatwiło by mi bardzo pracę.
mam w komórce IO10 taką formułę =$IM$2*SUMA(A10:B10)/19

Chciałbym mieć makro które po włączeniu za każdym razem do zakresu sumy włączy kolejną kolumnę i zwiększy o 1 liczbe przez którą ma dzielić sumę

czyli włączenie makra zmieni formułę pokazaną powyżej następująco:
=$IM$2*SUMA(A10:C10)/20
kolejne włączenie:
=$IM$2*SUMA(A10:D10)/21

i tak za każdym razem

Wiesz może jak to zrobić???

Pozdrawiam
Michał Pawłowski

Michał Pawłowski Student, Szkoła
Główna Handlowa w
Warszawie

Temat: Makra i Visual Basic

Wiem jak to zrobić, ale na Twoim miejscu zastanowiłbym się, czy na prawdę do wszystkiego potrzebne są makra. Jeżeli można coś zrobić używając mniejszego nakładu pracy i wykorzystując zastane możliwości Excela, to może nie warto kombinować?
Poniżej wklejam sposób na rozwiązanie Twojego problemu bez użycia makr.


Obrazek


Wstawiłem do arkusza przycisk pokrętła (formant formularza) i jako łącze komórki wybrałem A1. W B1 jest formuła "=20+A1", w C1 "=3+A1. Używając pokrętła zwiększa się więc wartość komórki A1, a w ślad za nią B1 i C1. W komórce A6 kombinacja funkcji SUMA i PRZESUNIĘCIE, które z każdym naciśnięciem pokrętła rozszerzają lub zwężają zakres sumowania.Michał Pawłowski edytował(a) ten post dnia 31.05.11 o godzinie 21:34
Marek D.

Marek D. Kierownik projektu,
Sii

Temat: Makra i Visual Basic

Monika M.:
[...]
Przy okazji: kształty, a nawet WordArt można wykorzystać również jako, np. przyciski dla makr. W menu kontekstowym dla każdego wstawionego kształtu/pola tekstowego/elementu WordArt jest polecenie "Przypisz makro". Wykorzystując ciekawe gotowe formatowanie z Worda 2007 można zrobić atrakcyjniejszy przycisk niż ten, np. z formularzy[...]
Witam,
Dodałem kształ do arkusza i wykorzystałem go jako przycisk do uruchomienia makra.
Moje pytanie (bo nie wiem czy można, a brak mi już pomysłu):
Jak zrobić aby po najechaniu kursorem na przycisk pojawiał się dymek z podpowiedzią, coś a'la komentarz. Tak aby użytkownik wiedział np co oznacza ten przycisk.
Wiem, że można wybrać pole tekstowe i wpisać tekst, problem w tym, że mój przycisk to mała ikonka i niczego na niej nie wpiszę.
Nie wiem czy szukać w VBA czy w samym excelu.
Z góry przepraszam ewentualnie za offtopic
Marek D.

Marek D. Kierownik projektu,
Sii

Temat: Makra i Visual Basic

Inny problem z kropką i przecinkiem w Excelu 2007 - jak to rozwiązać?
Mam arkusz w którym formuły i makra opierają się na ustawieniach regionalnych w których kropka jest znakiem rozdzielającym jedności i części ułamkowe.
Wykorzystywane są zagnieżdżone formuły SEARCH i MID, a wartości jakie są zwracane opierają się na kopiowanym z plików txt tekście zawierającym m.in. interesujące mnie wartości liczbowe rozdzielone kropką. Wszystko działa pod warunkiem, że ustawienia regionalne są takie jak podałem wyżej.
Arkusz natomiast jest wykorzystywany również przez osoby mające zdefiniowany przecinek jako znak rozdzielający.
Muszą one każdorazowo najpierw dokonać zamiany kropki na przecinek i dopiero użyć arkusza.
Czy jest jakiś sposób aby ten proces zunifikować (dla osób "z kropką" i dla tych "z przecinkiem") ale tak aby zawsze pobierać dane wejściowe zawierające liczbę (w formacie xx.xxx czyli kropka rozdziela całości od części)
Marcin M.

Marcin M. korporacyjne zwierze

Temat: Makra i Visual Basic

Witam,

Mam tabele przestawna, ktora zassysa dane z innego dosc sporego pliku. Co jakis czas trzeba ja odswiezyc, zeby pobrac najnowsze dane. Niestety takie odswiezanie zjamuje sporo czasu, ze wzgledu na wielkosc pliku etc. Czesto nie ma takiej potrzeby, zeby odswiezyc dane w tabeli poniewaz ktos zrobil to juz wczesniej tego dnia. Jednak problem jest taki, ze ciezko to wiedziec.

Dlatego potrzebowalbym makra, ktore wstawialo by date i czas np do D5 po kazdy odswiezeniu danych w tabeli przestawnej. Niestety nie mam pomyslu na makro, pewnie dlatego ze moja wiedza VBA jest mocno limitowana.

Bylbym zobowiazany za podpowiedzi.

Pozdrawiam,
M.

Temat: Makra i Visual Basic

wklejasz w kod arkusza z pivotem:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
ActiveSheet.Range("d5").value = Now
End Sub


edit:
Swoją drogą to dziwne, że tyle czasu się to odświeża.Maciej Kraszewski edytował(a) ten post dnia 02.06.11 o godzinie 15:16
Marcin M.

Marcin M. korporacyjne zwierze

Temat: Makra i Visual Basic

Hejka,

To trwa tak dlugo, poniewaz plik z ktorego sa zasysane te dane ma ok 50k wierszy.

Wkleilem twoje makro, jednak z jakiegos powodu nie dziala. Po prostu nic sie nie dzieje. Jakies pomysly dlaczego? Ja niestety nie mam pojecia.

Pozdrawiam,
M.

Temat: Makra i Visual Basic

U mnie działa. Na pewno wkleiłeś tam gdzie trzeba?

Jak otworzysz edytor VBA (alt+F11) to będziesz miał w oknie Project Explorer swój projekt i tam grupy:

"Microsoft Excel Objects"

i jesli istnieja inne, to np.:
"Forms"
"Modules"

Musisz znaleźć w "Microsoft Excel Objects" arkusz z pivotem i tam wkleić ten kod (nie do modułu)

Jesli jednak masz tak zrobione, to niestety nie wiem czemu nie dziala

Następna dyskusja:

Excel + Visual Basic




Wyślij zaproszenie do