[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オブジェクト変数または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 >
これでコンパイルエラーはなくなると思います。
ハズしていたら、ごめんなさい。
(uu) 2020/07/24(金) 20:57
こんばんは ^^。。。なるほどです 同じエラーになりますね。ただJDOファイルって何なんでしょうね、 エクセルで読めるのかしら。。。疑問です、↑の私のコメントは単に A列に検索文字列が存在しない場合も、同じエラーになる物で、 アップしたのですが、見当違いでしたら、済みません、無かったことに しておいてくださいませ。済みませんでした。m(_ _)m (隠居じーさん) 2020/07/24(金) 21:05
(γ) 2020/07/24(金) 23:47
隠居じーさんへ
回答ありがとうございます。
検索文字は必ずありますので、存在しない場合のエラーではないはずです。
因みに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
おはようございます ^^ たくさんの適切なアドバイスがあったよぉ〜ですが。。。 テキストだったのですね、了解いたしました。 当方で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:27
>チェック用のコードだと思って端折りすぎましたね。
すぎた? その目的だとして、なんか支障が出るんですか?
(半平太) 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.