質問者
Excel を VB6.0(すいませんVBAでなくて、でもほぼ同じようなコードのため)の、Formの上に、小さく表示して、

質問
-
Excel シート風 UIとして(Excelアプリケーションそのものですが)
エディット、保存などの役割のUI(ユーザーインターフェース・コントロール)として動かそうと考えております。
Excelシートは、.ini .csv 的な役割を担っています。
各種コントロールごしに、ユーザーに見えるようにしていましたが、もう実態である、
Excel シートを小さく、UIのように表示する方法を選択しました。
ここで、心配があるのですが、FormやForm上のコントロールを触ったら、
Excelアプリケーションが、後ろになるような心配あります。
実験すればいいのですが、もしすでに、このような作戦のご経験があり、
知見がある方が、おられましたら、お願いいたします。
『Formのコントロール触られても、常に、Excel アプリケーションが、最前面に
重なって表示する方法を、ご存じな方は、おられますでしょうか?』
背景:
過去の先輩が、VB6.0でプログラミングされた作品があります。
後継モデルで、それを改造必要となりました。
その作品には、以下のコントロールが使用されています。
そして、1)2)3)の、UIを達成しています。
しかし、XP上、Windows7(32ビット)上では、DATAコントロール、DBGridコントロールが動きませんでした。
OLEコントロールで、再現しようと考えた結果、Windows上なら、Excelが動作するため、
Excelを、VB6.0で、VBA的なコード書いて、Formの上に、小さく重ねて、
表示させようという方針となりました。
・DATAコントロール
・MSFlexGridコントロール
・DBGridコントロール
1)DATAコントロール、MSFlexGridコントロールの組み合わせで、Excel シート風に、見せかけるUI
2)DATAコントロールと、テキストボックスなどで、accessの Form入力画面的なUI
3)DATAコントロールと、あまり使う人少ない、DBGridコントロール、1)みたいな機能
すべての返信
-
こんな
'モジュール 'Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long 'Public Const SWP_NOSIZE As Long = &H1 'Public Const SWP_NOMOVE As Long = &H2 ' 'Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 'Public Const GWL_HWNDPARENT As Long = (-8) 'フォーム Option Explicit Private WithEvents xla As Excel.Application Private Sub Command1_Click() Dim xlb As Excel.Workbook If (xla Is Nothing) Then Set xla = CreateObject("Excel.Application") xla.Visible = True Set xlb = xla.Workbooks.Add xlb.Worksheets(1).Range("A1").Value = Now Dim hwndExcel As Long hwndExcel = xla.hwnd If (hwndExcel = 0) Then Exit Sub End If Dim x As Long Dim y As Long Dim w As Long Dim h As Long x = Me.Left / Screen.TwipsPerPixelX y = Me.Top / Screen.TwipsPerPixelY w = Me.Width / 2 / Screen.TwipsPerPixelX h = Me.Height / 2 / Screen.TwipsPerPixelY Call SetWindowPos(hwndExcel, 0, x, y, w, h, 0) Call SetWindowLong(hwndExcel, GWL_HWNDPARENT, Me.hwnd) End If End Sub
#それともSetParent?個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
-
たびたびすいません。
いただいたコードは、OLEコントロールを使用されています。
OLEコントロールも使わず、
VB6.0から、Excelを操作する、Excel VBA にそっくりなコードだけで、
常に、Form 上に、Excel ブックを、表示させるアイデアをお持ちの方が
追われましたら、情報ただけますと助かります。
VB6.0上から、Excel を操作する命令は、
Excel VBAより少なく、あっても、ほんの一部、ですが文法も違う部分があることを
昨日初めて体験しました。
VB6.0から、Excelを操作する命令の、文献を持ち合わせていなく、
これらの、命令を記述した、サイトは、1つ見つけていますが、
何か、これらの、説明がされたサイトのURLご存知の方は、情報いただけますと助かります。
Excel VBA と、VB6.0の、Excelを操作する文法が、微妙に違う例です。
VBA:
Range(cells(y1,x1),cells(y2,x2))
VB6.0:
Range(sheet1.cells(y1,x1),sheet1.cells(y2,x2))
Japan 石川県 長谷川浩之
以上です。
-
たびたびすいません。
以下の、サイトにあるように、以下の文法のように
以下の”メモ帳”の部分を、任意のアプリケーション名に変えれば
最前面に、なることが実験でわかりました。
結果、Excelを、Form上に置いた形に、Form上の
ユーザーインターフェース化のように見せかけるための、必要な仕掛けの一つになりました。
ただし、Excel以外を触ると後ろに、なるため、Timer関数で、ちょいちょい最前面に
出るような仕掛けするか、他の仕掛けを考える必要があります。
他にいいアイデアをお持ちの方は、お手数ですが、情報をいただますと、
自分や、自分以外のプログラミングする方に役だちます。
Call AppActivate("メモ帳")
http://www.openreference.org/articles/view/470