質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.79%

エクセルVBA、実行時エラー’52090’と4744行に張り付いてしまう

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 644

score 2

お世話になります。
こちら、エクセルVBA初心者です。
以下のコードは、アクセスVBAにて、
アクセスからエクセルにテーブルを既存のエクセルファイルへ新規シートとして、
エクスポートし、一行目を削除した上で、
これを既存の別シートの一番最後の行の一つ下の行に張り付けています。
ところが、
実行時エラー’52090’アプリケーション オブジェクト定義エラー
と、
4744行に張り付いてしまう時と、
きちんと上手く行く時があります。
どのような違いがあるのか、
また、なぜそのような現象が起こるのか、どう対処したらよいのか、
よろしくご教授ください。

実行時エラー’52090’アプリケーション オブジェクト定義エラー


Private Sub btnエクセルエクスポート_Click()

Const xlMinimized = -4140
Dim nip As DAO.Recordset
Dim sttbl4 As String
Dim stSheet As String
Dim Excel As Object
Dim wb As Object
Dim llastrow As Long

Set Excel = CreateObject("Excel.Application") 'Excel
Excel.WindowState = xlMinimized '最小化
Excel.Visible = True '表示

DoCmd.OpenQuery "Q_今月蓄積進捗" ’このクエリでT_今月蓄積進捗のテーブルができます。

sttbl4 = "T_今月蓄積進捗"         'Accessファイルを指定します。
stSheet = "受付情報(蓄積)"

Set nip = CurrentDb.OpenRecordset("T_今月最新進捗")

DoCmd.TransferSpreadsheet acExport, _
acSpreadsheetTypeExcel9, sttbl4, stvardir2, False

nip.MoveLast
Set wb = Excel.Workbooks.Open(stvardir2) 'excelファイルを開く
wb.Sheets(sttbl4).Rows(1).Delete 'クエリシートの1行目削除

wb.Application.DisplayAlerts = False 'メッセージ非表示

llastrow = Cells(Rows.Count, 1).End(xlUp).Row’エラーが起きるのはここ

wb.Sheets(sttbl4).Range("A1:AD" & nip.RecordCount).Copy   'コピー
wb.Sheets(stSheet).Range("A" & llastrow).Offset(1, 0).PasteSpecial xlPasteValues

wb.Sheets(sttbl4).Delete 'クエリシート削除
wb.Application.DisplayAlerts = True  'メッセージ再表示
wb.Close True '閉じる
Excel.Quit 'Excel終了

nip.Close
Set nip = Nothing

DoCmd.SetWarnings True

Exit Sub

VBA

試したこと

既存のシートにて二行目から下全部を削除したら、ちゃんと2行目に張り付きました。
また、4744、4743行にはもちろん、何も入っていません。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • meg_

    2020/05/15 17:24

    ・タイトルには「エクセルVBA」とあり本文には「アクセスVBA」とあります。どっちですか?
    ・コードは「コードの挿入」で記入してください。

    キャンセル

  • tokumeiko

    2020/05/15 17:28

    ありがとうございます。
    ええと、アクセスからエクセルを操作しています。アクセルVBAにて、エクセルを操作ですね。
    あと、それから、こちらの都合で18時から先土日はお答えできません。すみません。
    コードの挿入は、ちょっとわかりません。調べてみます。すみません。

    キャンセル

回答 1

checkベストアンサー

+1

AccessのVBAは詳しくないし、動作確認もしていませんが、エラーの行で直接Cellsと書いているのが気になります。
AccessでCellsと書くと、どのオブジェクトを指すんでしょうかね?
ひとまずきちんとワークシートを明示してあげたらどうでしょうか。

llastrow = Cells(Rows.Count, 1).End(xlUp).Row’エラーが起きるのはここ
 ↓
llastrow = wb.Sheets(stSheet).Cells(wb.Sheets(stSheet).Rows.Count, 1).End(xlUp).Row’エラーが起きるのはここ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/15 17:33

    ありがとうございます。
    なるほどです。やってみます。評価というのはあとでで大丈夫でしょうか?。
    ちょっと、色々調べたり、実行してみたりします。
    お返事は月曜になります。すみません。

    キャンセル

  • 2020/05/15 17:49

    もちろんあとからで大丈夫です。
    外している可能性もありますから。

    キャンセル

  • 2020/05/18 15:43

    今の所、安定して動いています。ありがとうございました。
    どうして、このような簡単な事が気が付かないんでしょうね。自分の馬鹿さ加減に泣きそうです。
    お返事が遅れましてすみませんでした。

    キャンセル

  • 2020/05/18 15:51

    一応効果はあったようで何よりです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る