• 締切済み

VBコンパイルエラー

エクセルで入力したデータを転送してアクセスで管理するシステムを流用したいのですが、 実行するとコンパイルエラーが発生してしまいます。 作成した際に使用したのはエクセル2000とアクセス2000 今回使用したいのがエクセル2013とアクセス2013です。 下記に記載するのがVBのコードです。 このまま実行すると『プロジェクトまたはライブラリが見つかりません』と表示されます。 Sub データ転送() Dim tempData() As Variant Dim str As String Dim tempDB As DAO.Database Dim tempRecordset As DAO.Recordset Dim intCnt As Integer Dim i As Long Dim j As Long Dim res As VbMsgBoxResult res = MsgBox("データを転送しますか?", vbYesNo + vbExclamation) If res = vbYes Then str = "I:\営業部\近隣関係\稼動分析\近隣稼動データVer104.mdb" Set tempDB = OpenDatabase(str) Set tempRecordset = tempDB.OpenRecordset("Q_調査日カウント") For intCnt = 1 To tempRecordset.Fields.Count Cells(1, intCnt).Value = tempRecordset.Fields(intCnt - 1).Name Next Sheets("データ保持日").Select Columns("A:A").Select Selection.ClearContents Range("A1").CopyFromRecordset tempRecordset tempRecordset.Close tempDB.Close Set tempRecordset = Nothing Set tempDB = Nothing Else MsgBox ("キャンセルしました。") GoTo 0 End If Sheets("入力フォーム").Select If Range("F2").Value = 0 Then Sheets("出力データ").Select With Range("A1").CurrentRegion tempData = .Resize(.Rows.Count - 1).Offset(1).Value End With Set tempDB = OpenDatabase(str) Set tempRecordset = tempDB.OpenRecordset("T_データ") For i = 1 To UBound(tempData, 1) With tempRecordset .AddNew For j = 1 To UBound(tempData, 2) .Fields(j - 1) = tempData(i, j) Next .Update End With Next tempRecordset.Close tempDB.Close MsgBox ("データ転送完了!!") Sheets("入力フォーム").Select Else MsgBox ("データが既に転送済みです。更新する場合はデータベースからデータを削除した後行ってください。") End If 0: Sheets("入力フォーム").Select Range("A1").Select End Sub ダメな所がわかる方ご教授の程よろしくお願いいたします。

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

2013に使ってないけど。 参照設定ダイアログを確認する事からでしょうね

参考URL:
http://www.moug.net/tech/exvba/0150128.html
matuhage
質問者

補足

ご回答ありがとうございます。 参考URLのおかげで記載したエラーは解消されました。 ありがとうございました。

関連するQ&A

  • 2013VBでオーバーフローエラー(2)

    よろしくお願いします。 前回の質問ではエラーの出た部分しか表示していなかった為、回答して頂いた方に 十分な情報が提供できずすみませんでした。 下記がエラーの出た部分までの全プログラムです。 Dim book1 As String 'ブック名1 Dim book2 As String 'ブック名2 Dim book3 As String 'ブック名3 Dim book4 As String 'ブック名4 Dim myday As Date Dim ITI1 As String 'アドレスの格納 Dim ITI2 As String 'アドレスの格納 Dim ITI3 As String 'アドレスの格納 Dim ITI4 As String 'アドレスの格納 Dim ITI5 As String Dim ITI6 As String Dim ITI7 As String Dim ITI8 As String Dim myRange As Range 'コードの個数 Dim myRange1 As Range Dim answer As Integer Dim bunki1 As Integer Dim c As Double 'カウント Dim n As Double 'カウント 'ワークブックの設定 Workbooks("A.xls").Activate book1 = Worksheets("ブックシート設定").Range("c3") 'コピー元 'book2 = Worksheets("ブックシート設定").Range("c5") book3 = Worksheets("ブックシート設定").Range("c7") 'A 'book4 = Worksheets("ブックシート設定").Range("c9") bunki1 = Worksheets("ブックシート設定").Range("c16") myday = Worksheets("ブックシート設定").Range("c14") 'コピー元非表示を表示にする Workbooks(book1).Activate Sheets("B").Select Sheets("B").Select Columns("G:J").Select Selection.EntireColumn.Hidden = False Columns("j:q").Select Selection.EntireColumn.Hidden = False 'コードの個数を数える Workbooks(book1).Activate Sheets("B").Select ITI4 = Range("b65536").End(xlUp).Address '----b列の最終行から上方向の終端セルを選択 Set myRange = Worksheets("B").Range("b6", ITI4) answer = Application.WorksheetFunction.Count(myRange) Set myRange1 = Worksheets("B").Range("e8") For c = 1 To answer 'データー個数のカウント If myRange1.Offset(c) = myday Then n = n + 1 Next 'オーフィルターの設定 Workbooks(book1).Activate Sheets("B").Select ITI1 = Range("b65536").End(xlUp).Address '----b列の最終行から上方向の終端セルを選択 ITI7 = Range(ITI1).Offset(, 11).Address Range("a8", ITI7).AutoFilter FIELD:=5, Criteria1:=Format(myday,"yyyy/m/d") >>>>>ここでオーバーフローエラー 前回指摘されたCriteria1:=mydayをCriteria1:=Format(myday,"yyyy/m/d") に追加変更しました。 読みにくいかもしれませんがよろしくお願いします。

  • うまくVBが組めません

    会社でエクセルを使ってデータをまとめているのですがVBのユーザーフォームで作ろうとしています。今困っていることはoptionbuttonを4個使い選択式にし、選択したら「OK」buttonを押すことで各optionbuttonに対応したsheetへ飛ぶようにしたいのですがうまくいきません。 現状ですが Private Sub CommandButton1_Click() dim str as string str=optionbutton1.caption select case str case "****" sheets("1234").select ・    ・    ・ end select End Sub としています。 根本的に違うかもしれないので指摘してください。 ちなみに3日前に始めてVBを教えてもらいました。

  • VBAエラー

    下のもので、 rangeクラスのselectメソッドが失敗しました がでてしまいます。 ★★★のところで止まってしまいます。 1つ目のエクセルで、ファイル名を入力、検索して開き、8行目でオートフィルタをするマクロです。 オートフィルタのところで止まります。 どこが悪いのか、ご教授いただけませんでしょうか。 よろしくお願い致します。 Sub ファイルを開く()  Dim str As String   Dim nCnt As Integer  Dim sHozon As String  Dim sFilename As String Dim Grp As String If Range("B2").Value <> "バーコード読み取り" Then '保存場所を指定 sHozon = "※※※" Grp = Right(Range("B2"), Len(Range("B2")) - InStr(Range("B2"), "F")) 'ファイル名を設定 sFilename = "AA" & Left(Range("B2"), 10) & ".xls" 'ファイルが存在しているか確認 str = sHozon & "\" & sFilename str = Dir(str) If (str <> sFilename) Then 'ファイルが存在しない場合、エラー MsgBox ("ファイルが存在しません") Else 'ファイルを開く Range("B2").Select Workbooks.Open sHozon & "\" & sFilename End If End If Workbooks(sFilename).Activate Sheets("B").Select ActiveSheet.Unprotect Workbooks(sFilename).Activate Rows("8:8").Select   ★★★ Selection.AutoFilter ActiveSheet.Range("$A$8:$BL$1008").AutoFilter Field:=58, Criteria1:=Grp

  • コンパイルエラーの対処がわかりません。

     初心者です。エクセルのマクロで次のようなコードを書いたとき(2)のif文のところで 「コンパイルエラー:メソッドまたはデータメンバが見つかりません」 と表示されます。  Dim A As Worksheet   Set A = Worksheets(1)    If Sheets(1).CheckBox1 = True Then   '(1)     Range("A1") = 1    End If    If A.CheckBox1 = True Then       '(2)     Range("B1") = 1    End If  どちらも同じ意味だと思っているのですが、なぜ(2)ではエラーと なるのかわかりません。詳しい方、ご教示願います。

  • いつも参考にさせて頂いてます。

    いつも参考にさせて頂いてます。 Access2003で検索フォームを作成しています。 find系メソッドで検索を行い、フォームに表示させるのですが 該当データが複数あった場合の処理について質問させてください。 現在、該当データが複数あった場合、ループの中でfindnextを使用し msgboxにて次の該当データを表示させるかどうかという条件分岐をしています。 ただ、この方法だとmsgboxが画面の真ん中に出てしまうので 表示されたフォームが見ずらく、使い勝手が悪いのです・・・。 そこで自分で作成したmsgboxのようなフォームを作ったのですが どのようにしてそのフォームからの戻り値を受け取るのかと 処理の流れがわかりません。 わかる方いましたら教えてください。 宜しくお願いします。 Private Sub 検索_Click() Dim db As Database Dim rs As Recordset Dim str As String Dim msg As String Set db = CurrentDb Set rs = db.OpenRecordset("取引テーブル", dbOpenDynaset) str = "取引番号='" & Me.検索 & "'" rs.FindFirst str If rs.NoMatch = False Then Me.torihikiNo.Value = rs.Fields("取引番号") Me.torihikiDay.Value = rs.Fields("取引日") Me.kokyakuName.Value = rs.Fields("顧客名") Do Until rs.EOF rs.FindNext str If rs.NoMatch = False Then msg = MsgBox("該当データが複数存在します。次を表示しますか?" _ '←ここを変更したいのです。 , vbYesNo _ , "確認") Select Case msg Case vbYes Me.torihikiNo.Value = rs.Fields("取引番号") Me.torihikiDay.Value = rs.Fields("取引日") Me.kokyakuName.Value = rs.Fields("顧客名") Case vbNo Exit Do End Select Else MsgBox "該当データはこれ以上ありません。" Exit Do End If Loop Else Me.torihikiNo.Value = vbNullString Me.torihikiDay.Value = vbNullString Me.kokyakuName.Value = vbNullString MsgBox "該当するデータはありません。" End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub

  • 変数の使い方の注意点なんですが・・・?

    Windows XP Home Edition Excel 2002 当方は、まだ基本がしっかり頭に入っていないので、 勝手な疑問が出てきているようでございます。 まだまだ勉強中ですが、 下記コードの場合、動作はしますが、 変数 c の使い方は間違っているのではないですか? 4は、 同プロシージャ内なので、 変数 c と r というように、区別して記述しないといけないのではないかと思って いるのですが。 3は、 プロシージャが違うので問題はないと思っております。 Dim r As Range, s As Range と記載してもいいのでしょうか?   つまり、曖昧に、ごっちゃ混ぜにしてしまうと、エラー等、PCに支障をきたすことになって しまうのではないかと心配でございます。 また、こんな記述だと、エラー等、PCに支障をきたすことになって しまうという例を 1つか2つ(又はHP等) 教えて頂けると有り難いです。 初歩的な例で結構です。 全くの初歩的な(ざっくりな)お答えで結構ですのでよろしくお願い致します。 Sub てす1() Dim r As Range, s As Range   Set s = Cells(1, 1)   s.Select  MsgBox " A1 です " End Sub '------------------------ Sub てす2() Dim r As Range, s As Range   Set s = Cells(1, 2)   s.Select  MsgBox " A2 です " End Sub '------------------------ Sub てす3() Dim r As Range, s As Range   Call てす1   Call てす2  MsgBox "  A1とA2 です " End Sub '------------------------ Sub てす4() Dim r As Range, s As Range   Set s = Cells(1, 1)   s.Select  MsgBox " A1 です "   Set s = Cells(1, 2)   s.Select  MsgBox " A2 です "  MsgBox " A1とA2 です " End Sub

  • エクセルのVBユーザーフォームがうまく組めません

    会社でエクセルを使ってデータをまとめているのですがVBのユーザーフォームで作ろうとしています。今困っていることはoptionbuttonを4個使い選択式にし選択したら「OK」buttonを押すことで各optionbuttonに対応したsheetへ飛ぶようにしたいのですがうまくいきません。 現状ですが Private Sub CommandButton1_Click() dim str as string str=optionbutton1.caption select case str case "****" sheets("1234").select ・    ・    ・ end select End Sub としています。 間違いがありましたら指摘してください。 ちなみに3日前に始めてVBを教えてもらいました。

  • ExcelのVBAについて(勉強中のです。)

    ExcelのVBAについて(勉強中のです。) ここからコード3以降に入力したコードを抜き出してデータ表を作成しそれを保存するコードを作成したいです。例えばCSV形式にするとか? データ表は1日分の表示で、保存して週間や月間または統計データまでを視野にいれています。今回は保存する所です。。 利用しやすい状態と保存形式で、よろしくお願いします。データは生活記録みたいなものです。何したどうしたどうなった? ※大分分岐する予定で、作成中であり、今回はコードの整理は不要です。 '///Sheet1/// Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim time7 As Range For Each time7 In Target If time7.Column = 1 Then time7.Offset(0, 4).Value = Format(Now, "Short Time") & vbCrLf & _ Format(Now, "yyyy/mm/dd hh:nn:ss AM/PM") End If Application.EnableEvents = False Application.EnableEvents = True Next time7 '(1)シートを変数にセット Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") '(2)シートを指定してデータを転記 ws2.Range("A3:H3").Value = ws1.Range("A3:H3 ").Value End Sub Private Sub Worksheet_Activate() ' ' 新規行挿入 ' ' Worksheets("Sheet2").Range("3:3").Insert Sheets("Sheet1").Range("H3").Select ActiveCell.FormulaR1C1 = "5" Sheets("Sheet1").Range("E3").Select Selection.ClearContents Dim str_Left As String 'セルE4に文字列、セルH4に数字を予め入れておくこと。 str_Left = Left(Cells(4, 5), Cells(4, 8)) MsgBox str_Left & vbCrLf & " " & "OKボタンを押してください!" Sheets("Sheet1").Range("A3").Select Dim se_r As String se_r = Application.InputBox("バーコードを入力してください") Select Case se_r Case "False" MsgBox "キャンセルされました" Case "" MsgBox "空欄が入力されました" Case Else Range("A3").Value = se_r End Select End Sub ' ///Sheet2/// Private Sub Worksheet_Activate() Dim Emp(1 To 300) As String Dim msg As String Dim i, i2, Cnt As Integer Dim N_In As Variant For i = 3 To 3 If IsEmpty(Cells(i, 1).Value) = False Then 'ここで空欄判定 Worksheets("Sheet1").Range("3:3").Insert '対象セルアドレスを改行処理 End If Next i '(1)シートを変数にセット Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") ws1.Activate End Sub

  • VBAエラー '1004' について

    VBA初心者です。 下のプログラムの★部分で 「実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。」 というエラーが発生します。 どなたか原因を教えていただけないでしょうか?? Dim aRange As Range Dim bRange As Range Set aRange = Range(Sheets("シートA").Range("A3"), Sheets("シートB").Range("A3").End(xlDown)) ★ Set bRange = Range(Sheets("シートB").Range("A3"), Sheets("シートB").Range("A3").End(xlDown)) 下のシートBの範囲取得と同じことをしているつもりなのですが、うまくいきません。 どうぞよろしくお願い致します。

  • グラフの「項目軸ラベルに使用」をVBAで

    VBAで項目軸ラベルの範囲を設定したいのですが分からないので教えてください。データ系列は以下で入れられるのですが・・・ Dim R1 as Range Dim R2 as Range Dim n as Integer Range("a1").Select n=range("h1").value Set R1 =Range(Cells(1,1),Cells(n,1)) Set R1 =Range(Cells(1,2),Cells(n,2)) Sheets("グラフ").Select With ActiveChart .SetSourceData R1 たぶんここに入れるのでは・・・ End With Set R1 = Nothing Set R2 = Nothing

専門家に質問してみよう