MW211 EXIT

devlog
秀丸マクロ/gettext対応
2015年08月15日
┌────────────────┬─┬────────────────┐
│{$変数|escape}                  │→│{_($変数)|escape}               │
└────────────────┴─┴────────────────┘
Smartyテンプレートで上記の置換を行うマクロ。

まず、手動で直接行う場合。
┌────────────────┬─┬────────────────┐
│{\$([^{]*?)\|escape\}           │→│{_($\1)|escape}                 │
└────────────────┴─┴────────────────┘

これをソースコードにすると以下。
┌──────────────────────────────────────┐
│replaceall "{\\$([^{]*?)\\|escape\\}" , "{_($\\1)|escape}" , regular;       │
└──────────────────────────────────────┘
分類:正規表現
ExcelVBA/DoEventsとは
2015年08月14日
正式には「Application.DoEvents」メソッドだが、
省略形で「DoEvents」と記述されることが多い。

Unix系はマルチタスクOSだが、Windows系は疑似マルチタスクOSである。

つまり直列的に処理が行われるので、Excelで重い処理を行うと
一部の他処理が止まってしまう(画面が真っ白になったりする)。

そのような場合、処理と処理の間に「DoEvents」を挟むことにより、
そのタイミングでOSへ処理を一旦返上し、
溜まっていた処理を吐き出す(実行する)ことができるようになる。

当然ながら、再びはOSより処理は戻ってくるので、続きが行われる。
分類:ExcelVBA
Smarty/gettext()
2015年08月13日
多言語変換の」gettext()」は、翻訳対象を「_()」で囲えばよい。

では、Smartyの場合はどうか。

変数の場合。
┌────────────────┬─┬────────────────┐
│{$変数|escape}                  │→│{_($変数)|escape}               │
└────────────────┴─┴────────────────┘

定数の場合。
┌────────────────┬─┬────────────────┐
│定数                            │→│{_('定数')}                     │
└────────────────┴─┴────────────────┘
もう少しスマートなやり方がありそう。
分類:Smarty
ExcelVBA/保存先指定ダイアログ
2015年08月12日
保存先をダイアログで指定するようにする方法。
┌──────────────────────────────────────┐
│Dim 保存先ファイル名 As String                                              │
│ChDir ActiveWorkbook.Path   ' 本ファイルのフォルダを既定とする              │
│保存先ファイル名 = Application.GetSaveAsFilename( _                         │
│    InitialFileName:="既定ファイル.txt", _                                  │
│    FileFilter:="テキストファイル,*.txt,すべてのファイル,*.*" _             │
│)                                                                           │
│If 保存先ファイル名 = "False" Then                                          │
│    MsgBox "ファイルを指定し直してください", vbInformation, "処理終了"      │
│    Exit Sub                                                                │
│End If                                                                      │
│Msgbox 保存先ファイル名  ' フルパスが取得できるので保存先に利用             │
└──────────────────────────────────────┘
「.GetSaveAsFilename()」メソッドを使う。
既定ファイル名は「InitialFileName」パラメータで指定する。
既定フォルダは、直前に「ChDir」でディレクトリ移動することにより指定となる。
分類:ExcelVBA
ExcelVBA/翻訳
2015年08月11日
Google翻訳を利用した英和・和英の一括翻訳マクロ。
セル選択(複数可)して実行すると、右隣に翻訳結果が出力される。
┌──────────────────────────────────────┐
│Public Sub Google翻訳英和()                                                 │
│    Dim i As Long                                                           │
│    Dim theCell As Range                                                    │
│    Dim objIE As Object                                                     │
│    For Each theCell In Selection                                           │
│        If theCell.Value <> "" Then                                         │
│            Application.Wait Now + TimeValue("00:00:01")  ' スリープ約1秒   │
│            Set objIE = CreateObject("InternetExplorer.Application")        │
│            With objIE                                                      │
│                .Navigate "https://translate.google.co.jp/#en/ja/" _        │
│                        & theCell.Value                                     │
│                Do While .Busy Or .ReadyState <> 4                          │
│                    DoEvents                                                │
│                Loop                                                        │
│                With .Document.getElementById("result_box")                 │
│                    For i = 1 To 10000  ' リトライ                          │
│                        If .innerText <> "" Then                            │
│                            Exit For                                        │
│                        End If                                              │
│                        DoEvents                                            │
│                    Next i                                                  │
│                    theCell.Offset(, 1).Value = .innerText                  │
│                End With                                                    │
│                .Quit                                                       │
│            End With                                                        │
│        End If                                                              │
│    Next theCell                                                            │
│    MsgBox "完了"                                                           │
│End Sub                                                                     │
├──────────────────────────────────────┤
│Public Sub Google翻訳和英()                                                 │
│    Dim i As Long                                                           │
│    Dim theCell As Range                                                    │
│    Dim objIE As Object                                                     │
│    For Each theCell In Selection                                           │
│        If theCell.Value <> "" Then                                         │
│            Application.Wait Now + TimeValue("00:00:01")  ' スリープ約1秒   │
│            Set objIE = CreateObject("InternetExplorer.Application")        │
│            With objIE                                                      │
│                .Navigate "https://translate.google.co.jp/#ja/en/" _        │
│                        & theCell.Value                                     │
│                Do While .Busy Or .ReadyState <> 4                          │
│                    DoEvents                                                │
│                Loop                                                        │
│                With .Document.getElementById("result_box")                 │
│                    For i = 1 To 10000  ' リトライ                          │
│                        If .innerText <> "" Then                            │
│                            Exit For                                        │
│                        End If                                              │
│                        DoEvents                                            │
│                    Next i                                                  │
│                    theCell.Offset(, 1).Value = .innerText                  │
│                End With                                                    │
│                .Quit                                                       │
│            End With                                                        │
│        End If                                                              │
│    Next theCell                                                            │
│    MsgBox "完了"                                                           │
│End Sub                                                                     │
└──────────────────────────────────────┘
「.Busy Or .ReadyState <> 4」の条件でIEの読込完了を待つのだが、
ID指定で要素を読み込むためにはさらに若干タイムラグがある模様。

それが未だだと空欄取得となってしまうので、リトライを用意した。

なお、クローラみたいなものなので1秒間をあけて実行するようにした。
分類:ExcelVBA
ExcelVBA/UTF-8出力
2015年08月10日
ExcelVBAでは、通常「Shift-JIS」で出力されるが、これを「UTF-8」にしたい場合。

「ADODB.Stream」を使用する。
まず、参照設定にて
「Microsoft ActiveX Data Object6.1 Library」にチェックを入れること。


そしてサンプルソースとしては以下のような感じに処理を行えばよい。
┌──────────────────────────────────────┐
│Public Sub UTF8出力()                                                       │
│    Dim 出力先 As New ADODB.Stream                                          │
│    With 出力先                                                             │
│        .Type = adTypeText                                                  │
│        .Charset = "UTF-8"                                                  │
│        .LineSeparator = adCRLF                                             │
│        .Open                                                               │
│    End With                                                                │
│    出力先.WriteText Cells(1, 1).Value                                      │
│    出力先.SaveToFile ActiveWorkbook.Path & "\output.txt", _                │
│                      adSaveCreateOverWrite                                 │
│    出力先.Close                                                            │
│    MsgBox "完了"                                                           │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
ExcelVBA/ダブルクォーテーション
2015年08月09日
ダブルクォーテーションをダブルクォーテーションとして使用したい場合。

┌──────────────────────────────────────┐
│""                                                                          │
└──────────────────────────────────────┘
二つ並べる。

しかし、長文になると混乱しがちなので、
┌──────────────────────────────────────┐
│Chr(34)                                                                     │
└──────────────────────────────────────┘
と、文字コード指定としてしまった方がわかりやすいだろう。
分類:ExcelVBA
PHP/MSSQL連携
2015年08月08日
PHPからMSSQL(SQL Server)にアクセスできるようにするには
別途「Microsoft Drivers for PHP for SQL Server」dllを入手しアサインする

(1) Microsoft公式サイトから「SQLSRVxx.EXE」をダウンロードする
    https://www.microsoft.com/en-us/download/details.aspx?id=20098
    →以下のバージョンが取得可能(PHPやWindowsバージョンに合わせて選択)
      ・4.0(SQLSRV40.EXE)
      ・3.2(SQLSRV32.EXE)
      ・3.1(SQLSRV31.EXE)
      ・3.0(SQLSRV30.EXE)

(2) 上記EXEを実行すると、ファイルが取得(解凍)される
    途中で、解凍先を聞いてくるので任意のフォルダを選択

(3) 解凍された一式から「php_sqlsrv_xx.dll」と「php_pdo_sqlsrv_xx.dll」を
    条件に応じて一組だけ選び、
    extフォルダ(「C:\Program Files\PHP\ext」など)へ置く(コピーする)
    ┌────┬────────────┬──────────────┐
    │SQLSRV30│php_sqlsrv_53_ts.dll    │php_pdo_sqlsrv_53_ts.dll    │
    │        │php_sqlsrv_53_nts.dll   │php_pdo_sqlsrv_53_nts.dll   │
    │        ├────────────┼──────────────┤
    │        │php_sqlsrv_54_ts.dll    │php_pdo_sqlsrv_54_ts.dll    │
    │        │php_sqlsrv_54_nts.dll   │php_pdo_sqlsrv_54_nts.dll   │
    ├────┼────────────┼──────────────┤
    │SQLSRV31│php_sqlsrv_54_ts.dll    │php_pdo_sqlsrv_54_ts.dll    │
    │        │php_sqlsrv_54_nts.dll   │php_pdo_sqlsrv_54_nts.dll   │
    │        ├────────────┼──────────────┤
    │        │php_sqlsrv_55_ts.dll    │php_pdo_sqlsrv_55_ts.dll    │
    │        │php_sqlsrv_55_nts.dll   │php_pdo_sqlsrv_55_nts.dll   │
    ├────┼────────────┼──────────────┤
    │SQLSRV32│php_sqlsrv_54_ts.dll    │php_pdo_sqlsrv_54_ts.dll    │
    │        │php_sqlsrv_54_nts.dll   │php_pdo_sqlsrv_54_nts.dll   │
    │        ├────────────┼──────────────┤
    │        │php_sqlsrv_55_ts.dll    │php_pdo_sqlsrv_55_ts.dll    │
    │        │php_sqlsrv_55_nts.dll   │php_pdo_sqlsrv_55_nts.dll   │
    │        ├────────────┼──────────────┤
    │        │php_sqlsrv_56_ts.dll    │php_pdo_sqlsrv_56_ts.dll    │
    │        │php_sqlsrv_56_nts.dll   │php_pdo_sqlsrv_56_nts.dll   │
    ├────┼────────────┼──────────────┤
    │SQLSRV40│php_sqlsrv_7_ts_x64.dll │php_pdo_sqlsrv_7_ts_x64.dll │
    │        │php_sqlsrv_7_nts_x64.dll│php_pdo_sqlsrv_7_nts_x64.dll│
    │        ├────────────┼──────────────┤
    │        │php_sqlsrv_7_ts_x86.dll │php_pdo_sqlsrv_7_ts_x86.dll │
    │        │php_sqlsrv_7_nts_x86.dll│php_pdo_sqlsrv_7_nts_x86.dll│
    └────┴────────────┴──────────────┘

(4) 「php.ini」(「C:\Program Files\PHP\php.ini」など)に
    上記二つのDLLアサインを追記する
    ┌─────────────────┐
    │[PHP_SQLSRV_xx]                   │
    │extension=php_sqlsrv_xx.dll       │
    │[PHP_PDO_SQLSRV_xx]               │
    │extension=php_pdo_sqlsrv_xx.dll   │
    └─────────────────┘
    なお、角括弧の行(セクションマーカ)は単なる目印で影響を及ぼさないので
    記述しなくともよい(もしくは適当に周囲に合わせて記述する)

(5) 「phpinfo()」にて、以下が確認できればOK
    ・「PDO」の「PDO drivers」に「enabled」として「sqlsrv」が追加されていること
    ・「pdo_sqlsrv」(セクション)が追加されていること
分類:PHP、PDO
多言語対応
2015年08月06日
一般的な多言語対応は以下の通り
┌──────┬────────────────────┬──────────┐
│VC/C++      │リソースで言語切替(VisualSutio)         │Microsoft系         │
│VC#         │                                        │                    │
│VB          │                                        │                    │
├──────┼────────────────────┼──────────┤
│C           │gettext()                               │                    │
│C++         │                                        │                    │
│Objective-C │                                        │                    │
│Java        │                                        │                    │
│Perl        │                                        │                    │
│PHP         │                                        │PHPは標準実装       │
│Python      │                                        │                    │
│Ruby        │                                        │                    │
├──────┼────────────────────┼──────────┤
│共通        │連想配列で対応                          │ベタな対応          │
└──────┴────────────────────┴──────────┘
分類:設計
TortoiseSVN/クリーンアップ
2015年08月05日
【クリーンアップ】
  ■作業コピーの状態をクリーンアップ
    →狭義のクリーンアップコマンド(作業コピーを削除する)
  □ロックを強制解除する
    →書込ロックを全て解除する
  □タイムスタンプを修正
    →更新時刻を最終コミット時に全て更新
  □未使用のコピーを削除
    →作業コピーを整理する(サイズ削減)
  □シェルのオーバーレイを更新
    →エクスプローラのSVNアイコンを再更新する
  ■外部参照を含める
    →外部参照設定時にそれらも対象とする
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
  □バージョン管理外のファイルやフォルダーを削除
    →処理タイトルの通り
  □無視するファイルやフォルダーを削除
    →処理タイトルの通り
  □すべての変更を再帰的に取り消す
    →処理タイトルの通り
分類:SVN
前へ 1 … 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 … 156 次へ