タイマーにて自動呼出し処理

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

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メッセージ> ダイアログベース
 ビューを再描画(最初の描画含)

カテゴリー: MFC

ワイド文字列扱い

//ワイド文字列コピー
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());
        }
    }
}

カテゴリー: C#