[[20200308093223]] 『背景が透明なユーザーフォームを作成したい』(きっしー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『背景が透明なユーザーフォームを作成したい』(きっしー)

はじめまして
VBAの初心者でいろいろ調べながらどうにか簡単なものが作れるようになった程度の者です
質問お願いします

背景が透明なユーザーフォームを作ろうと調べていたのですが、行き詰ってしまいました
仕事で使用する光学検査機器で、他アプリのウインドウ内に光点が表示されるものがあります
こちらの位置マーキングをこれまでマウスカーソルを合わせてマウスに触らないとう原始的な方法で行っていたのですが、このたび検査解析用のExcelファイルを作りまして、そのファイルから背景が半透明なユーザーフォームを起動し光点の位置にオーバーレイさせて位置マーキングを行えないかと考えました
イメージとしては、狙撃銃のスコープのクロスヘアのように、ターゲットの光点に合わせてユーザーフォームのウインドウを置いておくイメージです

当方API等は知識もなく、また検査用のPCは64bitと32bitが混在、Win7とWin10が混在、Excel2010と2013が混在という状況で、ネットで検索した限りですが、API利用の場合32bitと64bitでソースコードが多少変わるとの情報までたどり着き途方に暮れておりました
どなたかご教授いただけるかたがいらっしゃれば、ぜひ教えを請いたくよろしくお願いいたします

< 使用 Excel:Excel2010、使用 OS:Windows7 >


補足ですが、職場の制約で外部からのデータの持ち込みが難しく、また検査機器のPCはスタンドアロンのためフリーウェア等の利用も制限されており、方法として思いついたのが、ユーザーフォームを利用する方法でした
(きっしー) 2020/03/08(日) 09:49

おはようございます ^^
図形でしたら簡単に透明化出来ると思いますが。
ユーザーフォームでないといけない理由があれば
無視してくださいませ。m(_ _)m。。。 でわ

(隠居じーさん) 2020/03/08(日) 10:40


既に検索済み&お望みのこととは違うと思いますが、
こんな過去ログがありました。

[[20180117210141]] 『ユーザーフォームの背景だけを透明にしたい』(Chanki)
(OK) 2020/03/08(日) 12:21


隠居じーさん様 別アプリのウインドウ上に重ねるため、Excel外に移動させられない図形では目的を果たせないのです

OK様 そちらですと、おそらく32bit向けのソースコードになるのではないでしょうか?
目的が果たせるかもと試してみたのですが、当方のPCが64bitのため、エラーとなってしまいました
(きっしー) 2020/03/08(日) 14:48

こんにちは ^^
考察が及ばず、大変失礼致しました。ちなみに
条件付きコンパイル、と云うものがあり、条件文で
64Bit と 32bit の宣言をかき分けておけば
どちらでも対応してくれると思います。詳細は
お詳しい方の回答をお待ちになるか、検索して
調べてみて下さい。でわでわ。。。m(_ _)m

(隠居じーさん) 2020/03/08(日) 15:11


 Bit数はPCじゃなくてExcelのほうじゃなかったかな...と思ったけど32bitコードでエラーか。
 このあたり見て修正するしかないのかな?

 VBAでWindowsAPIを使うには
  https://qiita.com/nukie_53/items/6a88ce82565e238a3c71

 上のリンク先で重要なのは
 >VBA 7.x 用の記述 リファレンス
 >Microsoft公式のものとして以下のようなものがダウンロードできます。

 >Office 2010 Help Files: Win32API_PtrSafe with 64-bit Support
  https://www.microsoft.com/en-us/download/details.aspx?id=9970

 >VBA 7.x 用の記述は解凍したファイルの中の「Win32API_PtrSafe.TXT」内に記載されています。

 VBAでWinAPI32を使うためのリンク集
  https://qiita.com/Q11Q/items/16862ef1797e25cbadfd

 Office の 32 ビット バージョンと 64 ビット バージョン間の互換性
  https://docs.microsoft.com/ja-jp/office/client-developer/shared/compatibility-between-the-32-bit-and-64-bit-versions-of-office

 Office 2010 ヘルプファイル:64 ビットのサポートが含まれる Win32API_PtrSafe
  https://docs.microsoft.com/ja-jp/office/troubleshoot/office/win32api_ptrsafe-with-64-bit-support

 どのようなものかというと、
 >詳細
 >Microsoft Office 2010 および 
 >Visual Basic 7.0 for Applications (VBA 7) より前のバージョンの Microsoft® Office および
 >Microsoft Visual Basic® Applications (VBA) には、
 >Microsoft Windows API を呼び出すことができる Win32api.txt ファイルが
 >含まれていました。 Microsoft Office 2010 に64ビット版のサポートが
 >追加されたため、このファイルに対する更新は、64ビット API 呼び出しを
 >サポートするために必要になります。 Win32API_PtrSafe .txt は、
 >32ビットと64ビットの両方のバージョンの Windows で API 呼び出しを
 >サポートする新しいバージョンの Win32api.txt です。

 >Win32API_PtrSafe .txt には次のものが含まれています。

 >·元の Win32api.txt ファイルに含まれていた Windows API 関数の32ビット (x86) と64ビット (x64) 互換の Declare ステートメント。

 >·指定された Declare ステートメントが使用する定数のグローバル定数宣言。

 >·提供された Declare ステートメントが使用するユーザー定義型 (構造) の型宣言。

 それでもよくわからない場合は、

 VBAでWin32APIの64bit対応自動変換プログラムを作ってみた
  https://www.excel-chunchun.com/entry/vba-64bit-declare-convert

 使用の際は「事前準備と使い方」をお読みください。
(2u) 2020/03/08(日) 20:51

こんばんは ^^ すみませんでした。
一部例外もあるそぉですが、エクセル2010以降
64ビット用の宣言で共有出来る。みたいですね。
重ね重ね、お邪魔をしたみたいで恐縮です、m(_ _)m
とりあえず、お詫びと修正まで。
(隠居じーさん) 2020/03/08(日) 21:44

個別での返信は控えさせていただきますが、教えていただいた情報をもとにいろいろ試行錯誤した結果、自宅の環境ではなんとか目的を達成することができました。
IF文でAPI関数の宣言を書分け等非常に参考になりました。
正直APIが何たるかもわからずネットの情報を切り貼りしたもので、本職の方にお見せするのも恥ずかしいものですが、とりあえず動いたのでよかったです。
これから同じコードを会社で手入力するのは憂鬱ですが、会社の環境でもすべて動くものと信じて試してみたいと思います。
みなさま、ありがとうございました。
(きっしー) 2020/03/09(月) 06:08

 おはようございます。。。^^
完成されたようでよかったですね。もうご覧になっていない
かもですが。。。( ̄▽ ̄)
>>これから同じコードを会社で手入力するのは憂鬱ですが
作成されたフォームモジュールと標準モジュールを
エクスポート【左上端のプロジェクトエクスプローラの各、
モジュール名を右クリック】でメニューがでます。
で
標準モジュールは.bas
フォームモジュールは。.frm .frx
という拡張子のファイルが二つ作成されます
これをVBE画面の、ファイル、メニューのインポートで
開けば ← ここから選択してエクスポートも可能です
作成したものがそのまま取り込めますです。
手遅れでしたら済みません。。。m(_ _)m...
(隠居じーさん) 2020/03/09(月) 08:40

 追伸
失礼致しました。
フォームの場合二つ作成されますが。取り込時はfrm
だけでOKでした。。。m(_ _)m [ エクセル様が自動で判別 ^^;]
テストの結果新規BOOKで透明フォームが表示されました
では
ごきげんよう。。。m(_ _)m
(隠居じーさん) 2020/03/09(月) 08:48

隠居じーさん様
ご返信ありがとうございます
インポートの件ありがとうございます
手打ちするのは、外部からのデータの持ち込み等が禁じられているからなのです・・・
検査PCは完全にスタンドアロンで古いものではいまだにWindows2000・XPやExcel2003が稼働しています
ですから、ネット経由でのデータの移動は不可だったりします
また、業務でデータの移動が必要な場合においても、会社で許可されたUSBメモリの使用に限られており、当然ながら自宅への持ち帰りは禁止でして、自宅で作成したものを持ち込む手段がないのです
とは言え、検査用PCのどれか1台で作成してしまえば社内流通用のUSBメモリで他のPCにも移動できるので1台分だけソースを手打ちしてきました
(おさんどん) 2020/03/09(月) 18:55

 個人的な興味でお聞きしますが、業務で情報収集の為、ネット検索しますよね?

 当然、コード(文字ベース)を掲示しているサイトにもアクセスできると思うんですが、
 その画面の文字コピーも出来ない会社なんでしょうか?

(半平太) 2020/03/09(月) 19:04


半平太さま

情報セキュリティレベルがエリアごとに区切られており、該当の職場はコアになる技術の部分としてかなりセキュリティレベルが高いのです
室内からインターネットへの接続は不可で、社内ネットワークには接続できますが、すべてログが残るらしいです
もちろん、別の部屋にはインターネットへの接続が可能なPCもあるのですが、そこで収集した情報をデータで職場内に持ち込むには社内ネットワークを利用するしかない状況です
また、職場内に持ち込んだとしても許可を受けたUSBメモリを利用してネットワークにつながったPCから検査PCへのデータの移動が発生するため、その過程で誰が何をしたか把握されているそうです・・・

とにもかくにも、検査PCのある部署は大昔のシステムをそのまま利用しており、現状を変えることなく運用するのが会社の方針のようです

(おさんどん) 2020/03/10(火) 21:09


 おさんどん さん

 ご回答いただき、誠にありがとうございました。

 二重入力の手間もやり切れないですが、
 時勢柄、セキュリティ第一ですからね。
 お察しします。

 では失礼します。m(__)m

(半平太) 2020/03/10(火) 21:25


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.