• 締切済み

Accessからエクセルの列に挿入

いつもお世話になっております。 AccessのVBAから開いているエクセル(代理店別進捗)の1行目の右側に2列を挿入をしたいのですが、下記のエラーが出てしまいました。 *プログラムはとりあえず1列追加してみようと思って作ってます。 【エラー内容】 予期せぬエラーが発生しました。 エラーナンバー:424 エラー内容:オブジェクトが必要です。 '代理店別進捗の操作 Dim intColumn As Long ’1行目の左の列番号取得 intColumn = xlWB.Worksheets("代理店別進捗").Cells(Columns.Count).End(xlToLeft).select '取得した列番号に列挿入 xlWB.Worksheets("代理店別進捗").Columns(intColumn).insert

みんなの回答

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.7

'書式を%に変更 が正常で '代理店別進捗の操作 でエラーになるのでしたら 途中にあるのは myRs.Close だけなのでそれを後ろに移動してみるとか 'xlWB.sheets("代理店別進捗").select を xlWB.sheets("代理店別進捗").Activate で有効にするとか そのあたりを変更して自分で考えてください。

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.6

あと .Workbooks.Open(strTemplate) が二回あります。他にも意味がなかったり位置が悪かったりするところがあると思いますので一度見直した方がいいと思います。

aoaoaoki
質問者

補足

in Columnの前のSetを抜いたのですが、 エラー424(オブジェクトが必要です) と表示されてしまいます・・・ ************************************************************ '代理店別進捗の操作 'xlWB.sheets("代理店別進捗").select Dim intColumn intColumn = xlWB.Worksheets("代理店別進捗").Cells(1, Columns.Count).End(xlToLeft).Column xlWB.Worksheets("代理店別進捗").Columns(intColumn).insert '***************************************************************

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.5

Set intColumn = xlWB.Wo ここにSetはいりません

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.4

前回 Set xlWB = .Workbooks.Open(strTemplate) (前後は略してます) としてSetしていたと思いますが、それをしてますかという話です。

aoaoaoki
質問者

補足

はい、Set xlWB = .Workbooks.Open(strTemplate)と記述しています。 繰り返し処理するところは削除していますが、 プログラムは下記になります。 実行すると同じ424 オブジェクトが表示されます。 Set IntColumn=にカーソルを合わせると IntColumn=Empty値と表示されます。 Private Sub コマンド144_Click() Dim strsql1 As String Dim strTemplate As String Dim strFileName As String Dim ExpFileName As String Dim xlapp As Object Dim xlWB As Object Dim myCn As New ADODB.Connection Dim myRs As New ADODB.Recordset 'ExportData削除 DoCmd.SetWarnings False DoCmd.RunSQL "DELETE from T_EDI_01_CVJ" DoCmd.SetWarnings True 'Export用クエリ実行 DoCmd.SetWarnings False DoCmd.OpenQuery ("D_EDI_01_CVJ2") DoCmd.SetWarnings True 'ファイル名作成 ExpFileName = "FY24_03_CVJ_EDI" & "_" & Format(Date, "yyyymmdd") strFileName = GetFileName(False, "MicrosoftExcel ブック (*.xlsx)|*.xlsx", "", ExpFileName & ".xlsx") 'EXCELアプリケーションを起動 Set xlapp = CreateObject("Excel.Application") 'セットする過程が見えないよう一旦不可視 xlapp.Visible = False Set myCn = CurrentProject.Connection strsql1 = "T_EDI_01_CVJ" 'レコードセットオープン myRs.Open strsql1, myCn, adOpenForwardOnly, adLockReadOnly With xlapp 'テンプレートを開く strTemplate = Application.CurrentProject.Path & "\" & "FY24_03_xxx_CVJ_EDI.xlsx" Set xlWB = .Workbooks.Open(strTemplate) 'テンプレートファイルが存在しないときはエラー If Dir(strTemplate) = "" Then MsgBox "テンプレートファイルを確認してください。", vbOKOnly + vbCritical, "エラー" .Visible = True .Quit Exit Sub End If 'テンプレートファイルオープン .Workbooks.Open strTemplate '****************************************************************** 'T_EDI_01_CVJをCVJに出力する。 'T_EDI_01_CVJの結果値出力処理(1行目にヘッダーを表示しているので、2行目1列目からセット xlWB.Worksheets("CVJ").Rows(2).insert xlWB.Worksheets("CVJ").Rows(2).ClearFormats xlWB.Worksheets("CVJ").Cells(2, 1).CopyFromRecordset myRs Dim I As Long I = 2 xlWB.Worksheets("CVJ").Activate Do While xlWB.Worksheets("CVJ").Cells(I, 1) <> "" I = I + 1 Loop '書式を%に変更 xlWB.Worksheets("CVJ").Columns("C:C").numberFormatLocal = "0%" xlWB.Worksheets("CVJ").Columns("A:J").Font.Name = "Meiryo UI" myRs.Close '******************************************************************* '代理店別進捗の操作 'xlWB.sheets("代理店別進捗").select Dim intColumn Set intColumn = xlWB.Worksheets("代理店別進捗").Cells(1, Columns.Count).End(xlToLeft).Column xlWB.Worksheets("代理店別進捗").Columns(intColumn).insert '******************************************************************* '完了したら保存 If Len(strFileName) = 0 Then xlWB.Close SaveChanges:=False xlapp.Quit MsgBox "処理を中止します。", vbOKOnly + vbInformation Exit Sub Else xlWB.SaveAs FileName:=strFileName End If MsgBox "TX Shuttle用ファイルの出力が完了しました。", vbOKOnly + vbInformation End With Set myRs = Nothing: Close Set myCn = Nothing: Close 'Excelを終了します xlapp.Quit Exit Sub End Sub

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.3

> でデバックが出て、カーソルを合わせるとintColumn = 0となりました。 そこでエラーになったのでしたら、そのコードは正しく実行されていませんからintColumnには値が代入されていないと思います。 > 回答1でおっしゃっていた、1がないからということでしょうか? 1が無いと1を省略したことになり1行目になりますから、上記の0になっているのとは関係が無いと思います。 > どのように1を書いたらいいのでしょうか? Cells(行, 列) ですので Cells(1, Columns.Count) です。ただ、一行目はセル結合をしているみたいですので結果はGWの列番号が返ってきますから注意してください。 xlWBは前回のようにSetしているのでしょうか。

aoaoaoki
質問者

補足

Cells(行, 列)なのですね。ありがとうございます。 下記のようにSetを付けているのですが、 Set IntColumn=の部分でデバックがでました。。。 実行時エラー 424 オブジェクトが必要です。 Dim intColumn As Long Set intColumn = xlWB.Worksheets("代理店別進捗").Cells(1, Columns.Count).End(xlToLeft).Column xlWB.Worksheets("代理店別進捗").Columns(intColumn).insert

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.2

回答No.1の追加です。 参照設定でMicrosoft Excel XX.X Object Libraryのチェックはしてますよね。

aoaoaoki
質問者

補足

kkkkkmさん 回答ありがとうございます。 Microsoft Excel 16.0 object~にチェックは入っていました。 intColumn = xlWB.Worksheets("代理店別進捗").Cells(Columns.Count).End(xlToLeft).Column でデバックが出て、カーソルを合わせるとintColumn = 0となりました。 回答1でおっしゃっていた、1がないからということでしょうか?どのように1を書いたらいいのでしょうか?

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.1

xlWBがSetされているのでしたら .End(xlToLeft).select は .End(xlToLeft).Column じゃないでしょうか 本題とは関係ありませんが Cells( Columns.Count) 1を省略しない方がいいような気もします。 もしOn Error GoToを使っているのでしたら正常に動くまでは利用しないようにしてた方がいいと思います。

関連するQ&A

  • 下記エクセル列の並び替えマクロで、Callの際に変数が引き継がれません

    下記エクセル列の並び替えマクロで、Callの際に変数が引き継がれません。 何か方法はありませんでしょうか。 Sub 各学校() Dim i As Integer Worksheets("Sheet1").Activate For 元列 = 1 To 16 If Cells(1, i) = "学校" Then 新1列 = 元列 ElseIf Cells(1, i) = "住所" Then 新2列 = 元列 ElseIf Cells(1, i) = "電話" Then 新3列 = 元列 (略) End If Next Call 列の並び替え End Sub Sub 列の並び替え() Worksheets("Sheet2").Activate Cells.Clear Worksheets("Sheet1").Columns(新1列).Cut Worksheets("Sheet2").Columns("A").Insert Worksheets("Sheet1").Columns(新2列).Cut Worksheets("Sheet2").Columns("B").Insert Worksheets("Sheet1").Columns(新3列).Cut Worksheets("Sheet2").Columns("C").Insert (略) End Sub

  • エクセル2003の列挿入エラーについて

    列を挿入しようとしたら、エラーになったので残りの列をすべて削除して上書き保存し、やってみるとできたんですが1行挿入後再度挿入したら、またエラーになります(-_-;) どうしたらいいのでしょうか??

  • エクセルマクロ、○列目に○列を挿入する

    任意のアクティブ列をS列にしたいです A列がアクティブの場合、A列に18列挿入 B列がアクティブの場合、B列に17列挿入 ↓ R列がアクティブの場合、R列に1列挿入 アクティブセルの列番号を取得して、19-アクティブ列番号 を挿入するってな感じです 調べているのですが なかなか見つかりません どうするのでしょう?

  • エクセルVBAでエラーがでます。

    エクセルで以下のようなVBAをつくりましたが Columns("B:C").Select でエラーがでます。 初歩的なことですが教えてください。 Sub Macro3() ' ' Macro3 Macro Worksheets(1).Copy before:=Worksheets(1) Worksheets(1).Activate Columns("B:C").Select Selection.Delete Shift:=xlToLeft Columns("C:L").Select Selection.Delete Shift:=xlToLeft Columns("H:H").Select Columns("L:AA").Select Selection.Delete Shift:=xlToLeft End Sub

  • マクロ 最終列をコピーして最終列の次の列に挿入する

    マクロ 最終列をコピーして最終列の次の列に挿入する方法 マクロで最終列をコピーして、最終列の次の列に挿入する方法に苦戦しております。 (1)のところでエラーが出てしまいます。 列をコピーして次の列に挿入した時に挿入した列のセルの値をクリアしたいと思っております。 アドバイスの程、よろしくお願い致します Sub ADD_Column() Dim lastColumn As Integer lastColumn = Cells(3, Columns.Count).End(xlToLeft).Column Range(lastColumn).Copy Range(lastColumn + 1) '(1) End Sub

  • VBAマクロで結合セルを含む列に列挿入する方法?

    お世話になっています。 下記のエクセルVBAマクロで、 列挿入処理をしているのですが、 列に結合セル(行方向)がある場合にだけ、 列選択がうまくできず、 目的と異なる処理をしてしまいます。 ActiveCell.Offset(0, 1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight 新しいマクロの記録で やってみたのですが、 上記マクロが生成されただけでした。 手作業では 列の上のアルファベットを選択して、 列挿入できるので、 何かいい方法があるのは? と思います。 どなたかよろしくお願いします。

  • 列の挿入マクロ (エクセル)

    例えば1行目から3行目のA1,A2,A3のセルが統合されていたとします。マクロボタンを作成してボタンを押すとa1の前(先頭の列)に1行挿入するように したいのですが、うまくできません。3行挿入されてしまいます。おそらくA1~A3のセルが統合されている為 。この現象が直る方法を教えて頂けないでしょうか?下記はそのソースです。 Rows("1:1").Select Range("B1").Activate Selection.Insert Shift:=xlDown

  • エクセルVBA Columnプロパティで・・・

    エクセル2002使用です。 FindメソッドでRangeオブジェクトを取得し、Columnプロパティでそのオブジェクトの列番号をを取得し、Columnsプロパティーでその列番号が最後になる複数行を取得して、その取得した範囲の空白セルを削除しようとしています。 Dim findcell as Range Dim cl as String Set findcell = Rows(1).Find(What:="賞") cl = findcell.Column Columns(3:cl).SpecialCell(xlCellTypeBlanks).Delete Columns(3:cl)でエラーとなってしまいます。 Columnsプロパティーで複数行を取得するときは、アルファベットの列番号を指定しなければならないと思うのですが、Columnプロパティーでは、数字で列番号を取得してしまうため困っています。 Columnプロパティーでアルファベットを取得する方法 または Columnsプロパティーで複数行を数字の列番号で取得する方法で何か良い方法はありますでしょうか? よろしくお願いします。

  • エクセルでの列挿入

    OSはWindowsME エクセル2000を使用しています。 既存ファイルにて列の挿入をしようとした所 [データの消失を防ぐため空白でないセルをワークシートの外にシフトする事はできません。…]とメッセージがでました。 まだ 列の余裕は沢山あるのですが、一応、空白の列(~IV行)を選択して、Deieteをし罫線も消しました(見た目的には罫線は初めからありませんでした)が結果は同じで 次に空白の列を削除した所、罫線が出てきました。 この罫線は多分、表を作成する際に 行番号で全列に対して罫線を引いたもの?かとも思いますが、まるで、IV列の外側に列が存在し、内側(~IV列)を削除すると それが出てきている様に見えてしまいます。そんな事は無いとは思うのですが、挿入方法を教えて下さい。 宜しくお願い致します。

  • EXCELマクロの列挿入で余分に列が挿入されてしまいます。

    EXCELで5セルづつ結合された表があり、決まった列数ごとに2列挿入して合計欄を作りたいのですが、手 動で2列選択してツールバーより挿入とすると2列のみ挿入されますが、マクロで2列選択して挿入se lection.insertをするとなぜか連結セル分5列選択し挿入されてしまうのですが、2列のみ挿入するには どうしたらいいのでしょうか。 For i = 72 To t Step 72 Sheets("描画表").Select 'Column(列)変換 y2 = IIf(y > 26, Chr(y \ 26 + &H40), "") & Chr(y Mod 26 + &H41) y3 = IIf((y + 1) > 26, Chr((y + 1) \ 26 + &H40), "") & Chr((y + 1) Mod 26 + &H41) Columns("" & y2 & ":" & y3 & "").Select Selection.Insert Shift:=xlToRight ローカルウィンドウでマクロのステップをチェックするとy2、y3ともちゃんと列番号が入っているように思うのですがよろしくおねがいします

専門家に質問してみよう