• arrogate
    DEFINITION: (verb) Seize and take control without authority and possibly with force; take as one's right or possession. SYNONYMS: take over, usurp, seize, assume. USAGE: The human and fallible should not arrogate a power with which the divine and perfect alone can be safely entrusted. Discuss […]
February 2009
M T W T F S S
« Nov   Mar »
 1
2345678
9101112131415
16171819202122
232425262728  

Word of the Day with a twist – www.youtube.com/user/hotforwords

simple VBA is good because it's good and simple

Od pewnego czasu nie daje mi spokoju fakt, że nie umiem korzystać z VBA. Czasem coś prostego sobie napiszę, częściej nagram jakieś makro i później usunę połowę żeby jako-tako działało, ale nie spędzam aż tyle czasu na powtarzalnym klikaniu po excelu czy wordzie, żeby mi się chciało coś z tym zrobić.

Za to EK przeżyła traumę widząc po raz kolejny jak drukarka wypluwa po 3 strony na raport lektora tylko dlatego, że znowu “obróciła się” orientacja strony. Same kłopoty z tą orientacją.

Mamy skoroszyt z kilkoma arkuszami (dla niektórych lektorów będzie to raczej kilkanaście) – po jednym na grupę i na końcu 2 podliczające wcześniej wpisywane dane. Plik krąży sobie mailowo* pomiędzy lektorem a szkołą i po każdych zajęciach jest uzupełniany o nowe dane. Magicznie coś od czasu do czasu się przestawia i zamiast ładnie drukować się na landscape’owo ustawionej A4 – raport wychodzi w kawałkach.

Fuj.

Przy okazji doczytywania o VBA skleciłem takie coś

Sub WorksheetTheRightOrientationForcedLoop()
Dim Worksheet_Count As Integer
Dim I As Integer
Dim answer As Variant
Worksheet_Count = ActiveWorkbook.Worksheets.Count
czyli definiujemy: Worksheet_Count czyli numer Arkusza i I – powtórzenie i answer/odpowiedź – jako wariant (pytać będziemy tak/nie
Pętlą powtarzamy całość dla każdego arkusza z kolei, za każdym razem pytając czy uczestnik chce go zmienić czy nie (niektórzy lektorzy mają arkusze zliczające gdzieś pomiędzy “raportami”.
For I = 1 To Worksheet_Count
answer = MsgBox(ActiveWorkbook.Worksheets(I).Name, vbQuestion + vbYesNo, "Should I change")
If answer = vbYes Then
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.Orientation = xlLandscape
End With
Range("A1:K29").Select
ActiveSheet.PageSetup.PrintArea = "$A$1:$K$29"
ustawiamy orientację i dla pewności jeszcze obszar wydruku “na sztywno”.
ElseIf answer = vbNo Then
End If
Next I
End Sub
i kończymy pętlę
i idziemy do domu
i nawet działa :)

*dla niektórych lektorów – tych których nie przeraża odrobina techniki plik wisi sobie na google docs.