1374124379 質問です

Excel 2010で作成したマクロをExcel 2007で実行すると
コンパイルエラー
プロジェクトまたはライブラリーが見つかりません
のエラーがでて止まります
解決方法を教えてください
Microsoft ActiveX Data Objects 2.8 Library にチェックは入れました

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/07/19 11:38:25
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:dawakaki No.1

回答回数797ベストアンサー獲得回数122

ポイント50pt

[参照設定]ダイアログに「参照不可のライブラリ」がないか、確認してみてください。
詳しくは下記サイトをご覧下さい。
http://www.moug.net/tech/exvba/0150128.html

id:inosisi4141

ありがとうございます
一度
参照不可のライブラリ
がありましたのでチェック外してやってみました
うまくいきませんでしたので再度検証してみます

2013/07/19 10:49:04

その他の回答1件)

id:dawakaki No.1

回答回数797ベストアンサー獲得回数122ここでベストアンサー

ポイント50pt

[参照設定]ダイアログに「参照不可のライブラリ」がないか、確認してみてください。
詳しくは下記サイトをご覧下さい。
http://www.moug.net/tech/exvba/0150128.html

id:inosisi4141

ありがとうございます
一度
参照不可のライブラリ
がありましたのでチェック外してやってみました
うまくいきませんでしたので再度検証してみます

2013/07/19 10:49:04
id:sinrabanshyo No.2

回答回数139ベストアンサー獲得回数17

ポイント50pt

Microsoft ActiveX Data Objects 2.8 Library よりも
Microsoft ActiveX Data Objects 2.5 Library とか
Microsoft ActiveX Data Objects 2.0 Library
で試してみていかがでしょうか。

id:inosisi4141

ありがとうございます
ヴァージョンを下げると上手くいく考えはしていませんでした
早速やってみます。

2013/07/19 10:50:40
  • id:Silvanus
    Dim RS As ADODB.Connection
    Set RS = New ADODB.Connection
    を以下の様に変更したらどうなりますでしょうか?
    Dim RS As Object
    Set RS = CreateObject("ADODB.Connection")
  • id:inosisi4141
    Dim RS As ADODB.Decordset
    Set RS = New ADODB.Decordset
    の部分でしょうか?
  • id:inosisi4141
    Dim RS As ADODB.Recordset
    Set RS = New ADODB.Recordset
    間違えました
    の部分でしょうか
  • id:Silvanus
    あ、済みません…間違えてましたね。orz
    そうです。その部分を
    Dim RS As Object
    Set RS = CreateObject("ADODB.Recordset")
    に書き換える、の間違いです。
  • id:inosisi4141
    お手数おかけします
    今度は
    RS.Fields.Append "Name", adVarWChar, 256

    adVarWChar
    の部分でとまりました
  • id:Silvanus
    あ、またもや済みません…それを忘れてました。orz
    Sub jikkou(...)の直後にでも次の三行を入れておいて下さい。
    Const adVarWChar = 202
    Const adDate = 7
    Const adInteger = 3
  • id:inosisi4141
    Sub jikkou(p As String, S As String)

    Const adVarWChar = 202
    Const adDate = 7
    Const adInteger = 3


    'Recordsetを作成
    Dim RS As Object
    Set RS = CreateObject("ADODB.Connection")
    RS.Fields.Append "Name", adVarWChar, 256
    RS.Fields.Append "Date", adDate
    RS.Fields.Append "Size", adInteger
    RS.Open

    'データを格納
    Dim path As String
    path = Dir(p & "*." & S)
    Do Until path = ""
    RS.AddNew "Name", path
    RS.Update
    path = Dir()
    Loop


    If RS.RecordCount = 0 Then
    MsgBox "該当データなし"
    RS.Close
    Set RS = Nothing
    Exit Sub
    End If

    'ソート
    RS.Sort = "Name" 'ファイル名順
    RS.MoveFirst

    '表示
    k = 1
    Do Until RS.EOF
    a = Right("0" & Trim(str(k)), 2) & "-"
    Name p & RS.Collect("Name") As p & a & RS.Collect("Name")
    k = k + 1
    If k > 99 Then Exit Do
    RS.MoveNext
    Loop

    RS.Close
    Set RS = Nothing

    End Sub

    のk = 1
    no
    kで止まりました
  • id:inosisi4141
    '表示
    k = 1


    k =

    で止まりました
    お手数おかけします
  • id:Silvanus
    エラーメッセージも書いていただければ。
    Option Explicit で変数の明示的宣言を必須としているのに
    変数 k の宣言を忘れていらっしゃる、ということでしょうか?
    k = 1 の前の行に Dim k As Integer といれたらどうなりますか?
  • id:inosisi4141
    すみませんでした
    エラーメッセージは同じ
    コンパイルエラー
    プロジェクトまたはライブラリーが見つかりません
    です
    今度は
    a = Right("0" & Trim(str(k)), 2) & "-"

    のstr
    の部分で止まりました
  • id:inosisi4141
    Sub jikkou(p As String, S As String)

    Const adVarWChar = 202
    Const adDate = 7
    Const adInteger = 3

    'Recordsetを作成
    Dim RS As Object
    Set RS = CreateObject("ADODB.Connection")
    RS.Fields.Append "Name", adVarWChar, 256
    RS.Fields.Append "Date", adDate
    RS.Fields.Append "Size", adInteger
    RS.Open

    'データを格納
    Dim path As String
    path = Dir(p & "*." & S)
    Do Until path = ""
    RS.AddNew "Name", path
    RS.Update
    path = Dir()
    Loop


    If RS.RecordCount = 0 Then
    MsgBox "該当データなし"
    RS.Close
    Set RS = Nothing
    Exit Sub
    End If

    'ソート
    RS.Sort = "Name" 'ファイル名順
    RS.MoveFirst

    '表示
    Dim k As Integer
    k = 1
    Do Until RS.EOF
    a = Right("0" & Trim(str(k)), 2) & "-"
    Name p & RS.Collect("Name") As p & a & RS.Collect("Name")
    k = k + 1
    If k > 99 Then Exit Do
    RS.MoveNext
    Loop

    RS.Close
    Set RS = Nothing

    End Sub



    a = Right("0" & Trim(str(k)), 2) & "-"

    の部分のstrで止まりました

    お手数ですよろしくお願いします
  • id:Silvanus
    そのエラーが出ちゃいますか…何でだろう?
    当該の行の直前に Dim a As String を追加してみて下さい。
    Str()は古典的な関数なので、それそのものがエラーの原因にはなっていないと思うんですが
    str(k)と頭文字が小文字になっちゃってるのが気になります…何でかなぁ。
  • id:inosisi4141
    お手数おかけします
    当該の行の直前に Dim a As String を追加してみて下さい。

    Dim a As String
    a = Right("0" & Trim(str(k)), 2) & "-"

    にしましたが同じところで止まりました。

    strのsを大文字にしたら
    保存すると小文字になって元のもどります
    なぜでしょう
  • id:taknt
    a = Right("0" & Format(k, "#0"), 2) & "-"

    にしてみたら いかがでしょうか?
  • id:inosisi4141
    ありがとうございます

    a = Right("0" & Format(k, "#0"), 2) & "-"

    にしたら
    Format
    で止まりました
    よろしくお願いします
  • id:Silvanus
    あ、Formatで代用するのを先に書かれてしまいましたw。
    ただ、その場合、ここでの使用例について言えば単に
    a = Format(k,"00") & "-"
    で良いのでは?
  • id:Silvanus
    え~、Formatで止まりましたか…何でだろう?
  • id:Silvanus
    a = Right("0" & Trim(CStr(k)), 2) & "-"
    これでもダメかなぁ…orz。
  • id:inosisi4141
    '表示
    Dim k As Integer
    k = 1
    Do Until RS.EOF
    Dim a As String
    a = Right("0" & Trim(CStr(k)), 2) & "-"
    Name p & RS.Collect("Name") As p & a & RS.Collect("Name")
    k = k + 1
    If k > 99 Then Exit Do
    RS.MoveNext
    Loop

    RS.Close
    Set RS = Nothing

    End Sub

    の a = Right("0" & Trim(CStr(k)), 2) & "-"

    Trimで止まりました。
  • id:inosisi4141
    a = Format(k,"00") & "-"

    も試しましたがFormatでとまりました
    よろしくお願いします
  • id:Silvanus
    CStrの場合は、符号表示部の空白が追加されないから
    Trimは無くてもOKですね。ただ、あってもエラーにはならない筈なんですけど。
    a = Right("0" & CStr(k), 2) & "-"
    これでうまくいけばいいんですけど…。
  • id:inosisi4141
    お手数おかけします

    a = Right("0" & CStr(k), 2) & "-"

    Right
    で止まりました
  • id:Silvanus
    やっぱり
    「コンパイルエラー  プロジェクトまたはライブラリーが見つかりません」が
    出るんですか!?
    何故なんだぁ~!?(泣)
  • id:inosisi4141
    そうなんです
    仕事としてはファイル名.csvに連番を01-から99-
    を付けるマクロです2010ではうまくいくのに2007ではエラーになります
    このマクロの前後に別なマクロをsheetでつないでいますが
    それも影響しますか
    sheet1からsheet6までのsheet3に記載しています
  • id:Silvanus
    根底にあるクリティカルな問題が私にはみえていないのでしょうね…。
    取り敢えず小手先の解決法として
    a = Right("0" & CStr(k), 2) & "-"
    の行を以下の5行
    If k < 10 Then
    a = "0" & CStr(k) & "-"
    Else
    a = CStr(k) & "-"
    End If
    に変更してみましょうか。
    ここを切り抜けても次にまた何か起こりそうですが…orz。
  • id:inosisi4141
    3704
    RUNメソッドは失敗しました
    Applicationオブジェクト

    のエラーがでました
    よろしくお願いします
  • id:inosisi4141
    '表示
    Dim k As Integer
    k = 1
    Do Until RS.EOF
    Dim a As String
    If k < 10 Then
    a = "0" & CStr(k) & "-"
    Else
    a = CStr(k) & "-"
    End If



    Loop

    RS.Close
    Set RS = Nothing

    End Sub

    修正後の記述です
  • id:inosisi4141
    PCはWIN XPを使用しています
  • id:Silvanus
    こちらに記入されているリストの中には
    Run メソッドがどこにも見当たらないのですが、
    どこか他のサブルーティンにあるのですか?
  • id:taknt
    なんか提示している箇所以外の影響が大きいような気がしますが・・・。
  • id:inosisi4141
    Silvanus 様

    いろいろお手数お掛けして申し訳ございません。ありがとうございます
    昨日のマクロ修正箇所で報告漏れががありました
    下記行追加した時点で

    規約違反として通知.. の文言も赤で表示されていました。

      Const adVarWChar = 202
    Const adDate = 7
    Const adInteger = 3
    規約違反として通知..


    このマクロは単独で実行しても同じエラー現象がでます。

    3704
    RUNメソッドは失敗しました
    Applicationオブジェクト

    の前段階ですこのエラーは再度検証してみます
    宜しくお願いします
  • id:inosisi4141
    きゃづみぃさん
    そうですね
    単独のマクロで最初から検証してみます
    Excel2010で今まで動いていた状態から単独のマクロで検証する
    下記を参考する
    1、[参照設定]ダイアログに「参照不可のライブラリ」がないか、確認してみてください。
    2、Microsoft ActiveX Data Objects 2.8 Library よりも
    Microsoft ActiveX Data Objects 2.5 Library とか
    Microsoft ActiveX Data Objects 2.0 Library

    以上で同じエラーがでたら今までの修正方法で検証してみる

    いろいろお手数おかけしていますよろしくお願いいたします
  • id:inosisi4141
    いつもお世話様です
    ありがとうございます

    連番作成マクロの単独では上手く行きました
    ご迷惑お掛けしました。
    '
    'ツール → 参照設定で Microsoft ActiveX Data Objects *.* Library にチェックを入れておいて下さい

    '


    Sub main()
    Dim p As String
    '対象フォルダを指定してください。
    'このフォルダに この実行用のブックは 入れないでください。

    p = "C:\test\"

    '処理対象となる拡張子を指定して 呼び出します。
    Call jikkou(p, "csv")

    End Sub


    Sub jikkou(p As String, s As String)

    'Recordsetを作成
    Dim RS As ADODB.Recordset
    Set RS = New ADODB.Recordset
    RS.Fields.Append "Name", adVarWChar, 256
    RS.Fields.Append "Date", adDate
    RS.Fields.Append "Size", adInteger
    RS.Open

    'データを格納
    Dim Path As String
    Path = Dir(p & "*." & s)
    Do Until Path = ""
    RS.AddNew "Name", Path
    RS.Update
    Path = Dir()
    Loop


    If RS.RecordCount = 0 Then
    MsgBox "該当データなし"
    RS.Close
    Set RS = Nothing
    Exit Sub
    End If

    'ソート
    RS.Sort = "Name" 'ファイル名順
    RS.MoveFirst

    '表示
    k = 1
    Do Until RS.EOF
    a = Right("0" & Trim(Str(k)), 2) & "-"
    Name p & RS.Collect("Name") As p & a & RS.Collect("Name")
    k = k + 1
    If k > 99 Then Exit Do
    RS.MoveNext
    Loop

    RS.Close
    Set RS = Nothing

    End Sub


    以上が単独マクロです。

    今回の質問は一旦終了させていただきます。

    皆様のご支援ありがとうございました
    たくさんのご指導を感謝いたします
    こちらの質問方法に問題がありましたことを
    お詫びいたします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません