[[20200724195229]] 『オブジェクト変数またはwithブロック変数が設定さ』(こた) ページの最後に飛ぶ

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

 

『オブジェクト変数またはwithブロック変数が設定されていません』(こた)

こんばんは
VBAのエラーの解消方法について教えてください。

拡張子がJDOというファイルをエクセルで開いて、
A列のどこかに :EXT1 または GENERAL11 と入力されたセルの行番号を取得したいのですが、
:EXT1場合のみ「オブジェクト変数またはwithブロック変数が設定されていません」とエラーがでます。

    Dim OpenFileName As String
    Dim FileName
    Dim sheetsname
  Dim nn 

    OpenFileName = Application.GetOpenFilename("JDO,*.JdO?")
    FileName = Dir(OpenFileName)
    Workbooks.Open FileName:=OpenFileName, ReadOnly:=True
    sheetsname = Left(FileName, Len(FileName) - 4)

  nn =book1.Worksheets(sheetsname).Range("A1:A5000").Find(":EXT1").Row

上段の":EXT1"が"GENERAL11"だとエラーが出ないので、":EXT1"に問題があるのかと思われます。 

VBAは調べながら作成している程度の知識しかないため、エラーの解消方法がわかりません。

ご教示いただければ幸いです。

よろしくお願いいたします。 

< 使用 Excel:Excel2019、使用 OS:Windows10 >


https://www.relief.jp/docs/excel-vba-handle-range-find-error.html
などが、参考になると思います。
(隠居じーさん) 2020/07/24(金) 20:42

こたさん、隠居じーさん、こんばんは。
nn =book1.Worksheets のbook1がセットされていないようです。
Workbooks.Open FileName:=OpenFileName, ReadOnly:=True
この行を、
set book1=Workbooks.Open(FileName:=OpenFileName, ReadOnly:=True)
あと、変数宣言に
Dim book1 As Workbook

これでコンパイルエラーはなくなると思います。
ハズしていたら、ごめんなさい。

(uu) 2020/07/24(金) 20:57


 こんばんは ^^。。。なるほどです
同じエラーになりますね。ただJDOファイルって何なんでしょうね、
エクセルで読めるのかしら。。。疑問です、↑の私のコメントは単に
A列に検索文字列が存在しない場合も、同じエラーになる物で、
アップしたのですが、見当違いでしたら、済みません、無かったことに
しておいてくださいませ。済みませんでした。m(_ _)m
(隠居じーさん) 2020/07/24(金) 21:05

検索の結果その文字列が見つからなかったわけで、
ExcelVBAの問題ではないと思います。
そのJDOファイルをどう作ったかによります。
その理由はそちらで調べるしかないですね。

(γ) 2020/07/24(金) 23:47


隠居じーさん、uuさんおはようございます。

隠居じーさんへ
回答ありがとうございます。
検索文字は必ずありますので、存在しない場合のエラーではないはずです。
因みにjdoファイルとは、計算ソフトから掃き出されるファイルになります。
中身はテキストですので、メモ帳でもエクセルでもひらけます。

uuさんへ
コードのミのご指摘ありがとうございます。
きれいな書き方ではありませんが、作成したコードは下記となります。
よって、ご指摘のコードは記載されているかと思われます。

Private Sub CommandButton1_Click()

    Dim OpenFileName As String
    Dim FileName
    Dim sheetsname

    OpenFileName = Application.GetOpenFilename("JDO,*.JdO?")
    FileName = Dir(OpenFileName)
    Workbooks.Open FileName:=OpenFileName, ReadOnly:=True
    sheetsname = Left(FileName, Len(FileName) - 4)

    Dim book1 As Workbook
    Dim toukyu
    Dim koubai
    Dim Vo
    Dim takasa
    Dim gyou

    Set book1 = Workbooks(FileName)

    gyou = book1.Worksheets(sheetsname).Range("A1:A5000").Find(":GENERAL10").Row + 1
    Vo = Split(Application.WorksheetFunction.Trim(book1.Worksheets(sheetsname).Range("a" & gyou).Value), " ")

    gyou = book1.Worksheets(sheetsname).Range("A1:A5000").Find(":GENERAL11").Row + 1
    toukyu = Split(Application.WorksheetFunction.Trim(book1.Worksheets(sheetsname).Range("a" & gyou).Value), " ")

    gyou = book1.Worksheets(sheetsname).Range("A1:A5000").Find(":GENERAL3").Row + 3
    koubai = Split(Application.WorksheetFunction.Trim(book1.Worksheets(sheetsname).Range("a" & gyou).Value), " ")

    takasa = Split(Application.WorksheetFunction.Trim(book1.Worksheets(sheetsname).Range("a390").Value), " ")

    Range("W" & 11) = takasa(5)
    Range("W" & 12) = takasa(4)
    Range("W" & 10) = Vo(1)
    Range("DE" & 5) = toukyu(2)
    Range("DE" & 12) = Vo(0)
    Range("W" & 21) = koubai(0)
    Range("W" & 22) = koubai(1)

    Dim titairyoku
    Dim sekisai
    Dim surabu
    Dim kiso
    Dim soujyuryo
    Dim nn

    nn = book1.Worksheets(sheetsname).Range("A1:A5000").Find(":GENERAL1").Row + 8
    titairyoku = Split(Application.WorksheetFunction.Trim(book1.Worksheets(sheetsname).Range("a" & nn).Value), " ")

    nn = book1.Worksheets(sheetsname).Range("A1:A5000").Find(":GENERAL7").Row - 1
    sekisai = Split(Application.WorksheetFunction.Trim(book1.Worksheets(sheetsname).Range("a" & nn).Value), " ")

    nn = book1.Worksheets(sheetsname).Range("A1:A5000").Find(":EXT1").Row - 2
    kiso = Split(Application.WorksheetFunction.Trim(book1.Worksheets(sheetsname).Range("a" & nn).Value), " ")

    nn = book1.Worksheets(sheetsname).Range("A1:A5000").Find(":EXT1").Row - 12
    soujyuryo = Split(Application.WorksheetFunction.Trim(book1.Worksheets(sheetsname).Range("a" & nn).Value), " ")

    Range("AB" & 33) = titairyoku(3)
    Range("AB" & 37) = sekisai(1)
    Range("AB" & 34) = kiso(2)
    Range("AB" & 36) = kiso(3) / 1000
    Range("AB" & 35) = kiso(4) / 1000
    Range("AB" & 31) = soujyuryo(1)

    ActiveWorkbook.Close SaveChanges:=False

End Sub

最初に記載しましたが、":EXT1"が"GENERAL11"だとエラーが出ないので、":EXT1"に問題があるのかと思われます。
ただし検索文字の:EXT1は必ずあります。

エラーの原因がわかれば教えてください。

よろしくお願いいたします。
(こた) 2020/07/25(土) 10:43


 こんにちは!
 >ただし検索文字の:EXT1は必ずあります。
 でもないのがExcelあるあるなので
 試しに普通の検索で「:EXT1」を検索して
 それを記録したコードを移植されてみてはどうでしょうか?
(SoulMan) 2020/07/25(土) 11:16

JDOにある値(前後のスペースも含む)をコピペして「:EXT1」と置き換えてみるとか
(苫) 2020/07/25(土) 11:27

 おはようございます ^^ たくさんの適切なアドバイスがあったよぉ〜ですが。。。
テキストだったのですね、了解いたしました。
当方でA列に、 :EXT1 を入力後、実行では正常に行位置を返してくれますです。
A1 〜 A5000の間に、あるのですよね。。。だとすると。。。半角、全角
とかじゃないですよね、^^;。。。見た目は同じですがえてして、この手のテキ
ストにはコードセパレーター、タブ等、空白文字等が潜んでいる可能性が無いとは
いえないよ〜な気がいたします。一文字づつ、文字コード、文字の長さ等を確認す
るのも一案かもしれません。。。m(_ _)m  "'" ← こんなのもきをつけないと
いけないかも。。。^^; でわ

(隠居じーさん) 2020/07/25(土) 11:31


    Sub Sample()
        Dim OpenFileName As String
        Dim SearchString As String
        Dim book1 As Workbook
        Dim r As Range
        SearchString = ":EXT1"
        OpenFileName = Application.GetOpenFilename("JDO,*.JdO?")
        If OpenFileName = "False" Then Exit Sub
        Set book1 = Workbooks.Open(FileName:=OpenFileName, ReadOnly:=True)
        Set r = book1.Worksheets(1).Cells.Find(SearchString)
        If r Is Nothing Then
            MsgBox "Nothing"
        Else
            MsgBox r.Address(False, False)
        End If
        book1.Close SaveChanges:=False
    End Sub

これで「:EXT1」を探してみてください。
どんな値を返してきたか、どんなエラーを返してきたかで次の手をうつことができます。
(苫) 2020/07/25(土) 12:10


 >Find(SearchString)

 回答者側にこれで回答してほしくないです。

 理由、質問者側は回答者が書いているから、これで完璧だと思いこむから・・・。
(からくち) 2020/07/25(土) 13:57

からくちさんそう言うならば別な回答してあげれば。
(もにんち) 2020/07/25(土) 14:12

 >からくちさんそう言うならば別な回答してあげれば

 この件に関しては、幾度となく回答として出てます。
 意味が解らないのないようなヘボなら回答しないでもらいたい。
 以上

(.からくち) 2020/07/25(土) 14:27


https://excel-ubara.com/excelvba4/EXCEL225.html
このあたりも参考になるかもですね。^^;。。。m(_ _)m
(隠居じーさん) 2020/07/25(土) 14:47

チェック用のコードだと思って端折りすぎましたね。
(苫) 2020/07/25(土) 15:11

 >チェック用のコードだと思って端折りすぎましたね。

 すぎた? その目的だとして、なんか支障が出るんですか?

(半平太) 2020/07/25(土) 15:30


皆様こんにちは。

苫さんのコードを実行して原因がわかりました。
検索文字が5000以降にありました・・・

初歩的なミスに気付かず質問してしまい申し訳ありませんでした。
また、回答いただいた皆様ありがとうございました。
(こた) 2020/07/25(土) 15:37


コメント返信:

[ 一覧(最新更新順) ]


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