[[20180301163120]] 『SpecialCellsメソッド失敗』(むむむ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『SpecialCellsメソッド失敗』(むむむ)

あるアプリで作成した明細書を、
エクセル変換した時、エラーで止まる場合と、
そのまま変換出来る場合があります。

エラーは、

 実行時エラー -2147417848(80010108)
 'SpecialCells'メソッドは失敗しました。Rangeオブジェクト

と表示されます。

エラーの場所をデバッグで見てみると、
エクセル変換マクロ(抜粋)の、

' メモ行
Private Sub FcEszMemo()

    Set meisai = Worksheets("明細書")
    Set meisaiKoNo = meisai.Cells.Range("項目No.")
    Set meisaiName = meisai.Cells.Range("名称")
    maxMeisaiRow = meisai.Cells.SpecialCells(xlLastCell).row ←ココ
    For cnt = 1 To maxMeisaiRow Step 1
        Set msKoNo = meisaiKoNo.Offset(cnt, 0)
        Set msName = meisaiName.Offset(cnt, 0)
        If (msName.Text = "メ") Then
            msKoNo.HorizontalAlignment = xlLeft
            msName.Value = ""
            minCol = FcEszMeisaiMinCol()
            maxCol = FcEszMeisaiMaxCol()
            meisai.Range(meisai.Cells(msName.row, minCol + 1), meisai.Cells(msName.row, maxCol - 1)).Clear
            meisai.Range(meisai.Cells(msName.row, minCol), meisai.Cells(msName.row, maxCol - 1)).MergeCells = True
            meisai.Cells(msName.row, maxCol - 1).Borders(xlEdgeRight).LineStyle = xlContinuous
            meisai.Cells(msName.row, maxCol - 1).Borders(xlEdgeRight).Weight = xlMedium
            meisai.Cells(msName.row, maxCol - 1).Borders(xlEdgeRight).ColorIndex = xlAutomatic
        End If
    Next cnt
End Sub

で止まってます。

初心者の為、
色々調べて原因の場所まで辿り着いたものの、
全く内容が分かりませんので、
私でも直せる程度の変更であれば行いたいので、
ご教授頂ければと思います。
宜しくお願いします。

< 使用 Excel:unknown、使用 OS:unknown >


ちがってるかもしれないですけど

SpecialCells(xlLastCell)
  ↓
SpecialCells(xlCellTypeLastCel)
とかはどうでしょうか?
(もこな2) 2018/03/01(木) 17:02


 xlCellTypeLastCel
 が
 xlCellTypeLastCell
 だとして。
 どちらも中身は「11」で同じなのでそこではないようだ。
(ねむねむ) 2018/03/01(木) 17:07

試してみましたが、
同様の実行エラーになりました。
(むむむ) 2018/03/01(木) 17:11


コピペミス失礼しました。
そうなると私にはわからないですね。

Set meisai = Worksheets("明細書") ってやってますが、そのようなシートが無いとかはないですよね?
なければ、↑でエラーになって止まるとおもうので、ここでも無いようにおもいますが・・・

とりあえず、変数の宣言はしたほうがいいとおもいますけど、エラーの原因ではないですよね。
(もこな2) 2018/03/01(木) 17:22


そうですか。ありがとうございます。

因みに、
使用Excelは、2016です。
ファイルの種類は、Excel 97-2003テンプレートです。
使用OSは、Win10です。

最初の質問新規登録画面で、
使用ExcelとOSを入れる前にプレビューすると、
後から入れられないんですね。
(むむむ) 2018/03/01(木) 17:26


あまり関係無いかもしれませんが、

実行エラーで停止した時、

Microsoft Excel は動作を停止しました。
問題が発生したため、プログラムが正しく動作しなくなりました。
プログラムは閉じられ、解決策がある場合はWindowsから通知されます。

と、Excelプログラム自体も終了となってしまいます。
(むむむ) 2018/03/01(木) 18:09


そもそも、「明細書」のエラーって、
特定のデータで毎回発生するのか、作成時期やデータ内容に関係なく発生するのか

 > 実行時エラー -2147417848(80010108)
 特に誰も言ってないようだけど、このエラーって
「起動されたオブジェクトはクライアントから切断されました。」と言う意味らしい
ここの過去ログにも似たような質問はあるけど・・・

googleで「80010108 メソッドは失敗しました。Rangeオブジェクト」と入力して
検索してみたら、大量のメモリを消費するとかのメモリ不足で発生することもあるらしい?

(2u) 2018/03/01(木) 20:37


>そもそも、「明細書」のエラーって、
>特定のデータで毎回発生するのか、作成時期やデータ内容に関係なく発生するのか

すみません。説明不足でしたね。
作成時期やデータ内容に関係無く発生します。
また、同じデータでもエラーが発生する時もあれば、しない時もあります。

>googleで「80010108 メソッドは失敗しました。Rangeオブジェクト」と入力して
>検索してみたら、大量のメモリを消費するとかのメモリ不足で発生することもあるらしい?

メモリ不足で発生する可能性があるんですね。。。
コードが関係無いなら、どうも出来ないですね。

(むむむ) 2018/03/02(金) 08:22


>>ファイルの種類は、Excel 97-2003テンプレートです。

とのことなので

 'maxMeisaiRow = meisai.Cells.SpecialCells(xlLastCell).row ←削除
    For cnt = 1 To 65536 Step 1

    DoEvents '不可軽減のおまじない
    Next cnt

 って感じで全部の行にしてやるのはどうでしょう?ゴリ押し感はありますが・・・
 あんまコード見てないんで減らす必要があったら減らしてください。
(774) 2018/03/02(金) 08:59

 >    maxMeisaiRow = meisai.Cells.SpecialCells(xlLastCell).row ←ココ
 を
     On Error Resume Next
     maxMeisaiRow = Cells.Find("*", , xlValues, , 1, 2).Row
     On Error GoTo 0
 にしてmaxMeisaiRowがEmptyの場合はデータがないということです。
(seiya) 2018/03/02(金) 12:00

コメント遅くなって、すみません。

774さんにお教え頂いたコードを試してみたところ、
エラーが出ますが、ちゃんと明細書が出来ていました。
エラー内容は、

   実行時エラー 1004
   アプリケーション定義またはオブジェクト定義エラーです。

です。

seiyaさんにお教え頂いたコードでは、
何度も試してみましたが、エラー無く実行出来ました。
ありがとうございます!

今後の為にも、色々調べて読み解いてみます!
お力添え頂き本当にありがとうございました(^o^)丿

(むむむ) 2018/03/05(月) 10:52


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.