2011年4月29日金曜日

Excelがおかしくなったんだけど。

んー、GWだからどこ行っても混雑しているだろーと、タスクをこなそうと事務所に来たわけです。
しばらくは順調にExcelのマクロを組んでいたのですが、しばらくするとExcelがセーフモードでしか起動しない状態に。(ちなみにExcelは2007)
しかも、悪いことにExcelのアンインストールをしようとしても1704とかってエラーが発生してそれもできない。
最悪。
こんなことのためにGW来たのではない!
で、まずはどうしてもアンインストールしたかったので、あえてCDからオフィスを「Excel抜き」でセットアップしたあとにOfficeをまるごとアンインストール。
したらアンインストールは出来たので、安心してExcelをインストール。
で、開発を再開!と思ったら、またセーフモードじゃないと起動できない。

ん~、困った。
きっと、あやしい起動情報がレジストリに保存されているはず。
そこで、再度、Officeをアンインストール。
そのあと、Excelで検索して該当したレジストリを削除!
※但し弥生とかその編のソフトに絡んでそうなレジストリは削除しちゃだめだけど。
きっと真似はしない方が良いと思います。

で、起動情報あたりのヤツがきっと削除できたんでしょう。
再度Officeをインストールしたら無事に起動しました。

ぁ~、変なとこに時間を使ってしまった。

2011年4月25日月曜日

用語集が欲しくてpukiWikiをいれてみた

自社サービスを作るにあたって、そのサービスに関わる業務の用語集が欲しくなりました。
できればその用語集はサービスをリリースした後に有効活用できるものが良い!ということで、PukiWikiを導入してみました。

んー、設定は簡単!
PukiWikiからダウンロードして、展開。
そして、レンサバにディレクトリこさえて、そこに展開したものをアップロードして、INSTALL.txtに従ってパーミッションを設定すれば、すぐ使えた。
素敵。

で、トップページを編集しようとしたら、何やら怪しいメッセージ。
「Maybe permission is not writable or filename is too long」
探ったら、下記のファイル属性を666へ変更することでOKっぽい。
cache/recent.dat
cache/entities.dat
wiki/*.txt

結果、OKでした。
とりあえず、wikiはOK!

2011年4月15日金曜日

2008r2 GestOSのライセンス認証 vol1

WindowsServer2008R2はStandardEditionの場合、Hyper-vにより仮想化して作成したGestOSに1ライセンスまで、同ライセンスでの利用が認められているようなのです。
で、これは!ということで早速利用。
んで、ライセンス認証をしようとしたところ、こんな感じ。


ライセンス認証を放置しておくと、いずれアクセスできなくなるので(期間は忘れたけど)、認証はどうやるのかな、と思ってMSに問い合わせたところ、ちょっと待ってちょうだいとのこと。
どんくらい待てばよいかはわからないけど「期限が来る前に指定した電話に問合せして」と教えてもらいました。

今は仮想化での認証の問い合わせも含め、混雑しているとのこと。
しばらくしたら問い合わせてみよう。
ちなみに、インストールに仕様したのは物理、仮想ともにOEM版ね。
→つづく

2011年3月24日木曜日

WPFに挑戦してみた

今回、ちょっとした事からWPFに挑戦してみました。
で、イカシタ仕上がりになるってんでExpressionBlendを使ってみてます。
ExpressionBlendはそれ自体がイカシタ雰囲気を醸し出している(と思ってる)のでそれだけでも気分がいつもと違う。気がする。

WebsiteSparkのお陰で無料だし。

ん~、それでWPFはデータグリッドのところで戸惑ったけど、他はすんなりいきそう。
XAMLはasp.netの経験が有る人はすんなりいけるのではないでしょうか?
とまだとりかかったばかりなので、これから躓くのでしょうけど・・・

で、昨日の一つとしてGoogleMapをうまい具合に表示させたかったのですが、「アカベコさん」という方が既に確認していたので、それをまるパクリして動かしてみました。
うむ、イイかんじ。

ね?なかなか素敵でしょ?
といってもまるパクリなわけですが。

2011年3月16日水曜日

サーバが静かすぎて感動

先週、サーバを新たに調達したのですが!
これが、なんとも静かで素敵!

これまで、メインで使っていたサーバは1Uのラックマウントタイプで、古いせいもあってか、ファンの音が非常にうるさかった!
今回調達したのはDellのタワー型なんだけど、ものすごい静か!
こりゃすごいわ。
とても感動しますた。
で!梅の香巻は食べ始めたら止まらないから困る・・・

2011年2月16日水曜日

adbが無いんだけど・・・

今、ちょっとAndroidアプリの構築をお試し中で、開発環境を構築しています。

で、環境構築中にadbの利用とあります。
このadbを利用するには事前にtoolsというフォルダにパスを通しておくことが必要なんですが、
パスを通したのにadbコマンドをたたいてもそんなの無いよ、と言われます。
(ちなみに、Windowsで環境を構築しています)

で、よくよく見てみたら、android-sdkの中に、toolsとは別に「platform-tools」というフォルダがあって、そちらにadb.exeというものを見つけました。

うん、これだ。

ここにパスを通すことで、使えるようになりました。

2011年2月8日火曜日

GMAILの便利機能

こんにちは。部隊長です。
今回はちょっと脱線してGMAILの便利機能を1個ご紹介。

ご存じGMAILは他のPOPメールアカウントからメールを受信する事ができます。
これのお蔭で、ローカルにたまっていたメール本体がネット上に置ける事になり、
実質どこでもお仕事状態です。怨みます

しかしながら、POPアカウントからの受信は、
設定→アカウント→各アカウントでメールをチェックをクリック
しないとオンデマンドで受信できなかったんですよね。

しかし最近Laboをなんとなく見ていると発見しました







これだ!

「POPアカウントの更新」



こいつを有効にしておくと、
受信トレイの更新ボタン



で他のPOPアカウントを受信してくれるんですね!
さすがGoogle先生!太っ腹!


ちなみに僕はGmailの受信トレイは未消化のタスク置き場として使っています。
消化したものはタグつけてさっさとアーカイブです。
メルマガとか揮発性の情報はタグもつけずアーカイブか削除です。


また便利機能が見つかったらまたUPしようと思います。おもうだけかもしれません。

2011年2月1日火曜日

[Excel]VBAコードのバージョン管理

こんばんは。部隊長です。
今回も引き続きExcelVBAのネタです。

Excelでの開発は、Excelファイル本体がバイナリであるため
バージョン管理を行う事が困難です。
(2007以降はzip解凍してxml形式になるようですが・・・)

また、VBAのモジュールは開発が進むにつれ、履歴がたまりファイルサイズが大きくなります。
モジュール自体が破損する事も多いようですね。
そういうときの対処として、モジュールを全てエクスポートし、インポートし直すと最適化される、
というのがネットに載っています。

それであれば、モジュール自体でソース管理してしまった方が良いでしょう。
モジュールはテキストファイルですので、バージョン管理ソフトとの親和性も高いです。

そこで、モジュールファイルを一括してエクスポート、
または全て解放後、一括してインポートするコードをご紹介します。

本体のファイル直下にForm、Class、Module、それぞれのフォルダを作成し、エクスポートするコードと、それらのフォルダからインポートするコードです。

一括エクスポートした後はVSSなりSVNなりにコミットしたって下さい。

''-----------------------------------------------------------------------
'' 全プロジェクトファイルエクスポート(ブック・シートに付随するコード以外)
'' 事前にマクロのセキュリティ→VBAのオブジェクトモデルへのアクセスを許可する事(実行時エラーになります。)
''-----------------------------------------------------------------------
Private Sub Export_All()

    Dim Path As String
    Dim i As Integer
    
    Const cls As String = "\Class\"
    Const FRM As String = "\Form\"
    Const MODL As String = "\Module\"
    
    Const EXT_MODL As String = ".bas"
    Const EXT_CLS As String = ".cls"
    Const EXT_FRM As String = ".frm"
    
    Path = ThisWorkbook.Path
    
    '' エクスポートフォルダ
    If Dir(Path & cls) = "" Then MkDir (Path & cls)
    If Dir(Path & FRM) = "" Then MkDir (Path & FRM)
    If Dir(Path & MODL) = "" Then MkDir (Path & MODL)
    
    With ActiveWorkbook.VBProject
    
        For i = 1 To .VBComponents.Count
        
            Select Case .VBComponents(i).Type
            Case 1  '' vbCompTypeModul
                .VBComponents(i).Export Path & MODL & .VBComponents(i).Name & EXT_MODL
            Case 2 '' vbCompTypeClassModul
                .VBComponents(i).Export Path & cls & .VBComponents(i).Name & EXT_CLS
            Case 3 '' vbCompTypeUserform
                .VBComponents(i).Export Path & FRM & .VBComponents(i).Name & EXT_FRM
            End Select
        Next
    
    End With
    
End Sub


''-----------------------------------------------
''--プロジェクトファイル洗い替え-----------------
''-----------------------------------------------
Private Sub Refresh()

    Call Release_All
    Call Import_All

End Sub


'' 全プロジェクトファイルリリース
Private Sub Release_All()

    Dim i As Integer
    Dim colComName As New Collection
    
    With ThisWorkbook.VBProject
   
        For i = 1 To .VBComponents.Count
            If .VBComponents(i).Type = 1 Or .VBComponents(i).Type = 2 Or .VBComponents(i).Type = 3 Then
                colComName.Add (.VBComponents(i).Name)
            End If
        Next
    
        For i = 1 To colComName.Count
            .VBComponents.Remove .VBComponents(colComName(i))
        Next
    
    End With
    
    Set colComName = Nothing
    

End Sub

'' 全プロジェクトファイルインポート
Private Sub Import_All()

    Dim Path As String
    Dim i As Integer
    
    Const cls As String = "\Class\"
    Const FRM As String = "\Form\"
    Const MODL As String = "\Module\"
    
    Const EXT_MODL As String = ".bas"
    Const EXT_CLS As String = ".cls"
    Const EXT_FRM As String = ".frm"
    
    Path = ThisWorkbook.Path
    
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim fileList As Object
    
    '' Cls
    Set fileList = fso.GetFolder(Path & cls).Files
    For Each file In fileList
        ActiveWorkbook.VBProject.VBComponents.Import Path & cls & file.Name
    Next
    
    '' Form
    Set fileList = fso.GetFolder(Path & FRM).Files
    For Each file In fileList
        If Right(file.Name, 4) = EXT_FRM Then
            ActiveWorkbook.VBProject.VBComponents.Import Path & FRM & file.Name
        End If
    Next
    
    '' Module
    Set fileList = fso.GetFolder(Path & MODL).Files
    For Each file In fileList
        ActiveWorkbook.VBProject.VBComponents.Import Path & MODL & file.Name
    Next
    

End Sub




これをアドインにしてインストールして置くと便利。
但し、シートオブジェクトやブックオブジェクトに記述されているコードは対象外となるので、
そこらへんは手作業なのが玉に傷。



ネタ元はネットに散らばっていた情報ですので、ご利用は自己責任でお願いいたします・・・ 

2011年1月29日土曜日

[EXCEL]Chart.Export makes 0byte File

こんちは。Azureの続きをやるやる詐欺続行中の部隊長です。
今回もAzureはちょっとおいといて、絶賛進行中のプロジェクトから1ネタ。


現在進行中のプロジェクトで、某社販促グッズとして提供している某Excelブック(以下ツール)の改修を行っております。なんのこっちゃですね。

このツールでは集計したデータでグラフを作成し、それをフォームで表示するために一旦gifにExportしているんですね。

こんな感じで。

'' グラフタイトル設定
        .ChartObjects(1).Chart.ChartTitle.Text = GRAPHTITLE_ALL & " n=" & .Range(VALUE_N).Value        
        '' 画像ファイルのExport
        .ChartObjects(1).Chart.Export ThisWorkbook.Path & GRAPHPICT_ALL

このコードはExcel2000から2007まで問題なく動作します(97以前も動くかもしれんけど)
で、基本的に2010でも動くはず。

と思ったら、フォーム側のImageにロードする時にエラーが・・・


何故だと思ったら、出力されたファイルが0kbなんですね。空っぽです。
ググっても殆ど情報は出てきません・・・

そこで試しに簡単なサンプルを書いたら問題なく動作します。なんで?




対象のグラフが載ってるシートは非表示・・・!サンプルは表示・・・!


というわけでVisibleにしてやったらちゃんと動いた、というわけでした。
しかし、このブックはパスワードでロックされていて、表示するにはUnLockしなければならない・・・


というわけでこうゆう事になりました

'' Visible Befor Export (for Excel2010)
     ThisWorkbook.UnProtect password:="XXXXXXXXX"
        .Visible = xlSheetVisible
        
        '' 画像ファイルのExport
        .ChartObjects(1).Chart.Export ThisWorkbook.Path & GRAPHPICT_ALL
        
        .Visible = xlSheetHidden
     ThisWorkbook.Protect password:="XXXXXXXXXX"
        '' --

これはちょっと行き当たりばったり過ぎだろJK・・・
つかこんなとこにパスワード書くなよ。書き直し。


教訓:非表示シートを弄る際はお気をつけ下さい。

2011年1月24日月曜日

喫煙所検索サイト

喫煙所検索サイトを復活させてくれました。
といってもiPhone用だけど。
なので、IEでは上手く見えません。
http://kensaku.serve55.net

ちなみに、喫煙所の登録が可能!
問題は、GPSの精度だけど、きっと解決してくれるハズ。

とある規格化されたコード

世の中こんなもんまで規格化されていますよ、というお話 https://ja.wikipedia.org/wiki/ISO_5218 この辺が大変良くできた、ためになる(?)解説記事です。(長い https://qiita.com/aoshirobo/items/32deb...