• 締切済み

アクセスのイベント(クラスモジュール)

こんにちは。 Win2000 pro ,Access2000 を使っています。 私の知らない人の作ったアクセスがうまく起動しなくなってしまいました。それを修正しなくてはいけないのですが、全然わかりません。デバックで、以下のラインが黄色くなります。 \'データ内容をデータ行に出力 row = 1 While RS.EOF = False DoEvents row = row + 1 For col = 1 To RS.Fields.Count obj.ActiveSheet.Cells(row, col).Value = RS.Fields(col - 1).Value Next RS.MoveNext Wend この中の obj.ActiveSheet.Cells(row, col).Value = RS.Fields(col - 1).Value のラインが黄色くなります。 うまく説明できないのですが、アクセスに取り込んだデータを編集してエクセルに出力する作業の中で、とりこむデータの位置(どこをどこに)を指定してるようなのですが・・・。 エラーメッセージは何度が試しましたが一度だけでてきて、「With???変数の指定がされていません」というような内容でした。(デバックしたら消えてしまい覚えてないです。) もし何がおかしいのかわかったら教えてください。

みんなの回答

  • akaaka
  • ベストアンサー率36% (4/11)
回答No.1

メニューバーより[ツール]-[参照設定] を選択して [Microsofot Excel *** Object Library] というようなチェックがついているでしょうか これがないと、accessからExcelのオブジェクトが 操作できません。

satochan1228
質問者

お礼

お返事が遅くなり申し訳ありません。実は補足を記入したつもりだったのですが、きちんと反映できなかったようです。 ご回答ありがとうございました。参照設定をチェックしたところ、こちらは問題ないようでした。 アクセスの基礎がまだまだなので、質問もあいまいで申し訳ありません。質問させていただいた課題(アクセスの修正)の仕事が先送りになりましたので、もう少し勉強してから改めてご質問いたします。 ありがとうございました。

関連するQ&A

  • Excel 改ページのマクロ

    同シート内で改ページを設定するマクロを、ここで教えてもらったのですが、改ページを判断するデータの列が関数(vlookup)で持ってきたデータの場合にうまく機能しません。下のマクロに手を加えれば可能でしょうか? Sub Macro4() Const col As String = "A" '改ページを判断するデータの列名 Dim idx As Long Dim sv sv = Cells(1, col).Value For idx = 1 To Cells(65536, col).End(xlUp).Row   If Cells(idx, col).Value <> sv Then     ActiveSheet.HPageBreaks.Add Before:=Rows(idx)     sv = Cells(idx, col).Value   End If Next idx End Sub

  • アクセステーブルのデータをエクセルシートへ

    お世話になります。 下記のようにベタ書きで、データを取得していますが、 コード行数を少なくしたいと思っており、 FOR NEXTで対応出来ないかと考えてやって見ましたが うまく行きません。アクセステーブルのフィールドは順番に並んで います。コードの書き方をご教示頂きたくお願い致します。     記 myrng.Cells(n, 1) = rs!住所 myrng.Cells(n, 2) = rs!氏名 myrng.Cells(n, 3) = rs!年齢 myrng.Cells(n, 4) = rs!性別 myrng.Cells(n, 5) = rs!職業 ↓↓(下記の書き方で、「実行時エラー3265      このコレクションには項目がありません」と      出てしまいす。) For h = 1 To 5  myrng.Cells(n, h) = rs!Fields(h).Value Next h

  • データ抜き取りマクロの改良について

    エクセルのデータを10秒に一つごと抜き出すマクロがあります。 これでデータを抜き出すと1行目のサンプル名がぬけるので、 抜けないように改良したいです。 僕はマクロ勉強したことないので教えてください。 以下のマクロを改良して、1行目にデータがのるようにしてください。 Sub nukitori() ' Macro Nukitori ' I.Tsumagari nukitori_step = 10 i = 2 ii = 1 Dim X As Worksheet Set X = ActiveSheet MsgBox ("shortdataのシートがある場合は削除") Worksheets.Add.Name = "shortdata" While X.Cells(i, 1) <> "" And i < 65535 For col = 1 To 255 Worksheets("shortdata").Cells(ii, col).Value = X.Cells(i, col).Value Next i = i + nukitori_step ii = ii + 1 Wend End Sub

  • マクロの修正について

    マクロの修正について教えてください! ある文書を作成するのに必要なマクロのシートがあります。 抽出元の表を一部修正したため、現在のマクロでは正しく抽出されず、修正しています。 下記に詳細一部コピーしますが、これで抽出すると、同じデータが何度か繰り返し抽出され、重複してしまいます。 マクロの知識が全くなく、修正しているので、お力貸していただけると幸いです。 Application.ScreenUpdating = False '●●書 作成 Sheets("テンプレート").Select Sheets("テンプレート").Copy After:=Sheets(1) ActiveSheet.Name = "●●書" Sheets("まとめ").Select OutPutRow = 19 OutPutSheetCount = 1 'D列で最終行を確認 LastRow = Cells(1, 4).End(xlDown).Row For Row = 2 To LastRow datacount = Cells(Row, 27).Value For i = 1 To datacount If Cells(Row, 28 + (i - 1) * 7).Value <> "" Then '△データがあれば▲情報も出力 (1) = Cells(Row, 11).Value '代理店 (2) = Cells(Row, 26 + (i - 1) * 7).Value 'A (3) = Cells(Row, 5).Value 'B (4) = Cells(Row, 6).Value 'C (5) = Cells(Row, 25 + (i - 1) * 7).Value 'D (6) = Cells(Row, 18).Value 'E (7) = Cells(Row, 4).Value 'F (8) = Cells(Row, 10).Value 'G (9) = Cells(Row, 27 + (i - 1) * 7).Value 'H (10) = Cells(Row, 30 + (i - 1) * 7).Value 'I (11) = Cells(Row, 31 + (i - 1) * 7).Value 'J End If Sheets("●●書").Select Cells(OutPutRow, 2).Value = (11) Cells(OutPutRow + 1, 2).Value = (1) Cells(OutPutRow, 3).Value = (2) Cells(OutPutRow + 1, 3).Value = (3) Cells(OutPutRow, 4).Value = (5) Cells(OutPutRow + 1, 4).Value = (4) Cells(OutPutRow + 1, 5).Value = (6) Cells(OutPutRow, 6).Value = (7) Cells(OutPutRow + 1, 6).Value = (8) Cells(OutPutRow + 1, 7).Value = (9) Cells(OutPutRow + 1, 8).Value = (10) OutPutRow = OutPutRow + 2

  • VBA where複数条件

    Oracle12c office2016 oracleのデータをEXCELのマクロで更新するのにシリアル等の1つしかない条件だと次の内容で更新できます。マクロは抜粋です。 C列(ActiveSheet.Cells(row, 3))の内容がシリアルだと、下記でkomoku1,komoku2が更新可能。 With cmd .CommandText = "UPDATE table1" & " set komoku1 = '" & ActiveSheet.Cells(row, 6) & "' " & ", komoku2 = '" & ActiveSheet.Cells(row, 58) & "' WHERE " & " joken1 = '" & ActiveSheet.Cells(row, 3) & "'" .CommandType = adCmdUnknown .Execute End With 違うテーブルで条件を2つにして設定する場合 ActiveSheet.Cells(row, 3) と ActiveSheet.Cells(row, 4)のAND条件で設定する場合は、どの様な書式になるか教えていただきたく。 ActiveSheet.Cells(row, 3) と ActiveSheet.Cells(row, 4)は両方とも文字列です

  • エクセル VBAで入力フォームを作成し、そのフォームで検索をしようとF

    エクセル VBAで入力フォームを作成し、そのフォームで検索をしようとFindを使って動かしたのですが、一度表示したあと、再度別の値で検索しても最初に検索したデータが表示されてしまいます。 色々調べましたが、全く分からずこちらに質問しました。VBAは全くの初心者で本やHPを見ながら作っています。勉強不足なのは承知しております。どなたかご親切な方のご指導をお待ちしています。 顧客名   ・・・・・・・・・・・ 店舗名   ・・・・・・・・・・・ 略称    ・・・・・  ←ここに入力して検索をクリックします。 ・ ・ Private Sub 検索_Click() Dim w As Variant Dim r As Range ActiveSheet.Unprotect w = 略称.Value If w = "" Then Exit Sub Set r = Cells.Find(What:=w, After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlPart, SearchOrder:=xlByRows, MatchCase:=False _ , MatchByte:=False, SearchFormat:=False) If TypeName(r) = "Range" Then 略称.Value = Cells(ActiveCell.Row, 2).Value 顧客名.Value = Cells(ActiveCell.Row, 3).Value 店舗名.Value = Cells(ActiveCell.Row, 4).Value 締日.Value = Cells(ActiveCell.Row, 5).Value 売単価.Value = Cells(ActiveCell.Row, 6).Value サイクル.Value = Cells(ActiveCell.Row, 7).Value 郵便番号.Value = Cells(ActiveCell.Row, 8).Value 住所.Value = Cells(ActiveCell.Row, 9).Value 電話番号.Value = Cells(ActiveCell.Row, 10).Value FAX.Value = Cells(ActiveCell.Row, 11).Value 担当者.Value = Cells(ActiveCell.Row, 12).Value End If ActiveSheet.Protect End Sub

  • Excel VBA EOFに関して

    テキストボックスにDateを入力し、SQLServerに接続しSelectの結果をシートに書き込むだけのものなのですが、「BOFとEOFのいずれかがTrueになっているか、または現在のレコードが削除されています」というエラーでさっぱりわかりません。どなたかアドバイスをお願い致します。 -前後省略- stdate = UserForm1.stdate.Value endate = UserForm1.endate.Value strsql = "select ***" strsql = strsql & "from ***" strsql = strsql & "where *** and ***.start_date between '" & stdate & "' and '" & endate & "' " con.Open connectionString Set rs = con.Execute(strsql) Sheets("Data1").Select rs.MoveFirst i = 2 Do Until rs.EOF Cells(i, 1) = rs.Fields(0).Value Cells(i, 2) = rs.Fields(1).Value Cells(i, 3) = rs.Fields(2).Value Cells(i, 4) = rs.Fields(3).Value i = i + 1 rs.MoveNext Loop con.Close Set con = Nothing Exit Sub Err_DBConnectOpen: MsgBox Err.Description If con.State <> ADODB.adStateClosed Then con.Close End If Set con = Nothing End Sub

  • Excel  VBAのマクロについて

    以下のようなマクロを作りました。 P4に開始番号P6に終わりの番号があるのですが、P4=P6、つまり、一つだけのシートを作成する分には問題なく動きます。しかしP4に1、P6に5と範囲を増やすとエラーが出て動きません。どこをなおしたらよろしいでしょうか? Option Explicit Sub 一括() Dim I As Worksheet Dim SheetName As String Dim Prompt As String Dim Col As Integer Dim Cell As Range Dim Row As Long Dim hani As Long For hani = Range("P4").Value To Range("P6").Value Set I = ActiveSheet SheetName = Cells(hani + 4, "K").Value & "(" & Cells(hani + 4, "B") & ")" Prompt = SheetName & "が存在します。" Sheets("基本シート").Copy After:=Sheets("基本シート") On Error GoTo 100 ActiveSheet.Name = SheetName On Error GoTo 0 Range("X3") = I.Cells(hani + 4, "B") Range("E8") = I.Cells(hani + 4, "C") Range("A13") = I.Cells(hani + 4, "D") For Col = 0 To 8 Step 4 Set Cell = I.Cells(hani + 4, "D").Offset(, Col) If Cell > 0 Then Prompt = "該当する日付がありません。" & Cell.Address On Error GoTo 100 Row = WorksheetFunction.Match(Cell, [A:A], 0) On Error GoTo 0 Cells(Row, "E") = I.Cells(hani + 4, "E").Offset(, Col) Cells(Row, "H") = I.Cells(hani + 4, "F").Offset(, Col) If Col < 8 Then Cells(Row, "Y") = I.Cells(hani + 4, "G").Offset(, Col) End If End If Next Col Next hani End 100 If Err <> 1004 Then Error Err End End If MsgBox Prompt, vbCritical Application.DisplayAlerts = False ActiveSheet.Delete Application.DisplayAlerts = True Sheets(1).Select End Sub

  • クラスモジュールについて

    下記のコードは型番別で数値1の平均値を型番別でC列に出すコードなのですが もう一つ条件を増やしてD列の日付を2011年〇〇月〇〇日~2012年〇〇月〇〇日まで といった感じで指定して平均値をだしたいのです。 重要なポイントなんですが、例えば下記データベースで2011年のすべてを対象とした場合 2011年で計算された平均値を2012年の方にも全く同じ数値になるようにしたいのです。 ぜひ、アドバイスお願いします。長文で申し訳ありません>< 正解例 A    B    C    D 型番 数値1  平均値  日付 1256  0.25  0.24   2011/1/1 1256  0.11  0.24   2011/3/2 1256  0.36  0.24   2011/5/3 2256  0.55  0.62   2011/10/4 2256  0.56  0.62   2011/11/5 2256  0.75  0.62   2011/12/6 1256  0.05  0.24   2012/2/1 1256  0.06  0.24   2012/4/2 1256  0.07  0.24   2012/6/3 2256  0.88  0.62   2012/9/4 2256  0.98  0.62   2012/11/5 2256  0.74  0.62   2012/12/6 不正解例 A    B    C    D 型番 数値1  平均値  日付 1256  0.25  0.24   2011/1/1 1256  0.11  0.24   2011/3/2 1256  0.36  0.24   2011/5/3 2256  0.55  0.62   2011/10/4 2256  0.56  0.62   2011/11/5 2256  0.75  0.62   2011/12/6 1256  0.05       2012/2/1 1256  0.06        2012/4/2 1256  0.07        2012/6/3 2256  0.88        2012/9/4 2256  0.98        2012/11/5 2256  0.74        2012/12/6 ' 標準モジュール Public Sub 平均値() Dim dct As Object Dim bot As Long Dim k As Variant Dim r As Long Dim itm As Class1 Set dct = CreateObject("Scripting.Dictionary") bot = Cells(Rows.Count, "A").End(xlUp).Row For r = 2 To bot k = CStr(Cells(r, "A").Value) If dct.Exists(k) Then Set itm = dct(k) Else Set itm = New Class1 dct.Add k, itm End If itm.Sum Cells(r, "B").Value Next For r = 2 To bot Cells(r, "C").Value = dct(CStr(Cells(r, "A").Value)).Avg() Next End Sub ' クラスモジュール(オブジェクト名「Class1」) Private total As Double Private cnt As Long Public Sub Sum(ByVal v As Double) total = total + v cnt = cnt + 1 End Sub Public Function Avg() As Double Avg = total / cnt End Function

  • AccessからExcelに罫線付で出力したい

    Access2010使用。 AccessのクエリからExcelにエクスポートした際、罫線などの体裁を整えて出力したいと思っています。 データは下記のコードでなんとか出るようになりましたが、このコードの中に罫線を引くコードを 入れる方法がどうしてもわかりません。 検索してあれこれ試しましたが「オブジェクトがない」や「サポートしてない」などエラーメッセージ が出てしまい、VBAの基礎知識がない私にはどうしてもわかりませんでした。 どうかアドバイスお願いいたします。 (クエリ名は Q_ABC とします) やりたいことは ・データがある行列に格子線を引き、1行目の項目列の下は二重線、外側は太線にしたい。 ・行の高さを数値で指定したい。 です。なお、行数はその都度増えます。 また、できれば 印刷する際の設定で用紙を「A3横」で、常に横1ページに入るように縮小率を設定しておきたい のですが可能でしょうか? どうぞよろしくお願いします。 Private Sub コマンド0_Click() Set xlapp = CreateObject("Excel.application") Dim xlbook As Excel.Workbook Dim xlsheet As Excel.Worksheet Dim rs As New ADODB.Recordset Dim objEXCEL As Object Dim nYLINE As Integer Dim nXLINE As Integer Dim nRCNT As Integer Dim strWORK As String Set xlApp = CreateObject("Excel.Application") Set objEXCEL = CreateObject("Excel.Application") objEXCEL.Visible = True objEXCEL.Workbooks.Add objEXCEL.sheets.Add re.Open "Q_ABC", CurrentProject.Connection, adOpenKeyset, adLockOptimistic '見出しを書き込む objEXCEL.Range("A1") = "ID" objEXCEL.Range("B1") = "氏名" objEXCEL.Range("C1") = "住所"  == 以下T列まで省略 == '項目名をセルの中央に objEXCEL.Range("A1:T1").HoraizontalAlignment = xlHAilignCenterAcrossSelection Dim yLINE As Integer '行カウンター yLINE = 2  'ループ処理 While rs.EOF = False 'accessからデータのセット objEXCEL.Cells(yLINE, "A") = rs.Fields("ID") objEXCEL.Cells(yLINE, "B") = rs.Fields("氏名") objEXCEL.Cells(yLINE, "C") = rs.Fields("住所") == 以下T列まで省略 == rs.MoveNext yLINE = yLINE + 1 Wend 'シートの列幅の自動調整 objEXCEL.Cells.EntireColumn.AutoFit rs.Close Set rs = Nothing End Sub

専門家に質問してみよう