インストールレスプログラミング( ´ー`)

VBA , JavaScript , HTAなど 365アプリはインストール必要ですが、仕事に無いケースはほぼないから(・_・;)

VBScript ファイル一覧続き

VBScriptのエディタとしてVBAでいつも使っているVBEditorがいいという話をthomさん達から聞きましたので,

早速職場でも試してみました。

使い慣れた部分のおかげや,参照設定無でも十分コーディングの手助けをしてくれますし,

ローカルウィンドウがやっぱりいい。

f:id:chemiphys:20170513222153p:plain

SpecialFolderとしてどんなものがあるか,とかプロパティをいろいろ見れるところとか とってもいいですね。

VBEditorにミスの指摘とかをずいぶんしてもらえるので,普通のテキストエディタで打つだけで精一杯の時より,ずいぶん余裕が出てきます。

あと,モジュールが使えることもとてもありがたいですし,

前回とほぼ同じですが,無駄とかあったので書き直してみました。

Option Explicit

call getAllFilename


Sub getAllFilename()
    Dim objFS 'As Object
    Set objFS = CreateObject("Scripting.FileSystemObject")
    
    Dim objWshShell' As Object
    Set objWshShell = CreateObject("Wscript.Shell")
    
    Dim objFolder' As Object
    Set objFolder = objFS.GetFolder(objWshShell.CurrentDirectory)
    
    Dim objFile' As Object
    Dim strFileName' As String
    
    For Each objFile In objFolder.Files
        strFileName = strFileName & objFile.Name & vbCr
    Next
    
    MsgBox strFileName

End Sub

msgbox "Test"

これを実行すると,callに従い,一度サブルーチンを実行した後,サブルーチンの部分は飛ばして下のメッセージボックスを実行する。

全く知識が無いので,

「へ~ そう動くんだなぁ」

と面白がれます。

いろいろと制限多いらしいですし,Like演算子が使えないのは,その便利さを最近実感していたところなので残念ですが,

十分高機能とも思える。

VBAとも連携できるのでしょうし,使い方だろうと思えます。

もうちょい遊んでいられそう。

VBScript ファイル一覧を取得

あるフォルダに入っているデータすべてに対して調査をしたい。

こんな処理をするのが私は好きなんですが,VBScriptでできるのかなぁというのを試してみました。

このコードを保存した場所のファイル一覧をMsgBoxに吐き出すスクリプトです。

set objFS=CreateObject("Scripting.FileSystemObject")

dim objWshShell
set objWshShell=WScript.CreateObject("WScript.Shell")
set objFolder=objFS.GetFolder(objWshShell.CurrentDirectory)

for each objFile in objFolder.Files
	strFileName=strFileName & objFile.Name & vbCr
Next

msgbox strFileName

大文字小文字がしっかりしていないのは許してください。適当です。

普通のエディタでコード打ってます。

いとも簡単にできるものなんですね。

しかも私が大好きなFor eachでできるのはとてもいい。Dir関数でやるの苦手なんです。

これって同じ風にExcelやPowerpointのVBAでもできるのかな。

できると,楽だなぁ。

このコードはほとんどは本を見ながら打ったものです。

VBScriptの本 買いました。

[改訂版] VBScriptポケットリファレンス (POCKET REFERENCE)

[改訂版] VBScriptポケットリファレンス (POCKET REFERENCE)

目からうろこが落ちる感じ。

数ページ進んだらもう クラスのことが書いてあります。

ExcelやPowerpointのように,元々が高性能な基盤があり,それを補助するならクラス無くてもやっていけることも多々あるんでしょうけど,

土台があんまりない場合はクラスは避けて通れないのかなぁと漠然と思ったり。

いろんな勉強になりそうです。

他言語はちょっと覚える気にはならないんですが,VBAの親戚あたりならやる気になる。

VBScript逆引き大全500の極意

VBScript逆引き大全500の極意

こちらの本も買いました。二冊で十分勉強になりそう。

こちらの本は井川はるきさん

今となっては極めて高いあのExcelVBA本を書いた方が携わられた本なのかな。

勉強にもってこいです。

あと,CreateObjectが苦手な私にはその辺の克服のためにもVBScriptはいい気がします。

暇をみつけてちょこちょこやっていこう。

VBScript を少しずつ

VBScript でちょこっとコードをメモ帳で書いて,職場で試してみると動きました。

ってことは使えるって思っていいよなぁと思い,少しずつ書いてみることに。

ちゃんとやったことはないので,VBAとの違いを楽しみながら遊んでみようと思います。

デスクトップにあるBook1.xlsmってファイルを開いてみる。

option explicit

dim xlapp
Set xlapp=CreateObject("Excel.Application")

xlapp.Application.visible=true

Dim WS, SP 
Set WS = CreateObject("WScript.Shell") 
SP = WS.SpecialFolders("desktop") 

dim WB
xlapp.workbooks.open sp & "\Book1.xlsm"
set WB=xlapp.workbooks(1)

WB.worksheets(1).cells(1,1).value="TEST"

上のコードをメモ帳にでも貼って,拡張子vbsのファイルを作ればコードは完成です。 test.vbsみたいな感じ。


activeworkbook.path の類が使えないんですね・・。

でもネットでちょっと探したらすぐSpecialFoldersの使い方が出てきました。やっぱりネットはアリガタイ。

Illustratorでもコードが使えればという気持ちも持ちつつ,コードの土台としてExcelかWordかPowerpointを選ばなきゃいけないことに抵抗がある時もありましたので,

学びたいですね。

VBScriptのいい本ってどれだろうなぁ。

WSHで調べないといけないのかな??

その辺からよくわかっていませんが,ちょっと楽しそうだなぁと思っているところです。

Powerpointとかも外部から操作して遊べるのかな。。そのあたりができ始めれば,ブログ名詐欺じゃなくなってくる・・かな(;´・ω・)

調べてみたら,どんどん出てきますね。

コードを保存している場所?をメッセージボックスで出力

option explicit
dim objWshShell

set objWshShell=WScript.CreateObject("WScript.Shell")

msgbox objWshShell.CurrentDirectory

パワーポイントも開いてみた

dim pptapp
set pptapp=createobject("powerpoint.application")

pptapp.visible=true

dim PS
pptapp.presentations.open sp & "\3択基本①.pptm"
set PS=pptapp.presentations(1)

小文字で書いても動くかやってみたら動いた。

vbaな気持ちで書いていくといろいろできそうだ。

夢が広がる。

Powerpoint VBA 上付き文字の調整マクロ(イベント利用)

効率的には 以前書いた

chemiphys.hateblo.jp


こちらのほうが,絶対使い勝手はいいんですが,改善させれれば面白いかもなぁと思いイベントと絡めて上付き文字の相対位置を50%にするマクロを書いてみました。

今,酸化還元の教材作成中で,とにかくひたすら上付き文字が登場します。

電子のe^-とか MnO_4^- とかです。_の直後は下付きにしたい,^の直後は上付き文字にしたいやつです。

平打ちして後で変換させてもいいのか。。また考えるか。。

実用的ではないにしろ,イベントの使い方とか,自分が完璧に忘れていたのでそういう意味でも書いておきます。

標準モジュール

Option Explicit
Private cls As AppEvent

Sub スタート()

Set cls = New AppEvent
Set cls.App = Application

End Sub

クラスモジュール AppEvent.cls

Option Explicit

Public WithEvents App As Application

Private Sub App_WindowSelectionChange(ByVal Sel As Selection)
    On Error GoTo Escape
    
    Dim tr As TextRange
    With Sel
        For Each tr In .TextRange.Runs
            If tr.Font.Superscript = msoTrue Then
                tr.Runs.Font.BaselineOffset = 0.5
            End If
        Next
    End With
    Exit Sub
Escape:
End Sub

パワーポイントの場合は残念ながら自動的にイベントは発生しませんので,それをスタートさせるために スタート というマクロを標準モジュールに準備
スタートを実行させた後はしばらくはイベントが発生しています。表現が曖昧ですみません。

選択部分が変更されたとき,というイベント部分にコードを書きこんでいます。
選択部分を限定するのが面倒だったため,今回は 極めて大雑把な方法でエラーを無視しています。 On error Goto でふっとばしています。

選択部分に 上付き文字を見つけたら,相対位置を50%にするよ,というのが中身です。 (BaselineOffset のとこ)

動かしているとこんな感じになります。
f:id:chemiphys:20170505130216g:plain

微妙な違いが見えますでしょうか。。事前に上付き文字にしている(相対位置30% デフォ)が 選択し終わったら上にすこーし上がります。(相対位置50%)

イベントを利用しているのである程度自動化でき・・る・・・。

まぁ,最初に書いたように,作り終わった後まとめてやればいいことなんです。

または,平打ちしたものを編集させるようにマクロを組むのもいいですよね。。そちらの方がいいかなぁ。

上付き文字を適用したときをイベントで捕捉して勝手に50%にする,というのを本当はやりたかったんですが,そういうイベントは見つけきれませんでした。

何かの役に立つこともあるかもしれないということで,これ自身は実用性に乏しいですが,書いてみました(;´・ω・)

GW

教材作成が捗ります(ΦωΦ)

職場の方々に甘やかしてもらい,休日をきちんと取らせてもらっていますので,その分教材作成中。

PowerpointVBAのほうは今のところは全く捗りません。

夏休み近くまで無理なのかなぁと正直思っていて,そこまで1,2か月ブログ名&アドレス詐欺の日々を甘んじて過ごします。

OneNoteの教材作成のツールとしてはPowerpointは大活躍中です。


OneNoteには,印刷という手段を通してどんな形式のデータであってもプリントアウトできるものはOneNoteに落とし込んでいけます。

ただ,私のように授業に使うとなる場合,

みんなに同じところを見てもらうということが必要な場合があります。

プレゼンで視線を誘導する際と同じだと思いますが,自分の指示が明確でクラス40人全員にムリなく伝わる,という前提を作らないといけない。

10インチのタブレットPCを生徒は使っています。画面は必要最小限のサイズ。

そして,同じ情報を電子黒板に映して,説明をするんですが,電子黒板に映したものも生徒から見えないといけない。

私の決まりは

・パワーポイントで 16:10のスライドサイズで32pt以下の文字を使わない。
・基本1スライド1スライドで内容を区切る。(画面を頻繁に切り替えながら説明するのは,説明側はいいんだろうけど聞く側からするときっとうざい。)
文章部分には装飾は極力せず,OneNoteの蛍光ペンや通常のペンで生徒自身が大事なところを装飾できるように配慮するが,Boldだけは自分に許容する。

です。32pt縛りがほんっとに厳しい(;´・ω・)文字の色も基本はゆだねれるようにするためにできるだけつかわないのもきつい。。

そしてこれに,ページ数やそのページの内容を示す一文を付け加えるので,キビシイデス。

ページ数や内容の一文を示す,というのはとても大事なんですよね。○○の教材の,▲▲ページを皆さん見てくださいね,と言ったときにみんなが迷わずそこを見れないとはじまらない。

聞きそびれた子も,電子黒板のその部分を見て,あぁ今はこれをやってるんだなぁと思えないといけない。

電子黒板はとても便利ですが,
 ・小さいものは見えない。
 ・ICTの良さは素早く見せれることだろうけど,素早く切り替わると結局受ける側には何も残らない。
    ↓
 ・素早く切り替えたりするなら,電子黒板で表示するものについては,生徒の手元にも同じものを配布しておくことが前提。任意に戻って確認できるように授業を設計しないといけない。


ICT機器は制約も多いです。うまく付き合わないとせっかくの便利グッズの長所が出ず短所だけが出ます。。生徒のタブレットに配る教材は著作権面ほんっとうに厳しくて,泣けますし。。

でも,そこはやらないとなぁと思っているんです。。

f:id:chemiphys:20170504004026p:plain

中央部分にはさすがに耐えきれなくて黄色で塗っちゃってます。どこかアクセントが無いときつくて。。

本来は空白をもっと活用して,見やすくするべきですが,そこは残念ながら文字サイズに負けて活かせていません。

文字もタブレットで見るだけならもっともっと小さくていいんですが,電子黒板で表示して,教室の後ろからでも見えるように,とすると32pt以下はやはり駄目。

著作権表示等,タブレットで見れたら十分な情報はそれなりに小さくすることはありますが,説明する内容については,

  見えないなら書いていないのと同じ。

と思っているので,小さくはできません。


アクセントとして,教材のどこかにちょっと憩い部分をつくりたいなぁと思い,

イラストACの しげるさんの白ネコさんを最近借り始めました。

f:id:chemiphys:20170504011130p:plain

www.ac-illust.com

とてもかわいく,シンプルでいろんな表情があるので,大のお気に入りです。

私は犬派で,自分が描く方は,カクカクした犬を書きます。カクカクしてますので,フレーミーを思い出す子が多いようですが,全く別。比べたら全然違うことにみんな気づいてくれます。

画力が無いので,せっかくイラストACのプレミアム会員になっているので,そこは使わせていただくことにしました。(ΦωΦ)


さて,書きたいことにたどり着かないで余談だらけになってきたんですが,

Excelの関数を調べてて,2016でけっこう関数が追加されてることに関心したので,書き始めたところでした。

dekiru.net
こちらのページを眺めていて,
CONCAT関数の使い方。複数の文字列の連結にセル範囲を指定できる! | Excel関数 | できるネット
TEXTJOIN関数の使い方。区切り記号を挿入しながら複数の文字列を連結する | Excel関数 | できるネット
IFS関数の使い方。複数の条件を順に調べた結果に応じて異なる値を返す | Excel関数 | できるネット
SWITCH関数の使い方。複数の値を検索して一致した値に組み合わせられた結果を返す | Excel関数 | できるネット
このあたりの関数に強く惹かれました。

職場がOffice2016を採用してくれていますし,家では365を使っているので,安心して使えます。

vba Split関数好きとしてはTEXTJOIN関数とか魅惑的すぎてしょうがないところです。

このページにたどり着いた理由は,IF文で評価する部分とTrueまたはFalse部分で同じ長い関数を書くことがあってあれがいやだなぁと長らく思っていますので,それを解決する方法ないのかなぁと思ったのがきっかけです。

それは解決できませんでしたが,多くの便利そうな関数に出会ってとても得した気分になり,教材作成をちょっと一呼吸置いて,こちらに書きに来ました。

戻ります(;´・ω・)

雑記

イラストAC で,自分が使えそうな素材をたくさんダウンロードしたりする日々です。

職場ではネットは使えませんから,保存,整理して使いたいときに使いたい画像に行きつけるように,,としていました。

epsにしていたらOfficeで読めると思って集めていて,実際貼り付けてみると表示されないものもあり,(;´・ω・)すこしがっかりしたところです。

でも,aiやeps形式ならIllustratorで少し修正することもできますので,その形式は大事。

自宅とかでならIllustratorから切り取って貼り付けて,と使いたい部分だけとかでもいける。

職場ではそうはいかない・・(;´・ω・)ドウシタモノカ


pngは安定して読めるので,それじゃあpngとaiまたはepsの二種類を常に持っとけば,便利なのかなぁとか

ふらふらと考えているところです。

無駄な作業にはなったのですが,

途中でai形式をeps形式に変換する,という操作をIllustratorのスクリプト機能で処理していました。

そのスクリプトはJavaScriptで書かれていたんですが,バージョンを一つ付け加えるとかならコードは読めるので,簡単にできた。

ほうほう,JavaScriptができればIllustratorにスクリプトが使えるのかぁと少し調べてみると,そこにVBScriptも使えるよ,という話がありました。

これは興味をそそる話です。

Illustratorはまだまだまったく使えていない現状なのですが,違う方向から惹かれることに出会う。

興味としてはとりあえずai形式をIllustratorでたくさん読ませておいて,それをpngで書き出して閉じるという操作をさせてみたい。

それができれば私の作業はかなり捗りそう。


まったくもって,横道のさらに横道で,手を出すべきところではありませんが,

いつかそれが役に立つ時もありそうですし,そのうちいろいろ試したいなぁと思う出来事でした。

ブログ名に偽りあり状態でしばらく来ていますが,まだVBAで遊べる日は遠い(;´・ω・)

自転車操業中。。

EXCEL HYPERLINK関数 続き小ネタ

数日前HYPERLINK関数について書きました。

とても便利だなぁと思っていますが,数式を併用することで当たり前ではありますが,少し便利な機能にもなりました。

f:id:chemiphys:20170427221229p:plain

上の黄色いセルは,色ついているだけで何の工夫もありません。日付っぽいのを入れてくれたらExcelが勝手に日付に変えてくれる。

その下のセルには次の関数

=HYPERLINK("#"&TEXT(K10,"mmdd")&"!a1",TEXT(K10,"mmdd") & "へジャンプ")

K10というのが黄色いセルです。

この仕組みだと,黄色いセルに伴いハイパーリンク先が変わるので,

ついVBAが使えると,VBAでページジャンプ機能とか作ってしまうんですが,とても簡単な関数で選べるページジャンプ機能になります。

もちろん,入力規則のリストを併用して,ジャンプ先を日付ではなく,特定のリストから選ばせることも簡単にできますね。

やっぱりExcelはすごいなぁ 便利だなぁと思う今日この頃です。

方法を制限されなければ,面倒なのでちゃちゃっとマクロで作る方に逃げちゃうわけですが,関数もいろいろ眺めるとまた新しい発見がありそうです。

続きの小ネタでした。

まだ,パワーポイントのパの字も触れない(;´▽`A``

授業の基本の教材はパワーポイントどんどん使っていますがVBA遊びまでは手がまだ戻りません。

授業で話したネタの一つとして,好きなページへのリンクを貼っておきます。

www.ptable.com

こちらのページですが,元素の導入のあたりで,授業中にも生徒のみんなの端末にアドレスを送って紹介をしています。

ウィキペディアに飛べる機能も面白いですし,各元素にまつわる動画に飛べる機能がスゴイ。

f:id:chemiphys:20170427222111p:plain

左上のウィキペディアとなっているところをクリックするとVideoとか選べます。

普通手に入らない元素についての動画が見れる。

元素の導入にうってつけのページです。

また,Photosを選ぶとセオドア・グレイさんのWeb版世界で一番美しい元素図鑑に行けます。

ここもまた,十分に面白い。