'タイマーを止める時に使う為、グローバル定義 Dim Next_timer As Date Sub Timer_set() '次回のタイマー呼び出しは1分後 Next_timer = Now + TimeValue("00:01:00") '1分後に呼び出す処理を登録 Application.OnTime Next_timer, "Timer_go" End Sub Sub Timer_go() '1分後に呼ばれる処理を記述 End Sub Sub Timer_stop() '登録済みのタイマーを止める処理(実行済みのタイマーなら意味なし) Application.OnTime Next_timer, Procedure:="Timer_go", Schedule:=False '注意:実行済みで呼ばれた場合エラーとなるため、on error resume nextなどが推奨 End Sub
投稿者「xvax」のアーカイブ
シートの自動プロテクト/解除
Sub sheet_protect() 'sheetのプロテクト パスワード:ABC ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=“ABC" 'プロテクト解除 ActiveSheet.Unprotect (“ABC") End Sub
Excelセル検索
Sub find_cell() Dim Found As Object, strID As String 'sheet1内のA列を検索(完全一致) Set Found = Worksheets(“sheet1").Columns(“A:A").Find(strID, LookAt:=xlWhole) If Found Is Nothing Then MsgBox “「" & strID & “」は見つかりませんでした。" Else '見つかったセルの右隣(B=2列目)の値をゲット MsgBox Worksheets(“sheet1").Cells(Found.Row, 2) 'その値を現在、セルがある場所にセット Cells(ActiveCell.Row, ActiveCell.Column) = Worksheets(“sheet1").Cells(Found.Row, 2) End If End Sub
ビュークラスのメンバ関数
下記の順番で呼ばれる:
Create()
<Createメッセージ>
親ウィンドウを指定して子ウィンドウ(ビュー)作成
PreCreateWindow()
<PreCreateWindowメッセージ>
ウィンドウ(ビュー)の大きさなど設定
この後で、ビューが完成(外側のみ)
OnShowWindow()
<WM_SHOWWINDOWメッセージ>
ビューが表示(消れる)時
ビューの中のオブジェクト表示など
OnUpdate()
<OnUpdateメッセージ>
最初にドキュメントクラスのデータ読み込み
※データ変更時含
OnInitialUpdate()
<OnInitialUpdateメッセージ>
ビューの中の、オブジェクト作成
OnDraw()
<OnDrawメッセージ> SDIかMDI
ビューを再描画 ※OnPaint()が無い時
OnPaint()
<WM_PAINTメッセージ> ダイアログベース
ビューを再描画(最初の描画含)
ワイド文字列扱い
//ワイド文字列コピー WCHAR oomoto = L"大元"; WCHAR aite = [20]; wcscpy( aite, oomoto ); //______________________________________ //ワイド文字列 定義後の代入 WCHAR* hensu = new WCHAR[100]; wcsncpy_s( hensu, 100, L"", 0 ); // hensu = "" //______________________________________ //ワイド文字列 長さ WCHAR* SrcData; i = wcslen( SrcData ); //______________________________________ //ワイド文字列への末尾追加(連結) WCHAR* oomoto = new WCHAR[100]; WCHAR* tsuika = new WCHAR[2]; wcscat( oomoto, tsuika ); // oomoto = oomoto & tsuika //______________________________________ //ワイド文字列内検索(INSTR) WCHAR* oomoto = L"あいうえお"; int index; //先頭から検索 WCHAR ch = L‘う’; WCHAR* p = wcschr(oomoto, ch); index = p – oomoto; //indexには先頭をゼロとして、2が入る //pには「うえお」が入る //末尾から検索 WCHAR* p = wcsrchr(oomoto, L‘え’); index = p – oomoto; //indexには先頭をゼロとして、3が入る //pには「えお」が入る //______________________________________ //マルチバイト文字列からワイド文字列へのコピー char oomoto[] = "あいうえお"; WCHAR* aite = new WCHAR[20]; //まずは長さ調査 lens = mbstowcs( NULL, oomoto, 0 ); //長さ分をコピー lens = mbstowcs( aite, oomoto, lens + 1 );
基本
//WinMainでの引数(argc,argv) int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow) { for(i=1; i < __argc; i++) printf(“%s\n", __argv[i]); } //______________________________________ //ロケーション設定 setlocale(LC_ALL, “Japanese_Japan.932");
Char,Unicode,ワイド文字
ASCII文字コード:
ー0x00-0x7fまでの128文字(7ビット)
シングルバイト文字セット(SBCS):
-8ビット(1バイト)、ASCII文字
ダブルバイト文字セット(DBCS):
-16ビット(2バイト)
-C言語ではシングルバイト文字もダブルバイト文字もchar型の配列
マルチバイト文字セット(MBCS):
-MSDNの定義では1or2バイト文字
-上記シングル、ダブルは、ここに含まれる
-Shift-JISはここに属する
ワイド文字セット:
-常に16ビット(2バイト)
ーワイド文字はchar型では無い
ーワイド文字はwchar_t型(Unicode)
______________________________________
リテラル文字
シングルバイト文字セット
const char* str = “TEST”;
ダブルクォーテーションで囲まれた文字列を「リテラル文字」と呼ぶ
マルチバイト文字セット
const char* str = “日本語”;
ワイド文字セット
const wchar_t* str = L”先頭にLが必須”;
______________________________________
マルチバイト文字でもUnicodeでも、コードを変えずに使用する方法:
const _TCHAR* str = _T(“これなら自動”);
ーMicrosoft固有の仕様
ーマルチバイト文字、ワイド文字(Unicode)どちらでもOk
ー仕組み:Unicodeの場合_TCHARをwchar_t型に、Unicode以外はChar型にコンパイル時に置換
______________________________________
文字列変換:
マルチバイト文字 → ワイド文字(Unicode)
MultiByteToWideChar関数(Windows API関数)
mbstowcs関数(Cランタイムライブラリ)
ワイド文字(Unicode) → マルチバイト文字
WideCharToMultiByte関数(Windows API関数)
wctomb関数(Cランタイムライブラリ)
MDBアクセス&グリッドへ
//using System.Data.OleDb; OleDbConnection myConn; DataView dbRec; private void gridtst_Load(object sender, EventArgs e) { // my document path string MDB = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\db.mdb"; try { //OleDbConnection myConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MDB); myConn.Open(); //DB Set DataSet dSet = new DataSet("DataBase"); OleDbDataAdapter dAdapt = new OleDbDataAdapter("select * from TBL", myConn); dAdapt.Fill(dSet); DataTable dTab = dSet.Tables[0]; //Data Source dbRec = new DataView(dTab); //grid GD.DataSource = dbRec; GD.Columns[0].Width = 40; GD.Columns[1].HeaderText = "BB"; //close myConn.Close(); } catch (Exception ex) { //Error Message MessageBox.Show(ex.ToString()); } }
MDB接続
using System.Data.OleDb; //利用範囲が広い場合、グローバル変数で定義する OleDbConnection myConn; DataView dbRec; // 1) SQL生成 strSQL(実行SQL) // 2) MDB接続 myConn(接続情報) // 3) SQL実行 dbRecへ格納 // 4) 取得結果利用 // 5) MDB終了 // —————————————– main public void GetData(String KEY) { //1) SQL生成 strSQL(実行SQL) //SQL Query String strSQL = “SELECT * FROM table WHERE index=’” + KEY + “‘”; //2) MDB接続 myConn(接続情報) //DB OPen this.dbConn(); //3) SQL実行 dbRecへ格納 //Data Source this.dbSet(strSQL); //4) 取得結果利用 lblxxx.Text = dbRec[0].Row["field1"].ToString(); txtxxx.Text = dbRec[0].Row[2].ToString(); //フィールド番号指定時は最初を0として数える //eof if ( dbRec.Count == 0) { } //ex:Loop処理 int intCNT= 0; while (intCNT < dbRec.Count) { lblxxx.Text = dbRec[ intCNT ].Row["field1"].ToString(); txtxxx.Text = dbRec[ intCNT ].Row["field2"].ToString(); intCNT++; } //5) MDB終了 //DB Close this.dbClose(); } // UPDATE,INSERT,DELETE実行 // —————————————– DB execute public void dbExec(String strSQL) { //Execute SQL OleDbCommand EXEC = new OleDbCommand(strSQL, myConn); try { EXEC.ExecuteNonQuery(); } catch(OleDbException Ex) { Console.Write(Ex.ToString()); } catch(Exception Ea) { throw Ea; } } // —————————————– DB connect public void dbConn() { try { String sConnectionString = “Provider=Microsoft.Jet.OLEDB.4.0; Data Source=xvax.mdb”; //OleDbConnection myConn = new OleDbConnection(sConnectionString); //Connection Open myConn.Open(); } catch (Exception ex) { //Error Message MessageBox.Show(ex.ToString()); } } // —————————————– Get data from MDB public void dbSet(String strSQL) { //DB Set DataSet dSet = new DataSet(“DataBase”); DataTable dTab = null; OleDbDataAdapter dAdapt = new OleDbDataAdapter(strSQL, myConn); dAdapt.Fill(dSet); dTab = dSet.Tables[0]; //Data Source dbRec = new DataView(dTab); } // —————————————– DB Close public void dbClose() { myConn.Close(); }
指定ファイルを該当アプリで開く
//引数のパスを該当アプリで開く(xls,docなど)
private void OpenDirectFile(String FullPath) {
//ファイル存在チェック
if (File.Exists(FullPath) != true) {
MessageBox.Show(FullPath + ” ファイルが見つかりません”);
} else {
try {
//拡張子に関連付いたアプリで開く
System.Diagnostics.Process.Start(FullPath);
}
catch (Exception eX) {
MessageBox.Show(FullPath + “\n” + eX.ToString());
}
}
}