• ベストアンサー

EXCEL2010から外部DLLをCall出来ない

下記のごときマクロをEXCELマクロに記入し、動かすとExcel2003では問題なく動くのですが、 Windows7+Excel2010の評価版を新規インストールした環境では「Call testDll」の文のところで 「実行時エラー48 ファイルが見つかりませんC:\Temp\testDll.dll」と出てしまうのです。  しかし、C:\Temp\testDll.dllは置いてあるのです。  Declare文の仕様が変わっているのでしょうか?  どこに問題があるのでしょうか? 一応、マクロのセキュリティでc:\temp\は信頼できる場所にはして見たのですが変わりませんでした。 Declare Sub testDll Lib "C:\Temp\testDll.dll" () Sub Macro1() ' Cells.Select Selection.Copy Workbooks.Add Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False ChDir "C:\temp" Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="C:\temp\testDATA.csv", FileFormat:=xlCSV, _ CreateBackup:=False ActiveWindow.Close Range("A1").Select Application.DisplayAlerts = True Call testDll '計算結果の読込み sdname = "C:\temp\testMES.csv" myfile = Dir(sdname) 'ファイルが存在しなければ空白 If myfile = "" Then '存在しない場合は MsgBox ("エラー発生") 'メッセージを表示 Else Workbooks.Open Filename:=sdname '存在する場合は開ける MsgBox ("正常終了") 'メッセージを表示 End If End Sub

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ファイルがあるのに「見つかりません」って言われるのは、フォルダ、およびファイルのアクセス権がない場合があると思いますが、C:\Temp、およびtest.dllのアクセス権は問題ないでしょうか? (エクスプローラから右クリック→プロパティで、それらしいタブがあると思います。)

ara1300
質問者

お礼

 回答ありがとうございます。  しかし、C:\Temp、およびtestdll.dllのアクセス権をプロパティで調べてみましたが、共にfullコントロールがついており、問題ではありませんでした。  (お礼が遅くなり申し訳ありませんでした)

ara1300
質問者

補足

追記情報です。 1、 windows7+excel2003 の組合せで同じマクロを実行してみると、同じエラーを起こしました。  Windows7の問題の様です。  当然、Windows7でc:\tempのホルダーへのアクセス権は付けました。 2、見つからないといわれるtestDll.dllをc:\WINDOWS\system c:\WINDOWS\system32 の両方にコピーし、declale文を次の様に絶対パスをはずしましたが、エラーメッセージは変わらずでした。 Declare Sub testDll Lib "testDll.dll" ()

関連するQ&A

  • フォルダ内の特定ブックだけを1つのブックにまとめる

    以前こちらで質問させて頂きましたフォルダ内の特定ブックだけを1にのブックにまとめる方法で、大変助かっていましたがブック名が変更になり、教えて頂いたマクロでは実行できなくなったので自分なりに考えたのですがどうしてもできません。 質問時のブック名は「1_****」と「2_****」で 今回「1_****」だけが「1(3)_****」に変更になりました。 下記のマクロでmyfile = dir(mypath & "1_" & "*.xl*")→myfile = dir(mypath & "1(3)_" & "*.xl*")に変更するのはわかるのですが do until myfile = ""   myfile2 = "2" & mid(myfile,2,99)をどう変更すれば良いかわかりません どなたかお助け頂けませんか? sub macro1()  dim myPath as string  dim myFile as string  dim myFile2 as string  mypath = "c:\test\"  myfile = dir(mypath & "1_" & "*.xl*")  do until myfile = ""   myfile2 = "2" & mid(myfile,2,99)   workbooks.open mypath & myfile   workbooks.open mypath & myfile2   application.displayalerts = false   workbooks(myfile).worksheets("2").delete   application.displayalerts = true   workbooks(myfile2).worksheets("2").move after:=workbooks(myfile).worksheets("1")   workbooks(myfile).close true   workbooks(myfile2).close false   myfile = dir()  loop end sub

  • Excel2007 VBA Copyメッソド

    Excel2003で開発されたVBAをExcel2007で動くように修正しているのですが、 次のコードがExcel2007ではエラーになります。  (1)Workbooks.Open Filename:=pthFolder & "\" & nmFile  (2)nmSheet = Workbooks(nmFile).ActiveSheet.Name  (3)Workbooks(WB_Name).Worksheets(S_MAIN).Copy After:=Workbooks(nmFile).Sheets(nmSheet) (1)と(2)は実行されますが、(3)がエラーになり、(4)に飛びます。 (4) SaveError:      MsgBox "エラー発生"      Application.DisplayAlerts = False      Workbooks(nmFile).Close    End Sub どなたか、Excel2007でエラーになる理由と解決策を教えていただけないでしょうか。 既に同じ質問が出ているかもしれませんが、VBA初心者なもので、うまく探せませんので、 ご協力をお願いいたします。

  • 2010excel の記述方法

    2007excelでマクロを記述したものが、実行エラー1004 「Save As メリッドは失敗しました Workbookオブジェクト」と表示されます。 テバックすると NewWkbook.SaveAs FileName:=FileName, FileFormat:=xlExcel8 がエラー表示されます。 すいません、教えてください If Dir(FileName) <> "" Then '##ファイルが既に存在する If MsgBox("既に指定のファイルが存在します。 置き換えますか?", vbOKCancel, "置き換えの確認") = vbCancel Then NewWkbook.Close saveChanges:=False '##保存せずに終了 Exit Sub End If '##指定ファイル置き換え保存 NewWkbook.SaveAs FileName:=FileName, FileFormat:=xlExcel8 Else '##ファイルを新規保存 NewWkbook.SaveAs FileName:=FileName, FileFormat:=xlExcel8←黄色 End If ' NewWkbook.Close saveChanges:=False Application.DisplayAlerts = True

  • エクセル マクロの記述(フォルダーの移動、削除)

    現在開いているエクセルのファイルにマクロを記述し、 1 「処理済」というフォルダーに、開いているエクセルファイルを移動して、同じ名前でエクセルを保存する。 2 「CSV」というフォルダーに、開いているエクセルファイルをCSVファイルに変換して名前を「処理.csv」とし保存する。 3 現在開いているエクセルファイルは削除する。 以上の三つの処理をさせようと、以下のようにしましたが、1,2の処理は出来ましたが、3の開いているエクセルファイルが残ってしまいます。 以上三つの処理が一度に出来るマクロの記述を教えて下さい。 よろしくお願いします Sub マクロ() ActiveWorkbook.SaveAs Filename:="C:\処理済\" & ActiveWorkbook.Name ChDir"C:\CSV" ActiveWorkbook.SaveAs Filename:= "C:\CSV\処理.csv" _ , FileFormat:=xlCSV, CreateBackup:=False Application.DisplayAlerts = False If Workbooks.Count = 1 Then Application.Quit Else ActiveWorkbook.Close End If Application.DisplayAlerts = False End Sub

  • VBAでブック名の拡張子を除去してシートにコピー

    VBA初心者でコード作成で困っております。 下記の通りコードを組みましたが、シート名をブック名に変更して 保存したいのですが、このコードですと拡張子までついてしまいます。 拡張子を除去するためにはどうすればよいでしょうか? アドバイス宜しくお願い致します。 Sub test() 'シート名の変更 Dim MyPath As String Dim MyFile As String Dim Wb As Workbook MyPath = "C:\TEST\" MyFile = Dir(MyPath & "*.xlsx") Do While MyFile <> "" Set Wb = Workbooks.Open(MyPath & MyFile) ActiveSheet.Name = ActiveWorkbook.Name Application.DisplayAlerts = False Wb.Save Application.DisplayAlerts = True Wb.Close (False) MyFile = Dir() Loop End Sub

  • Application.DisplayAlerts =Falseでも警告される?

    下記のコードを実行するとSheet1という名前のシートがないBookを開いた場合、「統合元ファイル○○のSheet1を開けません」という警告がでます。 無ければ集計しなくていいので「はい」を押せばいいのですが、その都度止まってしまうのは困ります。 Application.DisplayAlerts = False としても警告されるのはなぜでしょうか?出ないようにすることは出来ないのでしょうか? Sub test03() 'Sheet1のみ開かずに統合 Dim MyFile As String, MyPath As String Dim SumFile() As Variant, i As Long MyPath = ThisWorkbook.Path & "\" MyFile = Dir(MyPath & "*.xls", vbNormal) Do Until MyFile = "" If MyFile <> ThisWorkbook.Name Then ReDim Preserve SumFile(i) Application.DisplayAlerts = False SumFile(i) = "'" & MyPath & "[" & MyFile & "]Sheet1'!R1C1:R10C2" 'A1からB10のLinkを変数に代入 Application.DisplayAlerts = True i = i + 1 End If MyFile = Dir Loop If i = 0 Then MsgBox "データが有りません ( ̄□ ̄;)!!": Exit Sub Worksheets("Sheet1").Range("A1").Consolidate Sources:=SumFile() End Sub

  • Excel2007VBAファイルの開き方について

    ●質問の主旨 Cドライブのフォルダにあるファイルを下記コードで開こうとしましたが、 開くことができませんでした。 1.なぜ下記コードでは開くことができないのでしょうか? 2.開くためにはコードを書き換える必要があるのでしょうか? 3.書き換えるとすればどのように書き換えれば良いでしょうか? ご存知の方ご教示願います。私はVBA初心者です。 ●質問の捕捉 コードはあるVBAの参考書をまるまる引用したものです。 その説明として、 「該当ファイルの存在を予めチェックし、存在すれば開き、 存在しないときはメッセージを表示する」 とあります。 もちろん"C\data\test.xlsm"という場所、ファイルは予め用意しています。 ●コード Sub 存在するときだけ開く() myfile = "C\data\test.xlsm" If Dir(myfile) <> "" Then Workbooks.Open myfile Else MsgBox "ファイルが存在しません" End If End Sub

  • excel vba

    (1)下記のマクロに出てくるApplication.CutCopyMode = False というのは何でしょうか。 (2)また自分でマクロ記録してあるシートを、別のシートにコピーしたとき Application.CutCopyMode = False Selection.Copy というのが、付くときとつかないときがあったんですがなぜそのようなことがおきるのか。 (3)またSelection.Copyというのは何ですか。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2007/1/11 ユーザー名 : ××××× ' ' Workbooks.Open Filename:="C:\aaa\bbbbb\cccc\aaaa_1.xls" Columns("H:H").Select Application.CutCopyMode = False Selection.Cut Columns("E:E").Select Selection.Insert Shift:=xlToRight Columns("I:I").Select Selection.Cut Columns("G:G").Select Selection.Insert Shift:=xlToRight With Selection.Font .Name = "MS 明朝" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With ActiveSheet.PageSetup.PrintArea = "$A$1:$L$61" ActiveWorkbook.Save End Sub

  • EXCELのマクロからDLLをコール

    EXCELのマクロからDLL内部の関数をコールしたいのですが、うまくいきません。 DLLは、BCC DeveloperとBorland C++ Builer 5を使って作りました。DLLのソースは以下の通りです。 dlltest.cpp ===================================== #include <stdio.h> extern "C" long __stdcall put_sen(char *sen_area) { strcpy(sen_area, "Hello world!"); return 0; } ===================================== EXCELのマクロは以下の通りです。 ===================================== Declare Function put_sen Lib "dlltest.dll" (ByVal sen_area As String) As Long Sub test() Dim sen_area As String Dim rtn As Long t_st = ActiveWorkbook.Path ChDrive Left(t_st, 1) ChDir t_st rtn = put_sen(sen_area) MsgBox sen_area End Sub ===================================== これで、EXCELファイルとDLLファイルを同じフォルダに入れて、マクロを実行すると、 実行時エラー'453' エントリ put_sen が DLLファイル dlltest.dll 内に見つかりません。 とエラーが表示されます。 以前、VC++でDLLを作った際には、これでうまくいったと思うのですが…。 どこがいけないのか、どなたかご教授よろしくお願いします。 ちなみにOSはWindows2000です。

  • EXCEL2007 マクロ

    EXCELのマクロですが、EXCEL2003で作成しました。 EXCEL2003では正常に動作しましたが、EXCEL2007だと「処理を開始する」「OK」のメッセージが出た後 『インデックスが有効範囲にありません』 とエラーがでると他の人に言われたのですが、この中に2007だと使用できない命令があるでしょうか? あるとしたら、2007~2000まで使用できる代わりの命令などはあるでしょうか? よろしくおねがいします。 Private Sub CommandButton2_Click() Dim fName As String, orgDir As String Const タイトル = "「csv」ファイルを選択してから、[開く]ボタンをクリックしてください。" Const ファイルの場所 = "C:\" 'ファイルの場所 Const フィルタ1a = "CSV" 'ファイルの種類 Const フィルタ1b = "*.csv" 'ファイルの拡張子 orgDir = CurDir ChDir ファイルの場所 fName = Application.GetOpenFilename(フィルタ1a & "," & フィルタ1b, 1, タイトル) If fName <> "False" Then Workbooks.Open fName Else MsgBox "[キャンセル]または[×]ボタンがクリックされました。", , "タイムカード注入" Exit Sub End If ChDir orgDir If MsgBox("処理を開始します", vbOKCancel + vbInformation, "最終確認") = vbCancel Then Exit Sub End If Windows("2008.csv").Activate Sheets("2008").Range("C3:C33").Select Application.CutCopyMode = False Selection.Copy Windows(ThisWorkbook.Sheets("報告書").Range("A2") & ".xls").Activate Range("G5:G35").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Windows("2008.csv").Activate Sheets("2008").Range("K3:K33").Select Application.CutCopyMode = False Selection.Copy Windows(ThisWorkbook.Sheets("報告書").Range("A2") & ".xls").Activate Range("I5:I35").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Workbooks("2008.csv").Close SaveChanges:=False End Sub

専門家に質問してみよう