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

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

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

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

VBA

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

2736閲覧

VBAで管理者権限を必要とするdllを呼び出したい。

退会済みユーザー

退会済みユーザー

総合スコア0

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

VBA

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2021/02/18 12:25

編集2021/02/18 12:46

とあるdllをC#とVBからは呼び出せました。
しかし、VBAから呼び出すとエラーになります。
そのdllはexeのあるフォルダにデータファイルを書き込みます。
VBAの場合exeはエクセルなのでエクセルのあるフォルダにデータを書き込もうとしてエラーになっていると思われます。
試しにエクセルのあるフォルダにテキストファイルをコピーしてみたところ、管理者権限を要求されました。
なので、VBAのマクロに管理者権限を設定してやればそのdllを呼べると思います。
どうすれば良いのでしょうか?

あ、そのまえにdllをSystem32とかに置かないとダメっぽいですね?
dllをSystem32に置いてもこんなエラーが出ます。
イメージ説明

成功例

VB

1 <System.Runtime.InteropServices.DllImport("test.dll")> 2 Private Shared Function test() As Integer 3 End Function 4 5 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 6 If test() = 0 Then 7 MsgBox("成功です。") 8 End If 9 End Sub

失敗例

VBA

1Private Declare PtrSafe Function test Lib "test.dll" () As Integer 2 3Sub sub1() 4 If test() = 0 Then 5 MsgBox ("成功です。") 6 End If 7End Sub 8

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

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

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

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

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

YAmaGNZ

2021/02/18 12:40

どのように呼び出したのですか? C#やVB.NETからの成功した場合とVBAの失敗した場合のソースを提示したほうが適切な回答が得られる気がします。
Zuishin

2021/02/18 12:43

Excel を起動する適当な exe を作る。
退会済みユーザー

退会済みユーザー

2021/02/18 12:46

成功例と失敗例を追記しました。
退会済みユーザー

退会済みユーザー

2021/02/18 12:48

>Excel を起動する適当な exe を作る。 エクセルユーザーへのサンプル提供が目的なので、それはNGです。
Zuishin

2021/02/18 12:49

サンプル提供を目的にそんなセキュリティーを悪化させる凶悪なもの配らなくても。
退会済みユーザー

退会済みユーザー

2021/02/18 12:52

VBAだけでは無理なんですか? それならVBAのサンプル提供はあきらめます。
退会済みユーザー

退会済みユーザー

2021/02/18 12:56

それか、VBA用のdllはドキュメントフォルダにデータファイルを書き込むとか、dll側を修正しないと無理ですかね?
YAmaGNZ

2021/02/18 12:58

EXCELを管理者権限で動作させたら正常動作するのですか?
退会済みユーザー

退会済みユーザー

2021/02/18 12:59

おお、それは試してなかった。
退会済みユーザー

退会済みユーザー

2021/02/18 13:05

ダメですね。 そういう問題じゃないみたいです。
退会済みユーザー

退会済みユーザー

2021/02/18 13:28

dll側のデータ保存をドキュメントフォルダに変更しましたがダメでした。 んんん? この単純なdll呼び出しのVBAのコードが間違ってる?
退会済みユーザー

退会済みユーザー

2021/02/18 14:16

何だか呼び出し方が間違ってるっぽいです。 意味がわかりません。
guest

回答1

0

ベストアンサー

dllをx64でビルドしたら解決しました。

投稿2021/02/18 14:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問