2012年8月30日木曜日

ExcelのVBA(保存用ボタンを作る、その2)

前回、VBAで保存用マクロを作成したんですが、そのときファイル名指定を相対指定で行いました。てっきり*.xlsファイルがある場所がカレントだろうと思っていたんですが、試しているとどうも動きがおかしく、*.xlsファイルのある場所以外によくファイルが保存されます。
調べてみたら、VBAではカレントという概念があまりないようで、基本的に絶対パス指定か、ファイル指定用のダイアログを使ってファイル名を絶対パスでもらうのが本来の考え方のようです。その後、詳しく記載してあるページが見つかり*.xlsファイルのある場所はカレントにはならないことがわかりました。(OSやOfficeのバージョンによっても一概にはいえず、My DocumentsになったりProgram File内のOfficeがインストールされている場所が相対指定の場合カレントになってしまうようです)Excelを起動しておき、そこから「開く」を行って*.xlsファイルを指定してやると、*.xlsファイルのある場所(ダイアログによりファイルを指定しています)がカレントになるようです。

でもこれでは困ります。更に調べると、ありました*.xlsのある場所(パス)を指定する方法が。


    fnsave = ThisWorkbook.Path + "\Setting.txt"
    numff = FreeFile
    Open fnsave For Output As #numff


ThisWorkbook.Pathというのが、*xlsファイルのある場所(パス)示すそうです。これでうまくいきそうです。

2012年8月15日水曜日

ExcelのVBA(保存用ボタンを作る)

はっきりいって使い方として邪道だとは思うんですが、Excelのシートで各種プログラムの設定ファイルなんかを操作したくなります。(自分ならSakuraエディタでやるほうが好きなんですが、普通の人にはテキストエディタはちとハードルが高い)
それならばと日本人には使い慣れたEXCELでテキストファイルを保存するようにすればいいでしょうと、ちょっとVBAマクロを調べてみました。意外と簡単にできました。


Sub Save()
    fnsave = "MMM\Setting.txt"
    numff = FreeFile
    Open fnsave For Output As #numff
    For i = 1 To 2
        temp1 = Cells(i, 1)
        temp2 = Cells(i, 2)
        Print #numff, temp1, temp2
    Next i
    Close #numff
End Sub

Sub Save2()
    fnsave = "initialize.txt"
    numff = FreeFile
    Open fnsave For Output As #numff
    For i = 1 To 2
        temp1 = Cells(i, 1)
        temp2 = Cells(i, 2)
        Print #numff, temp1, temp2
    Next i
    Close #numff
End Sub

スクリプトが2個作ってありますが、それぞれのシートにボタンを張っておき、それぞれのスクリプトを設定するだけです。EXCELのBookの位置を基準にフォルダもかえて保存できちゃいます。これなら普通の人でもプログラムの設定を簡単にできるでしょう。(GUIつくるのがいいんだけど、社内ツールなんでそこまで金をかけちゃいられない)
ただOffice2010でやったんですが、マクロ作成の「開発」機能がデフォルトでオフになっていて、メニューの結構深いところにいってオンにしないとだめなんですね。ちょっとびっくりしました。

2012年8月12日日曜日

HDDの交換、その後

HDDを交換して、Windows7からインストール。かなり時間がかかりましたが、やはりクリーンインストールすると動きが快調ですね~。
以前はどうも動きが怪しいところがよくあったんですが(Sakuraエディタがなぜか保存時に異常終了する。chkdskしてHDD修復後に何回か再インストールしたんですが、どうしても治りませんでした。)、今は快調に動いています。いったいどこが壊れていたのやら。
後、VMplayerがどうしても動かなくなっていたんですが、システム入れなおしたらまた動くようになりました。これはうれしい。(ただ、その他のアプリは普通に動いていたんですよ。それでなかなか面倒くさい再インストールに踏み切れなかった)