2015年11月16日月曜日

ubuntu namazu

ubuntu でnamazu をします。

> sudo apt-get namazu2 namazu2-index-tools
> sudo apt-get install namazu2 namazu2-index-tools
> sudo apt-get install libtext-kakasi-perl libnkf-perl
> sudo apt-get install wv xpdf
> sudo apt-get install language-pack-ja

xlhtml は apt-getできなかったので、0.51を探してDLして
> tar- xvzf  xlhtml -0.5.1.tar-gz
展開したディレクトリで
> configure
> make
> sudo make install
とりあえず、これで準備完了です。
/usr/bin/mknmz,namazu
/usr/share/namazu
などが生成されます。

2015年11月15日日曜日

ubuntu apache cgiが動かない

namazu webページを動かそうと思ったら、
ERR 500、Internal Server Errとなり、
どうもcgiが動いていない様子。

/etc/apache2/conf-available/serve-cgi-bin.conf
#             ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
              ScriptAlias /cgi-bin/ /var/www/html/*/cgi-bin/
#             <Directory "/usr/lib/cgi-bin">
              <Directory "/var/www/html/*//cgi-bin/">
とcgi置き場を書き換えてやる。

/etc/apache2/mods-available/mime.conf
              AddHandler cgi-script .cgi
とコメントアウトを外す。

apache をリスタートする。
> sudo /etc/init.d/apache2 restart

昔はhttpd.confでデフォルト有効になっていた気がするのだが。。。。

2015年11月3日火曜日

エクセル VBA 高速化

いろいろやってみた結果、表示のアップデートをやめるのはすべてにおいて速度効果があります。
マクロでなにかしら更新をする前に
Application.ScreenUpdating = False
としておき、終わったら
Application.ScreenUpdating = True
と戻しましょう。
戻し忘れると、更新できなくなります。
また、忘れてセーブすると次に開いたときに更新ができない状態になります。

Error エクセル VBA ファイル Open/Close ファイルはあるのに開かない

エクセルVBAでファイルをOpenするときに、理由はわかりませんが、失敗することがある様子です。
そこで、開くまで何度か試すようにコードを修正します。
Function FileOpen(FilePath As String, FileName As String, wb As Workbook) As Boolean
    Dim fp As String
    fp = FilePath & "\" & FileName
    FileOpen = True
    If Dir(fp) == "" Then
        MsgBox "ファイルが存在しません。", vbExclamation
        FileOpen = False
        Exit Function
    End If
    On Error Resume Next
ReOpen_00:
    Set wb = Workbooks.Open(FileName:=fp, Notify:=False, ReadOnly:=True)
    ' ここで何度か開きなおしてやる。
    If Err.Number > 0 Then GoTo ReOpen_00
    On Error GoTo 0
End Function

Error エクセル VBA ドロップダウンリスト 実行時エラー'1004'

実行時エラー'1004'
アプリケーション定義、またはオブジェクト定義のエラーです。

エクセルVBAでドロップダウンリストを自動生成しているときに上記エラーが出ました。
これは、エラーの起きたファイルを開いていると、ほかエクセルファイルでも出ます。
解決方法をいろいろ探ってみましたが、何とかできるのですが、決まったやり方がわかりませんでした。
問題のあるエクセルシートを開かずに、新規のエクセルでコードを実行するとエラーは起きませんので、コードに問題があるわけではありません。
面倒くさいですが、新規エクセルブックに全部コピーするのが最も早い回避方法でした。

起きた原因はおそらく、エクセルのオブジェクトの命名規則でバグがあります。
作成しようとするオブジェクトと同じ名前のオブジェクトが完全に消えてなくて、しかも、消すには作成したオブジェクト名で強引に消すという方法しかなく、どこでエラーが起きたか特定するのに非常に時間がかかります。(消したはずのオブジェクトが何かしら残っている感じです。)

ネットではそのオブジェクトをDeleteしてからやればできる。とか、異なるセルをSelectしてからすればできる。などと解決策をかいておりましたが、いずれも駄目でした。

このエラーが起きたら、バックアップから作業を再開というのが最速の手段でした。

エクセル VBA 列数 行数の取得


エクセル VBA で指定行の項目数、指定列の項目数を取得します。

c列の項目数を上から取得します。(空欄で止まります。)
ActiveSheet.Cells(1, c).End(xlDown).Row
c列の項目数を下から取得します。(空欄を含んでいてもOK。)
ActiveSheet.Cells(Rows.Count, c).End(xlUp).Row

r行の項目数を左から取得します。(空欄で止まります。)
ActiveSheet.Cells(r, 1).End(xlToRight).Column
r行の項目数を右から取得します。(空欄を含んでいてもOK。)
ActiveSheet.Cells(r, Columns.Count).End(xlToLeft).Column

エクセル VBA ドロップダウンリスト

リストからドロップダウンリストを作成します。