アプリ版:「スタンプのみでお礼する」機能のリリースについて

先ほどはご質問した件は解決しました。ありがとうございました。
しかしながら、、、今度は、昨日まででなかったエラーが急に出るようになりました。
ListBoxには、2列あり、1列目が「氏名」で、2列目が「時刻」です。元データは「h:mm」形式なので、文字列に変換してそのまま表示しています。

1列目は、TextBox1 = ListBox1.Text として、テキストボックス1にそのまま氏名が表示されます。
2列目を、TextBox2 = Worksheets("基本").Range("B:B").Offset(0, 2).Text  として、
テキストボックス2に、
TextBox2 = Format(Worksheets("基本").Range("B:B").Offset(0, 7), "h:mm")
を入れて、変換できるようにしてみましたが、
エラーにはなりませんが表示されません。

昨日まではちゃんと表示されていたのに、急にでなくなりました。。

Worksheets("基本").Range("B:B").Find(ListBox1.Text).Select
TextBox1 = ListBox1.Text
TextBox2 = Worksheets("基本").Range("B:B").Offset(0, 2).Text
昨日まではこれで時刻も表示していたのですが、、時刻が表示されなくなりました、。
それで、

 
以下のように試してみても、だめです。方が違いますとか、、エラーがでます。
Worksheets("基本").Range("B:B").Find(ListBox1.Text).Select
TextBox1 = ListBox1(ListBox1.ListIndex, 0)
TextBox2 = ListBox1(ListBox1.ListIndex, 1)

次に、
Worksheets("基本").Range("B:B").Find(ListBox1.Text).Select
TextBox1 = Worksheets("基本").Range("B:B")
TextBox2 = Worksheets("基本").Range("B:B").Offset(0, 2).Text

とすると、エラーは出ませんが、テキストボックスに表示されません。。

何度もすいませんですが、、これの何がだめだと言われているのか、わからなくなりました、、

質問者からの補足コメント

  • うーん・・・

    補足として、2日ぐらい前に、ここでお世話になって、コンボボックスで、「コース」をキーとして選択すると、そのコースで該当する氏名がリストボックスに表示できるように構文を教えて頂きました。

    遷移を見ていると、コースが変わると、「値を取得できない」と表示されます。
    TextBox1 = ListBox1.Text
    とすると、氏名は遷移しても表示されるのですが、時刻を表示させることができないという状況です。
    列指定をして表示させようとすると、エラーになるので、、ということです。

      補足日時:2020/10/09 14:31
  • へこむわー

    Private Sub ListBox1_Change()
    Dim n As Range
    Dim t As Range
    Dim ws As Worksheet
    Set ws = Worksheets("基本")
    Set n = ws.Range("B:B").Find(ListBox1.Text)
    Set t = ws.Range("B:B").Find(ListBox1.Text).Offset(0, 7)
    TextBox1 = n.Text
    TextBox2 = t.Text
    End Sub
    これで動きました。。。Find(ListBox1.Text)が抜け落ちておりました、、
    さっき、ちこちゃんが怒ってました、、、ナレーション脳内変換しておりました、、、
    大変申し訳ございません。。

      補足日時:2020/10/09 20:54

A 回答 (6件)

'Set t = ws.Range("B:B").Find(ListBox1.Text).Offset(0, 7) を無しにして



TextBox2 = n.Offset(0, 7).Text

でもいけるのでは?
    • good
    • 0
この回答へのお礼

あ、、、そうですね、、言われて気づきました。。ありがとうございます。
地頭の悪さ露呈しますね^^;

お礼日時:2020/10/09 21:38

どちらのサイトを参考にされて勉強しているのかはわかりませんが、個人的には



よねさんのWordとExcelの小部屋
http://www.eurus.dti.ne.jp/~yoneyama/

最初の頃はこちらを参考にさせて頂きました。
まぁ確かに内容的に違った回答手法をしてきた点で言うのなら、VBAを初めて1ヶ月ほどたってからサイトの回答者を初めました。
当時は出来の悪いコードしか書けませんでしたけど、そのコードに対して別の常連回答者様が指摘・指南をしてくださり、それぞれの回答者様のやり方を吸収しつつテキストファイル等に保存し見直してコード作成をしてました。
基本今でもその保存しているコードを引っ張り出して部分的に修正し回答しています。

ただ途中数年はVB・VC#の方にはまり込んでやってましたので、その時のやり方をVBAでも実践したりもしてます。
当然新しい手法で回答したのであればそのコードは保存して溜め込んではいますけど。
    • good
    • 0
この回答へのお礼

情報を頂きまして、まことにありがとうございます。
いつもご回答いただきまして、感謝申し上げます。
 サイトを紹介していただきまして、ありがとうございます。

私も、こつこつと修正した構文や、教えてくださった構文やサイトをみて、、としておりますが、いかんせん、まだ理解しきれないものも山のようにありますが、少しずつでも消化していけたらと思います。

 今後ともよろしくお願い申し上げます。

お礼日時:2020/10/09 21:23

こんばんは!



今回も回答ではありません。

https://oshiete.goo.ne.jp/qa/11941482.html
  ↑のサイトでも投稿したのですが、
VBAの勉強であれば、色々やってみるのもいいと思いますが、
お礼欄にはあくまで実践でやっていることを題材にしたい!と書かれていましたね。

なので、あえて苦言を呈しますが
お示しのコードは全く実践的ではありませんし、コードそのものがめちゃくちゃです。

一気に高望みをせず順を追って勉強することをおススメします。

まずFind関数の使い方
とりあえず変数を決め(今回はRangeオブジェクトで「c」とすると)
>Set c = Range("B:B").Find(what:=○○, LookIn:=xlValues, lookat:=xlWhole)

(LookIn以降はなくても動くかも・・・)

のような感じ。

次にOffsetの使い方
お示しのコードではB列全体の2列右側(D列)を表示しなさい!
と命令していますが、これでは列全体を表示しなさい!と言っているコトで
無理です。

Offset関数の基本は
Offset(基準,行数,列数,高さ,幅)
という順になるので、もう一度Offset関数の勉強も必要かと・・・

最後に
テキストボックスにリストボックスのデータを表示させたいようですが、
ユーザーフォームだと思いますので、
ユーザーフォームのテキストボックスは
直接入力可能!と解釈した方がいいかも。
すなわち既存のリストにないデータ等を新たに入力する「窓」のような感じ。

次にリスボトックスは絞り込み操作の最終段階だと思いますので、
リストボックスをクリックした時点でワークシートに検索結果を表示する!

といった流れが一般的だと思っています。

※ 上記記述はあくまで当方個人的な考え方なので
すべてがあっているとは思いません。
もちろん色々な使い方をしても問題はないとは思いますが・・・m(_ _)m
    • good
    • 0
この回答へのお礼

ご回答いただきまして、まことにありがとうございます。日々ご回答いただいていることに感謝申し上げます。

本来の使い方があるということさえ、知りませんでした。。^^;基本から逸脱していることも多々あるだろうなぁとは思っておりますが、お付き合いくださっていることに感謝申しあげます。

それ以前に、構文を何をどうしたら動くのかさえ怪しい状態ではありますが、引き続き進めていきたいかと思います。

 今後ともよろしくお願い申し上げ余す。

お礼日時:2020/10/09 21:13

No.2のお礼について。



動画を拝見しました。
こちらは理解できますけど、質問者さんの提示されているコードとは違うものですよね?
ようは With ~ End With がどう言う物なのかと言う点です。

そこを抜いたとしてもこの質問の場合に必要なのは、

>TextBox2 = Worksheets("基本").Range("B:B").Offset(0, 2).Text

ではなく

TextBox2 = Worksheets("基本").Range("B:B").Find(ListBox1.Text).Offset(0, 2).Text

こちらならまだわかります。
FindメソッドによりB列の特定のセルを検索しヒットしたセルに対してOffsetで同じ行のD列の値を代入しますので。
    • good
    • 0

昨日までは動いていたとの事。


初級レベルが拝見してもとても不思議な感じがしました。

>TextBox2 = Worksheets("基本").Range("B:B").Offset(0, 2).Text
>昨日まではこれで時刻も表示していたのですが、、

ここでの
Worksheets("基本").Range("B:B")
って”基本”シートのB列全体をのちにOffsetされてますが、結局D列全体のセルに表示されている値を1つのTextBoxに入れるなんて通常考えられないですね。
私が見てきたお古なバージョンの話で最近のは変わったのかなと不思議に感じます。

あとFindメソッドを利用されてますが、見つからなかった場合の処理も覚えられることをお勧めします。
大概の解説記事には”見つかった場合に実行”するような If文 があると思いますよ。
    • good
    • 0
この回答へのお礼

ご回答いただきましてありがとうございます。
https://www.youtube.com/watch?v=QTB6hKHFGao&t=11 …
ここを見て、そのまま使っただけなんですけどね、、
19:10あたりのところを参考にいたしました。
それで、2行分にして動いていたんですけどね、、、

お礼日時:2020/10/09 18:02

こんにちは



きちんと覚えていないけれど、最近、同じことを何度か指摘されていませんでしたか?

質問履歴が非表示なのでどの質問かは示せませんが、最近のご質問をご自身で見返してみれば、同じような内容があるはずです。
(見た目の形式が同じということではなく、コードの間違え方が同じという意味です)
    • good
    • 0
この回答へのお礼

ご回答いただきありがとうございます。
過去のものは一通りめを通しているのですが、以下の構文で特にエラーは出ないのですが、テキストボックスに表示されない、、昨日までは出ていたんですけどね。
なにか変なチェック入れてないか見てもそうでもなさそうですしね、、

Worksheets("基本").Range("B:B").Find(ListBox1.Text).Select
TextBox1 = Worksheets("基本").Range("B:B").Text

お礼日時:2020/10/09 16:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!