質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1340閲覧

32bitの測定器制御プログラムを64bitパソコンで編集したり、デバッグもできたらしたい(測定器はない環境で)

hanbee.com

総合スコア52

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/09/02 00:48

編集2021/09/02 06:45

お世話になっております。
(追記:困っていることは表題の通りなのですが、実際にこのプログラムを使う環境は32bitパソコンなので、
64bitに対応させることは考えていません。あくまで、API?とかは全然関係ないところの
修正をしたいと思っています。そもそも測定器制御プログラムを測定器とかが全くない環境で改造する時点で
無理があるかもしれないのですが、やらなければならないのでどうかお知恵をお貸し頂ければと思います。
また、こんな経験をされたことがある人はおられますか?
業務時間中を勉強に充てることはできませんし、かといって家に帰っても測定器制御プログラムは動かないし、、。プログラムを必死に解読しています。)

VBAはほとんど初めてで、かつ測定器制御(GPIBを使用しています)に触れることも初めてで、
愚か質問になり恐縮ですが宜しくお願いします。

業務で使用している測定器制御プログラムを引き継いでいます。
そして今そのプログラムの改良に取り組もうとしているところなのですが、
自宅のパソコンでそのプログラムを開いて、コンテンツの有効化を選ぶと、とりあえずエラーになりました。
内容を見てみると以下のコードが赤くなっており、そのプログラムは32bitパソコンにしか対応していなくて、
64bitパソコンでは動かないよということかと思います。
エラーメッセージは以下↓
「コンパイルエラー:
このプロジェクトのコードは、64ビットシステムで使用するために更新する必要があります。Declareステートメントの確認および更新を行い、次にDeclareステートメントにPtrSafe属性を設定してください」

'変数名とかは○○○に変えました。 Private Declare Function FindWindow Lib "user32.dll" _ Alias "FindWindowA" _               (ByVal ○○○ as string, _ ByVal ○○○ as string) as long Private Declare Function SetWindowPos Lib "user32" _ (ByVal ○○○ As Long, _ ByVal ○○○ As Long, _ ByVal ○○○ As Long, ByVal ○○○ As Long, _ ByVal ○○○ As Long, ByVal ○○○ As Long, _ ByVal ○○○ As Long) As Long

そもそも自宅のパソコンなので、このプログラムの実使用環境のように測定器があるわけでもGPIBで接続されているわけでもないので、自由に使えるとは思っていませんが、このコードの意味はなんなんでしょうか。
これがないとだめなんですか?

またこれをコメントアウトしてとりあえずエラーが出ないようにするとして、
測定器がない状態でも測定器制御プログラムは作れるものですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/09/02 02:55 編集

[3-1. タイトルには要件を書きましょう] https://teratail.com/help/question-tips#questionTips3-1 タイトルは、不具合の内容や要件の概要が判るタイトルを付けてください。 [3-4. 発生している問題・エラーメッセージを書きましょう] https://teratail.com/help/question-tips#questionTips3-4 エラーが発生しているなら、エラーメッセージの内容・詳細を記載してください。
hanbee.com

2021/09/02 03:08

編集しました ありがとうございます。
guest

回答2

0

ベストアンサー

Officeが32bitか64bitかで、ポインタやハンドルの値のbit数が変動します。
そういったものを一律Longで扱っていた場合、元のWinAPIの定義を確認しながらの64bit対応が必要になるでしょう。
WinAPIの64bit化で出てくるPtrSafe、LongLong、LongPtrってなんなのさ?

面倒なら32bitのOfficeで動かしてみるという手はありますが。

投稿2021/09/02 01:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hanbee.com

2021/09/02 03:11

32bitのOfficeは持っていません。。 今の自宅の環境でこのプログラムを動かすことはできないですが、 こういう環境でも体当たりするしかないですよね。とりあえずプログラム解読を試みます。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2021/09/02 05:15 編集

> 困っていることは表題の通りなのですが、実際にこのプログラムを使う環境は32bitパソコンなので、64bitに対応させることは考えていません。あくまで、API?とかは全然関係ないところの修正をしたいと思っています であれば、とりあえず32bitのOfficeを入手するしかないんじゃないですかね。モジュール数の話とか聞いた限りでは、64bit対応に書き換えるのもあまり現実的では無さそうですし。
hanbee.com

2021/09/02 05:39

返信ありがとうございます。 つまりは、新しいパソコンを購入した方がいいということでしょうか?
退会済みユーザー

退会済みユーザー

2021/09/02 06:15 編集

別に64bitのOfficeアンインストールして32bit版インストールし直すだけでいいんじゃないでしょうか… OSが64bitでも、32bitプログラムは動きます。(逆は無理) どうしても64bitのOfficeそのままにしておきたいなら、VMWareで別OSをVMで立ち上げてそっちにインストールするなり、32bitのOffice入った別PC用意するなり好きな方法を取って貰えればいいと思いますが。
hanbee.com

2021/09/02 06:39

なるほど。32bit版という方法ですね。 仮に64bitをアンインストールして32bit版インストールしたとして、 また64bit版をインストールしなおせますかね。 またライセンス料金発生したりしませんかね。 自分でもちゃんと調べて検討してみたいと思います。 大変参考になります。ありがとうございます。
退会済みユーザー

退会済みユーザー

2021/09/07 00:46

32bitOfficeで実行・デバッグできる事を確認したら、質問をクローズしてください。
guest

0

提示いただいた命令はWindowsAPIと呼ばれる命令の1つです。
64bit版で使用する場合、以下のように「PtrSafe」が必要となります。

VBA

1Private Declare Function FindWindow Lib "user32.dll"

VBA

1Private Declare PtrSafe Function FindWindow Lib "user32.dll"

投稿2021/09/02 01:03

hex309

総合スコア761

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hanbee.com

2021/09/02 01:12

ありがとうございます。PtrSafeをつけたらエラーが出なくなりました
退会済みユーザー

退会済みユーザー

2021/09/02 01:16

APIの定義によってはPtrSafeを付けるだけでは不完全で、エラーは出ずともスタックメモリを破壊する事もあります。引数の型も正しく合わせる必要があります。
hanbee.com

2021/09/02 01:23

radian様、ありがとうございます。 かなり難しいんですね。 APIという用語も、このプログラムがどんなプログラムなのかもわかっていないので、 かなり危ないかもしれないということですね とりあえずコメントアウトしておきます。
退会済みユーザー

退会済みユーザー

2021/09/02 01:29 編集

WinAPIはWindowsが元々備えている機能を呼び出すものなので、そのプログラムに必要な機能のWinAPIをコメントアウトしたら正しく動作するとは思えませんが… APIの機能については、検索すればすぐ出てくるでしょう。(できるだけMicrosoftのものを読む) https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowpos
hanbee.com

2021/09/02 01:46

なるほど。 いまえくせるちゅんちゅんさんのブログを読んでいます。 API難しいですね。 いまこのプログラムを64bitに対応させるとしたら、、ものすごく大きなプログラム(標準モジュールだけで100個近くある)ので完全にキャパオーバーしてしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問