'タイマーを止める時に使う為、グローバル定義
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());
        }
    }
}