Discussion:
[VB] Excel - zamiana czcionki (wszędzie)
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Piotr Matuszewski
2003-09-04 16:19:49 UTC
Permalink
witam

mam problem - jakim poleceniem zamienic czcionki w skoroszycie excela we
wszystkich arkuszach i we wszytskich obiektach (także w wykresach, tj na osiach
i tytułach i legendzie itp)

np. z times new roman na verdanę

przy czym wielkośc czcionki powinna stanowić X% (np. x to 80% lub 70%) wielkości
czcionki która juz jest, powinny byc zachowane wszystkie inne atrybuty jak
boldowanie czy italic lub underline

prosze o pomoc
pozdrawiam
pm

ps. jestem dość sałby z VB więc nawetfragment kodu który bym podał bedzie do
niczego
pxd74
2003-09-04 19:51:32 UTC
Permalink
Musisz przejechać po wszystkich tych obiektach i po prostu zmienić
rozmiary tych czcionek.
Dopisek:
W przypadku wykresów wystarczy tylko zmienić czcionkę Obszaru wykresu
(ChartArea), a z tego co zaobserwowałem zmienia się czcionka we wszystkich
obiektach wewnątrz wykresu.
--
Pozdrowienia
***@poczta.onet.pl
pxd74
2003-09-05 17:07:38 UTC
Permalink
2. jak ustalić wielkośc nowej czcionki na % wielkości tej co była
Jeżeli masz we wszystkich komórkach arkuszu taką samą czcionkę, to możesz
zastosować ten kod:

ActiveSheet.Cells.Font.Size = ActiveSheet.Cells.Font.Size * 0.7
dim a as long
For a = 1 To Worksheets(1).ChartObjects.Count
Worksheets(1).ChartObjects(a).select
Next
No i dobrze.
Ale ja bym Ci radził w ten sposób:

Dim a as long
For a = 1 To ActiveSheet.ChartObjects.Count
ActiveSheet.ChartObjects(a).ChartArea.Font.Size = 11.5
Next
--
Pozdrowienia
***@poczta.onet.pl
Piotr Matuszewski
2003-09-05 22:49:34 UTC
Permalink
no to napisałem taki kod:

*********************************

Sub czcionka()

Dim a As Long
ActiveSheet.Select
For a = 1 To ActiveSheet.ChartObjects.Count
ActiveSheet.ChartObjects(a).ChartArea.Font.Size = 8
Next

ActiveSheet.Cells.Font.Size = ActiveSheet.Cells.Font.Size * 0.7

Range("A1:IV65536").Activate
With Selection.Font
.Name = "Verdana"
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
End With
End Sub

*********************************

makro wywala się na:
ActiveSheet.ChartObjects(a).ChartArea.Font.Size = 8

komunikat:
Object does not support thi property or method

ponadto coś mi sie wydaje że wilkość czionki ustali się na 8 wszędzie (bo jezeli
w excelu ustali się w obszarze formatowani czionke to taka bedzie wszedzie, a
mnie zależy by tylko był inny format czcionki np. Verdana, ale rozmiar
proporcjonalnie mniejszy)

no i nie działa takie coś jak zmian wielkosci czionki, cały czas są te same
rozmiary co były
pxd74
2003-09-08 10:43:39 UTC
Permalink
Post by Piotr Matuszewski
ActiveSheet.ChartObjects(a).ChartArea.Font.Size = 8
No tak. To mój błąd. Powinno być:
ActiveSheet.ChartObjects(a).Chart.ChartArea.Font.Size = 8

Na drugi raz możesz skorygować takie błędy używając Przeglądarki obiektów
(F2) i tam od razu byś zauważył, że obiekt ChartObject nie ma właściwości
ChartArea.
Post by Piotr Matuszewski
ponadto coś mi sie wydaje że wilkość czionki ustali się na 8 wszędzie (bo
jezeli w excelu ustali się w obszarze formatowani czionke to taka bedzie
wszedzie, a mnie zależy by tylko był inny format czcionki np. Verdana, ale
rozmiar proporcjonalnie mniejszy)
Zdecyduj się czy korzystasz z obiektu Selection czy z tego co ja ci
napisałem. Jeśli z tego drugiego, to użyj instrukcji With w ten sposób:
With ActiveSheet.ChartObjects(a).Chart.ChartArea.Font
.Size = .Size * 0.8
.Name = "Verdana"
' itd.
End With
Post by Piotr Matuszewski
no i nie działa takie coś jak zmian wielkosci czionki, cały czas są te
same rozmiary co były
To dlatego, że nie masz we wszystkich komórkach tej samej czcionki.
Wtedy zamiast ActiveSheet.Cells.Font musisz przejechać wszystkie komórki,
np. w pętli For Each lub For ... To
Ale uważaj, bo to będzie długo trwało, szczególnie jeśli bedziesz korzystał
z Selection. Lepiej ograniczyć ten obszar np. do ActiveSheet.UsedRange i
koniecznie wyłącz odświeżanie ekranu (Application.ScreenUpdating).
--
Pozdrowienia
***@poczta.onet.pl
pxd74
2003-09-08 20:44:17 UTC
Permalink
racja czcionki sa tzrech, czterech róznych typów.
1. najpierw zamienię czcionę na ustalony typ
2. potem zmienię jej rozmiar
3. zmienię czcione wykresów na ustalony typ i
4. potem zmienie rozmiar czcionki w wykresach
Sub czcionka()
Dim a As Long
Range("A1:IV65536").Activate
W stosunku do wielu komórek nie stosuj Activate, jak powyżej, tylko raczej
Select
With Selection.Font
.Name = "Verdana"
Wyrzuć te trzy linie poniżej, są niepotrzebne
End With
Range("A1:IV65536").Activate
With Selection.Font
.Size = .Size * 0.8
End With
Wyrzuć tą linię poniżej, jest bez sensu i niepotrzebna
ActiveSheet.Select
For a = 1 To ActiveSheet.ChartObjects.Count
With ActiveSheet.ChartObjects(a).Chart.ChartArea.Font
.Name = "Verdana"
Wyrzuc te dwie linie poniżej, są niepotrzebne
End With
With ActiveSheet.ChartObjects(a).Chart.ChartArea.Font
.Size = .Size * 0.8
End With
Next
End Sub
no takie coś mam i dalej się sypie, jeszcze nad tym popracuję i dam znać
jak do czegoś dojdę
Daj znać jaki błąd i na jakiej linii
ps.jak wyłączyc odświerzanie ekranu? i w czym to przeszkadza?
Przecież Ci napisałem: Application.ScreenUpdating. Ustawiasz ten parametr na
True jesli chcesz włączyć odświeżanie ekranu, a na False gdy chcesz
wyłączyć. Wyłączenie odświeżania ekranu powoduje, że użytkownik nie widzi co
robi makro, tzn. ekran Excela się nie zmienia. Powoduje to również
przyśpieszenie makra, szczególnie jeśli używasz Selecta i Activate.
--
Pozdrowienia
***@poczta.onet.pl
pxd74
2003-09-10 13:23:20 UTC
Permalink
ale problem może być w tym że arkusze są duże i czesto jes tak że zapycha
sie pamięć i nawet jak nie używam makr to krzyczy że "nie można zastsować
nowych czcionek"
to jest bug tego *** programu
To nie jest bug, tylko jest ograniczenie spowodowane dostpną pamięcią na
Twoim komputerze.
Tu masz opisane dlaczego tak się dzieje i jak temu zaradzić:

XL2000: Error Copying Worksheets Containing Charts
http://support.microsoft.com/default.aspx?scid=kb;en-us;215573

XL97: Błąd "Za mało pamięci" podczas dodawania wykresu do skoroszytu
http://support.microsoft.com/default.aspx?id=168650
tak BTW - wielkośc czcionki zmienia się jak teraz patrze tylko w wykresach
(i przyjmuje wartości ułamkowe, jak można je zaokrąglić?) - ale w arkuszu
w komorkach jest ta sama wielkośc choć juz jest nowa czcionka
Funkcja Round
może znasz coś na takiego buga - żadne serwice packi nie pomagają, albo
jak zrobic żeby makro podzielić na części np wykresy (żeby łapał po 1/5
liczby wykresów, potem kolejną 1/5 i tak do konca i aby uruchomic makro 5
razy po sobie z mozliwością zapisu pliku - może tu tzreba bedzie zrobic
pięć makr) a obszar żeby szedł co 5 kolumn
Na problemy z pamięcią pomaga zamknięcie skoroszytu i jego ponowne
uruchomienie.
Możesz wpisać w środku pod koniec pętli For ... Next linię:
If a = 5 then Exit Sub
a nastepnym razem wpisać w pętli For a = 6 To ....
i makro się zatrzymuje na
ActiveSheet.ChartObjects(a).Chart.ChartArea.Select
Bo powinno być:

Sub wyłAutoskal()
Dim a As Long
For a = 1 To ActiveSheet.ChartObjects.Count
ActiveSheet.ChartObjects(a).Select
Selection.AutoScaleFont = False
Next
End Sub

lub

Sub wyłAutoskal()
Dim a As Long
For a = 1 To ActiveSheet.ChartObjects.Count
With ActiveSheet.ChartObjects(a).Chart.ChartArea
.AutoScaleFont = False
End With
Next
End Sub
jeszcze nad tym posiedze, musze zrobic jeszcze if lub case żeby nie
zmieniał wielkosci czcionki jak jest ta na którą ma byc zamiana (bo jak
wykonałem makro kilka razy to w wykresach pozostała czconka 2,25, a w
komórkach ta sama :) )
To dlaczego nie pracujesz na kopii tylko na oryginale???
--
Pozdrowienia
***@poczta.onet.pl
Piotr Matuszewski
2003-09-10 21:04:21 UTC
Permalink
makro działa i jego efekty sa następujace: zmienia rozmiar w
komórkach
jesli wilkosci czcionek sa takie same we wszytskich komorkach
jeśli sa rózne rozmiary to nic z tego - makro zmieni tylko typ
czcionki, a nie ustawi rozmiaru na % poprzedniego
na dole postu ma rozwiązanie.
no to przelece te wszytskie komorki, eh.. :))

za jakis czas napisze makro i zobaczymy co z tego wyjdzie

pozdro
pm

pxd74
2003-09-08 10:31:46 UTC
Permalink
Post by pxd74
Dim a as long
For a = 1 To ActiveSheet.ChartObjects.Count
ActiveSheet.ChartObjects(a).ChartArea.Font.Size =
ActiveSheet.Cells.Font.Size * 0.7
Next
Nie, no przecież ActveSheet.Cells.Font odnosi się do czcionki na arkuszu, a
Ty chcesz zmienić czcionkę na wykresie, więc po prawej stronie równania
powinno być to samo co po lewej, tylko pomnożone przez 0.7
--
Pozdrowienia
***@poczta.onet.pl
Loading...