Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Home : Excel 2013)
64bit版への移行
投稿日時: 18/11/19 16:31:43
投稿者: makory10

お尋ねします。
昨年度までWindows7の32bit版のパソコンでシステムを開発しておりましたが、社内環境が変わりWindows10の64bit版のパソコンを使用する人が出てきました。
そこでシステムを起動したところ以下のエラーがでました。
 
次の非表示モジュール内でコンパイル エラーが発生しました:Module2
このエラーが発生するのは、一般的に、コードがこのアプリケーションのバージョン、プラットフォーム、またはアーキテクチャと互換性がない場合です。このエラーを修正する方法については、〔ヘルプ〕をクリックしてください。
 
調べてみたところ、Declareステートメントを使っているこの部分が64bitになると使えないのがわかりました。
社内環境ではまだ32bitと64bitが入れ混じっており、どちらでも正常に動作するようにしたいと思っています。
32bitと64bitのどちらでも動作されるにはどのような方法があるでしょうか?
ご教授ください。よろしくお願いいたします。
 
Option Explicit
Private Const MAX_COMPUTERNAME_LENGTH = 64
Private Declare Function GetComputerName Lib "kernel32" _
                            Alias "GetComputerNameA" _
                           (ByVal lpBuffer As String, _
                            nSize As Long) As Long
 
Private Declare Function GetUserName Lib "advapi32.dll" _
                            Alias "GetUserNameA" _
                           (ByVal lpBuffer As String, _
                            nSize As Long) As Long

回答
投稿日時: 18/11/19 18:12:43
投稿者: Suzu

キーワード「Declare 32bit 64bit」で WEB検索をしてみてください。
解決案がヒットするはずです。
 
https://docs.microsoft.com/ja-jp/office/client-developer/shared/compatibility-between-the-32-bit-and-64-bit-versions-of-office
 
 
・#If...Then...#Elseディレクティブ を使用し
・64Bit/32Bitを 条件 に Declare ステートメントの対象の変更
・この時に、データ型の変更。戻り値のデータ型も。
 
 
初めからAPIを使わないで、DNSNameや、ログオンユーザー名を取得しても良いのでは?
 
WMI を使い、

引用:
Sub Sumple()
''参照設定なら、Microsoft WMI Scripting V1.2 Library
'Dim Locator As WbemScripting.SWbemLocator
'Dim Service As WbemScripting.SWbemServices
'Dim QfeSet As WbemScripting.SWbemObjectSet
'Dim Qfe As WbemScripting.SWbemObjectEx
 
Dim Locator As Object
Dim Service As Object
Dim QfeSet As Object
Dim Qfe As Object
Dim Ret As String
 
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Service = Locator.ConnectServer
Set QfeSet = Service.ExecQuery("Select * From Win32_NetworkAdapterConfiguration")
 
For Each Qfe In QfeSet
    If Qfe.IPEnabled = True Then
        Ret = Qfe.DNSHostName
    End If
Next
MsgBox Ret
 
Set QfeSet = Service.ExecQuery("Select * From Win32_OperatingSystem")
For Each Qfe In QfeSet
    Ret = Qfe.CSName
Next
MsgBox Ret
 
Set QfeSet = Service.ExecQuery("Select * From Win32_ComputerSystem")
For Each Qfe In QfeSet
    Ret = Qfe.UserName
Next
MsgBox Ret
 
Set QfeSet = Nothing
Set Qfe = Nothing
Set Service = Nothing
Set Locator = Nothing
End Sub

回答
投稿日時: 18/11/19 23:16:57
投稿者: MMYS

これはOSが64bitなのは関係なく、
Excelが64bit版のときに発生します。
 
64bitのOSでも32bit版Excelはインストール可能で
マイクロソフトもに32bitを推薦しています。
インストール時のデフォルトは32 ビット版です。
 
https://support.office.com/ja-jp/article/64-%E3%83%93%E3%83%83%E3%83%88%E7%89%88%E3%81%BE%E3%81%9F%E3%81%AF-32-%E3%83%93%E3%83%83%E3%83%88%E7%89%88%E3%81%AE-office-%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%99%E3%82%8B-2dee7807-8f95-4d0c-b5fe-6c6f49b8d261
 
 
通常の使用では、32bitで困ることは全くありません。
64bitはデメリットのほうが多く、メリットは少ないと思います。
 
http://officekun.hatenablog.com/entry/2017/03/06/132647
https://www.saka-en.com/office/vba-32bit-64bit-declare-statement-branch/
 
 
 

トピックに返信