• breakwater
    DEFINITION: (noun) A protective structure of stone or concrete; extends from shore into the water to prevent a beach from washing away. SYNONYMS: jetty, seawall, bulwark, groin, mole. USAGE: The clamor of Benares, oldest of all earth's cities awake before the Gods, day and night, beat round the walls as the sea's roar round a breakwater. Discuss […]
February 2009
M T W T F S S
« Nov   Mar »
 1
2345678
9101112131415
16171819202122
232425262728  

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.

Bookmark and Share

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>