1 名前:デフォルトの名無しさん mailto:sage [2022/10/30(日) 13:43:16.31 ID:6yf2E1Gz0.net] !extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ↑同じ内容を3行貼り付けること ExcelのVBAに関する質問スレ コード書き込みや作成依頼もOK 次スレは>>980 が立てること 無理なら細かく安価指定 ※前スレ Excel VBA 質問スレ Part77 https://mevius.5ch.net/test/read.cgi/tech/1658009255/ - VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
596 名前:デフォルトの名無しさん mailto:sage [2023/01/02(月) 13:45:13.52 ID:N69RPsxQd.net] >>585 自分はWin10+Ofiice365だけど 開いているファイルと同じフォルダのファイルを開こうとすると開いているファイルがアクティブになって 別フォルダの同名ファイルであれば同じ名前のファイルは開けないってエラーになるから 古いバージョンでも一緒なんじゃないかと思うけど 回避したいならWorkBooksの内容をチェックして同じファイル名があればメッセージを出して処理を止めるなりすればいいんだと思うけどね 古いバージョンでもチェックしたいなら単純にフォルダA、フォルダBに同じファイルをいれて両方開けるか試してもらうだけでいいと思うぞ
597 名前:デフォルトの名無しさん mailto:sage [2023/01/02(月) 14:06:13.66 ID:v+YqJ02u0.net] 多分だけど、手動で同一ファイルをダブルクリックで開くような操作では無く 開いたファイルを元に「新しいウィンドウを開く」のようなコードを書いてると思う いろいろとオリジナルというか無手勝流というか、な制作してるようだし、個人利用に留めとけ と忠告しておきたい ま、他人からコテンパンに罵られて伸びるタイプも居ない訳でも無いから、ご自由になんだけど(例えばMS社 毎月バグって世界中から罵られても知らん顔してアプデを続けるし)
598 名前:570 mailto:sage [2023/01/02(月) 21:56:15.06 ID:5oIC6wjS0.net] ありがとうございました。 完璧なコードって、人間の行動を全て読むレベルのとんでもない高度な行為ですよね… プログラムに携わりたいなら甘えずに向き合うべき課題なんだと思います。 年末年始みたいな時くらいしか勉強出来ないの悔しいですね。
599 名前:デフォルトの名無しさん [2023/01/02(月) 22:55:02.83 ID:qD3952vu0.net] 上の方でエラーが出たら自分でコードを修正するって書いているから解決方法は知っているんだろ? なら、Do loopとOn Error Go Toを使ってエラーが解決するまで、知っている限りの解決コードを全て書けばいいと思うが
600 名前:デフォルトの名無しさん [2023/01/03(火) 00:15:50.12 ID:QpUipTPJH.net] >>590 全てって言っても場合によるよ 入力内容のチェックなら数値文字列エラー値ぐらいでほぼ網羅できるけど、 ファイルを開いたりアクティブになったりってなるとExcelやOSとの兼ね合いも出てくるからほんとキツイ 通常操作の9割をカバーできればいいと思う あとは起きたエラーに都度対応していくしかない
601 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 00:27:15.59 ID:mykrlOkz0.net] >>591 ファイルロックとかは可愛いもんでウイルスに実行ファイルを書き換えられたとか、アクセス中に停電とか、HDD不安定とかもしもを考えだすと切りがない
602 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 01:34:33.44 ID:JZU75e4ya.net] VSCode では、同名のファイルでも、パスが異なると開ける。 a/a.txt, b/a.txt みたいに判別できる そもそも、そういう事を想定していないアプリがおかしい。 アプリを作る際に、これぐらい誰でも分かる
603 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 01:35:01.24 ID:JZU75e4ya.net] VSCode では、同名のファイルでも、パスが異なると開ける。 a/a.txt, b/a.txt みたいに判別できる そもそも、そういう事を想定していないアプリがおかしい。 アプリを作る際に、これぐらい誰でも分かる
604 名前:デフォルトの名無しさん [2023/01/03(火) 01:52:28.54 ID:r5MucSoo0.net] アルツハイマーでもこれくらい分かる
605 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 06:33:04.83 ID:t9t/KRTz0.net] 最初にon error resume nextを書いとけばランタイムエラーを出さずに原因不明の謎の挙動だけで済む もし時間に余裕があれば目星を付けた処理の直後でif err<>0 thenでエラーになってないかチェックする エラーの検出後はon error goto 0でエラーをクリアして再度on error resume nextを仕掛ける これぐらいいい加減でもVBAの場合は許されるから覚えておくといい
606 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 06:33:48.96 ID:cXTWG1PB0.net] >>593 でた、極論で語る奴w お前は毎回そこまで考えてコード書いてるのかよ
607 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 06:35:37.55 ID:cXTWG1PB0.net] >>594 むしろダメなのはメジャーなソフトではExcelぐらいだと思うぞ...
608 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 12:03:30.64 ID:fDnSRX1A0.net] 読み込みに失敗、書き込みに失敗程度の動作確認は初心者でなければやると思ってる あとはエラーコード吐いて、異常がでた場合○○を確認してくださいとかで対応 フリーズしない、ファイルを壊さない、間違った表示をしないように作るのは最低でもやってほしいもんだ 俺ならそうするがみんなは違うのかな?
609 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 12:39:40.67 ID:a1UWVOIma.net] まあテストをどこまでやるかは状況次第だけどファイル関係をエラートラップしてリトライなりエラー表示をするのは普通だと思う 書捨てとか自分しか使わないならエラートラップを端折ってあえてVBAのエラーで止めるとかはある 個人的にないのは>>597 みたいなエラーの握りつぶし
610 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 13:00:34.65 ID:NsWNvAiQa.net] まともな開発だとエラー握り潰しは絶対ダメだけどVBAだからなあ 必ずエラーが出るゴミみたいなマクロは珍しくないから、いっそ握り潰してくれた方がマシだと思うことはある
611 名前:デフォルトの名無しさん (ワッチョイ 1a7c-xGsa) mailto:sage [2023/01/03(火) 13:33:35.71 ID:mykrlOkz0.net] >>598 アホが食いつかんかなと思って恣意的に書たんたがこれほどとはw こどおじには解らんだろうが絶対落ちてはいけないシステムならそのくらいの対策は普通にされてるぞ
612 名前:デフォルトの名無しさん (ワッチョイ 9a01-+uJR) mailto:sage [2023/01/03(火) 13:40:10.21 ID:cXTWG1PB0.net] >>602 VBA だから握りつぶしても良いと言うのはよくわからん まあモダンな言語に比べてエラー処理がやりにくいと言うのはあるけど
613 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 13:49:00.13 ID:cXTWG1PB0.net] >>603 VBA で書く絶対落ちてはいけないシステム! 本でも出せば?w
614 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 14:02:20.98 ID:mykrlOkz0.net] >>605 おいおい俺はVBAとは言ってないぞ お前が勝手に吹いてるだけなんだが自覚できんのか
615 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 14:07:51.30 ID:mykrlOkz0.net] VBAでは絶対に落ちてはいけないシステムとかいう発想自体がシロウト臭丸出しでハズいな
616 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 14:09:48.88 ID:mykrlOkz0.net] 正月からこんなとこでイキってる程度だから仕方ないか w
617 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 14:34:55.58 ID:jJKJi0M8a.net] >>606-608 スレタイ100回読んで来年までROMっとけ
618 名前:デフォルトの名無しさん mailto:sage [2023/01/03(火) 15:58:29.44 ID:zc6LNDpCd.net] >>593 なんてハードウェアやその周りのソフトの対策であって開発するアプリケーションで考慮する話ではないと俺も思ってるけどな まあ戻れないところまで追いつめられて必死なんだろうけどそろそろ落ち着いたらどうかね
619 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 05:43:45.27 ID:kI1B+abx0.net] やりたいことあって今日人生で初めてプログラミングに触れたんですけど、ぜんぜんわかりません idが_rって書いてあるから_rって書いてんのになんでこれでエラー吐くんでしょうか 助けてください https://i.imgur.com/xYbWeZX.jpg https://i.imgur.com/KMcczJ7.jpg
620 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 09:18:44.49 ID:9L/11j8r0.net] まずインデント揃える所から覚えようか
621 名前:デフォルトの名無しさん [2023/01/04(水) 09:44:30.63 ID:fU7igCvDH.net] >>611 Seleniumでスクレイピングしようとしてるのは分かるけど、 その部分だけコード見せられても分からない 全部見せて
622 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 09:54:05.40 ID:lFNs7lW+0.net] てかエラーの内容も書かない奴の相手すんなよ...
623 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 10:34:18.99 ID:2ktLmHHjd.net] これって前澤じゃんけんで金もらえるから自動化したいとかそういう事考えてるんじゃね?
624 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 11:05:45.68 ID:lFNs7lW+0.net] モチベーションの起点はなんでもいいだろ 俺だってエロ画像見たいからperl覚えた口だし
625 名前:デフォルトの名無しさん [2023/01/04(水) 11:22:52.20 ID:fU7igCvDH.net] >>615 まさにそれだね 招待すると挑戦回数が増える 謎アプリをインストールすると100円ぐらいもらえる という仕組みらしい プログラムを覚える同期としてはとても良いと思うが、 登録とか色々必要だからめんどくさくて検証できないな
626 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 11:28:33.03 ID:2ktLmHHjd.net] >>616 おれは教えないだけだから別にかまわんよ そもそも今さらそんなこと聞いてる奴だから他でも聞いてるかもしれんし作れるとも思えないしな
627 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 11:33:57.55 ID:lFNs7lW+0.net] 教えないなら黙ってりゃいいのに...
628 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 17:52:13.99 ID:YWyY+Uw80.net] おまえもな
629 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 19:22:28.05 ID:Hj1uvutd0.net] 教えないぞー! 俺は教えないぞー!!
630 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 20:38:59.74 ID:SsOt/AigF.net] それよりもグー、チョキ、パーがr、s、pになる理由を誰か説明してくれ
631 名前:デフォルトの名無しさん mailto:sage [2023/01/04(水) 20:45:41.73 ID:FttywtqZ0.net] 英語版の頭文字
632 名前:デフォルトの名無しさん [2023/01/04(水) 23:17:45.40 ID:J/WGQ1Ed0.net] 自己解決しましたありがとうございます
633 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 12:03:16.68 ID:iBplyV5pr.net] すみません、質問させてください Listのようなものに最大5000行のデータを表示、編集、Excelに保存したいです 可能なツールと良ければアドバイス等頂けないでしょうか
634 名前:デフォルトの名無しさん [2023/01/05(木) 12:18:42.51 ID:fXFdLaAK0.net] Excelを使ってみたらどうかな
635 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 12:36:59.21 ID:f8HxjLWUd.net] Listってなに? 俺には意味不明だけど他の人には通じるのかね
636 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 12:45:31.09 ID:8BS+8waCa.net] >>625 PowerApps使えば一行もコード書かずにできるよ
637 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 12:51:12.92 ID:BoetuCcOH.net] >>625 それ本当にExcelそのものじゃん 新しいウィンドウを開くとか試してみて
638 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 12:53:15.69 ID:iBplyV5pr.net] >>627 listviewなどです listviewはコード以外に画面編集可能ですか?
639 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 12:55:06.72 ID:BoetuCcOH.net] シートに書いてそれをlistviewに反映させればいいんじゃないかな
640 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 12:55:24.41 ID:SJZhIGhQ0.net] エクセル2019とそこに付随するVBAでは日付の起点が違うのですか? ちょっと調べると1900年をうるう年と勘違いしてるとかなんとかでてきます。 44932とセルに手打ちしてから日付に直すと2023/1/6になります。 =Now()をセルに入力して数値表示すると44932、しかし日付にすると今2023/1/5 VBAは1899/12/30=1でエクセルは1900/1/1=1ということでしょうか? それでもつじつまがあわないのですが。
641 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 12:59:20.88 ID:iBplyV5pr.net] >>631 それを嫌っている人達がいるんですよ であればlistview等を使用してどうにかするしかないですが、そこまでするならVBAでやる必要が無いと思ってます
642 名前:デフォルトの名無しさん [2023/01/05(木) 13:09:13.57 ID:oKKcVbTt0.net] 僕ちゃんの頭の中にはlistviewと勝手に名付けた理想のツールが存在しますということか
643 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 13:14:36.43 ID:BoetuCcOH.net] >>633 う~~ん、Excelが駄目な理由がよくわかんないな キャッサバとか使ってみては?? https://forest.watch.impress.co.jp/library/software/cassavaedit/ もしくはスプレッドシート+googleform使うとか >>632 「数値」は四捨五入されるから同じに見えるだけだよ。シリアル値を確認する時は、小数点も表示した方がいい ちなみにmac版が1900年-1904年ぐらいがうるう年かlotusかなんかの関係でズレている。1905年以降からは全てのバージョン・マクロで同じシリアル値になる
644 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 13:15:31.72 ID:BoetuCcOH.net] >>634 通じるからいいじゃん 無駄な煽りはやめよう >>633 いい忘れてたけどlistviewじゃなくてlistboxかなんか
645 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 13:33:51.27 ID:f8HxjLWUd.net] >>630 どんな編集したいのか不明だけど楽したいならAccessでもいいんじゃない そもそも質問が漠然としすぎててListの形式もわからんし 単一項目や相関項目の入力チェックとか何がしたいかも不明なんだよね 質問する側も回答欲しいなら要件を書き出せないと適切な回答もらえないぞ
646 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 13:34:51.53 ID:kWWCj/ior.net] >>635 項目が50近くあって混乱するからといった理由ですね 他の人はできてますしそれくらい覚えられると思いますが、とにかく多量のデータを見ると混乱するそうです
647 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 16:58:29.73 ID:f2A56PmY0.net] >>632 ちょっとだけじゃ無くて、もっと調べると簡単に理由が出て来るじゃん で、1900年の日付のデータを扱う必要が頻繁にあるのだとしたら、もっと詳しく調べて間違いが無いようにしとかないと
648 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 18:51:14.37 ID:EwaN69BP0.net] >>636 通じないよ Excelシートが閲覧、編集すべての点で最適
649 名前:デフォルトの名無しさん mailto:sage [2023/01/05(木) 19:13:27.32 ID:E/ecJHKW0.net] 何なら良くて何がダメなのかハッキリさせておかないと何度もやり直す羽目になるパターンだな
650 名前:632 mailto:sage [2023/01/06(金) 03:18:12.99 ID:6MUppODp0.net] >>635 明日の昼くらいの時間に=Now()を小数点表示させてみます!感謝です!
651 名前:デフォルトの名無しさん mailto:sage [2023/01/06(金) 07:15:36.61 ID:Kv5xGipe0.net] 昨日Sessionで「トランプの影響力低下」 と断言した北●さん 面目丸潰れ
652 名前:デフォルトの名無しさん mailto:sage [2023/01/06(金) 12:14:29.82 ID:nHEEKyAQr.net] >>640 通じないなら通じる人が答えるから通じない人は黙ってればよくね?
653 名前:デフォルトの名無しさん mailto:sage [2023/01/06(金) 19:13:43.70 ID:dhf9eLfP0.net] 便秘じゃしょうがないな
654 名前:デフォルトの名無しさん [2023/01/06(金) 21:21:30.88 ID:eBXD7Bag0.net] >>642 セルの書式との組み合わせだから、セルの書式を意識しないと「標準」ではまる。 Excelの「標準」はExcelだけにしかわからないから、Excelで閉じた世界でないから使わない方がいい。
655 名前:デフォルトの名無しさん mailto:sage [2023/01/07(土) 13:21:26.68 ID:BFQrwMXK0.net] 配列=range("A1:C3") と格納した配列にrange("A5:C8")を追加で格納したいです この場合、配列の要素1つづつに格納していくしかないのでしょうか?範囲をまるごと格納できますか?
656 名前:デフォルトの名無しさん mailto:sage [2023/01/07(土) 18:18:20.53 ID:rkRkNs/h0.net] ぐぐれば配列を結合してくれる関数が出てくるよ
657 名前:デフォルトの名無しさん mailto:sage [2023/01/07(土) 18:45:14.41 ID:XI+ZuMXx0.net] ぐぐれとかの用語を初心者は知らないんじゃね
658 名前:デフォルトの名無しさん mailto:sage [2023/01/07(土) 21:17:42.27 ID:KZGY+9uwH.net] >>647 用途がよく分からんけど、普通に文字列で結合していけばいいのでは? オブジェクトで返す事もできる Sub foo() r = "a2:b3" r = r & "," & "e3:f4" r = r & "," & "h3:i4" Range(r).Value = 1 Set ra = Range(r) ra.Activate End Sub Intersect辺りでもなにかできそうかも?と考えたけど、 全然できないかもしれない
659 名前:デフォルトの名無しさん mailto:sage [2023/01/08(日) 01:02:59.56 ID:mpsC9VsR0.net] オブジェクト指向って Range.Offset(1).value みたいな事でしょうか? 自作関数って基本は引数渡して返
660 名前:り値貰ってみたいな手続きするだけの存在ですが、 それをオブジェクトを作る関数(Rangeオブジェクトみたいなものを生み出せる関数)にして、 その関数から出てきたオブジェクトは メソッドA、メソッドBが使えて、プロパティA、プロパティBみたいな状態も持っている みたいな考えの元に組んでいくとオブジェクト指向なプログラミングになるのでしょうか? それはやはりそういう形式を取った方が、少ない脳みそでも複雑化に対応できるという事なのでしょうか? 同じ機能を持ったプログラミングを後から書き直す事があります。 勉強を進めた結果、「もしかしてこういうルールで書いた方がわかりやすいかも」みたいに思って書き直します。 うまく行くと複雑だと思っていたものがとてもチープで難易度の低いものに見えてきます。 オブジェクト指向はその極致みたいなものですか? [] [ここ壊れてます]
661 名前:デフォルトの名無しさん mailto:sage [2023/01/08(日) 02:37:15.71 ID:FOdy7Dic0.net] >>651 >みたいな事でしょうか? それはメソッドチェーンという記法で、オブジェクト指向言語から生まれた副産物 一見便利で、実際これが無ければVB/VBAはとっくに廃れていたと思われる ただしメソッドの呼び出しと中間オブジェクトの生成で毎回コストが掛かるため、 複数同じような処理を書く場合は一旦適当な変数で受けるか、VBAの場合はWithステートメントでまとめた方が良い
662 名前:デフォルトの名無しさん mailto:sage [2023/01/08(日) 02:50:51.43 ID:Z6otLx+Dd.net] オブジェクト指向の原理主義的には、関数の戻り値はあまり積極的に使用すべきではない でもドットで階層を掘っていくのは頭悪い人にもわかりやすいから、VB系のエセオブジェクト指向ではわりとよく使われる
663 名前:デフォルトの名無しさん [2023/01/08(日) 03:26:30.83 ID:nZw+zsKC0.net] >>653 「関数」という自分しかわからない用語の定義で話すのはやめろ
664 名前:デフォルトの名無しさん mailto:sage [2023/01/08(日) 08:20:15.45 ID:oIS5HnAUM.net] オブジェクト指向には大きく分けてクラスベースとプロトタイプベースの2種類の流派がある ちなみにExcel VBAのオブジェクト指向はどちらとも言えない傍流としか言いようがない 本格的にオブジェクト指向を学ぶなら別の言語の方が良い
665 名前:デフォルトの名無しさん mailto:sage [2023/01/08(日) 11:07:33.40 ID:9yImgFMvH.net] >>651 エクセルvbaの場合、オブジェクト指向かどうかは考えなくていいよ オブジェクト指向かどうかは、オブジェクトをメインに据えるかどうかによる しかしエクセルvbaは「エクセル」という超巨大なオブジェクトが中心なので、 普通に書いてたら勝手にオブジェクト指向になる
666 名前:デフォルトの名無しさん mailto:sage [2023/01/08(日) 11:19:24.04 ID:ardQjEVJ0.net] そもそもWindowsというOSを使ってる時点で、すべてのアプリは「Window」オブジェクトの上で転がってるだけ
667 名前:デフォルトの名無しさん mailto:sage [2023/01/08(日) 12:08:40.63 ID:6Q9yzQxXM.net] オブジェクトの設計図そのものを作って組み合せていくスタイルがクラスベース(C++やC#など) 半完成品のオブジェクトに手を加え加工したクローンを作って組み合わせていくスタイルがプロトタイプベース(JavaScript/TypeScriptなど) Excel VBAは完成品として用意されたオブジェクトをそのまま利用するスタイル (VBAのクラスモジュールは変数や関数を単純 にまとめるだけでクラス自体の拡張性はほぼ無い)
668 名前:デフォルトの名無しさん mailto:sage [2023/01/08(日) 23:34:49.21 ID:9yImgFMvH.net] sheetクラスを継承できれば・・・ いやできなくてよかった
669 名前:デフォルトの名無しさん mailto:sage [2023/01/09(月) 00:09:50.06 ID:2yNmR2Eh0.net] VBAのオブジェクト指向機能は、あくまでCOMを使うために設計されてると言っていいよ OfficeやC++その他で作成されたCOMを利用するだけだし クラスを作ったりできるのはおまけで、VBAでそこからさらに派生なんてことは誰もやらないし
670 名前:デフォルトの名無しさん mailto:sage [2023/01/09(月) 08:59:03.23 ID:YumOwVoa0.net] できないからやらないだけできるなら派生とかやりまくってると思う
671 名前:デフォルトの名無しさん mailto:sage [2023/01/09(月) 12:03:48.87 ID:ruGKlfL0H.net] あまり考えたくないな
672 名前:デフォルトの名無しさん mailto:sage [2023/01/09(月) 13:50:58.25 ID:iDst/v4Qd.net] 現代的なオブジェクト指向ではクラスの継承はあまり使用せずインターフェイスを使うので、クラスを派生できないこと自体はそれほど問題ではない とはいえVBAでクラスを使うべきでないのは同意する
673 名前:デフォルトの名無しさん mailto:sage [2023/01/10(火) 19:35:26.63 ID:2zy2vhhW0.net] オブジェクト指向は考え方の一つとして知っていればいい
674 名前:デフォルトの名無しさん mailto:sage [2023/01/10(火) 19:47:40.17 ID:10oUx2C+a.net] VBAのたとえなんちゃってオブジェクト指向でもクラスは普通に便利じゃん 俺はカプセル化もオブジェクト指向も正直どうでもいいから Publicで書いたりすることも少なく無い
675 名前:651 mailto:sage [2023/01/11(水) 00:58:56.65 ID:UjJptVS80.net] オブジェクト指向の話は自分にはまだ早かったようです。 時間のあるときにC++やC#の世界がどんなものか覗いてみようと思います。 ありがとうございました。 ちょっと初歩的な事で質問をしたいのですが、 UserForm1の方に Private Sub ButtonEnter_Click() FormData = TextBox1.Value Unload Me End Sub とあるとします。エクセルシート側のコマンドボタンに登録してるマクロには Public FormData as Variant Sub Sample() FormData = 1 UserForm1.Show vbModeless MsgBox FormData end Sub みたいにしてパブリック変数でフォームの入力値のやりとりをしようとしています。 しかしこれを実行するとユーザーフォームが表示された直後にMsgBoxが1表示してきます。 原因はvbModelessまでは調べが付きました。 RefEditでvbModeless使うとボタンが反応しなくなりエクセルの強制終了しか手がなくなる事も。 win10office2019環境特有かもしれませんが。 そこで質問ですがvbModelessって本来どうやって使うものなのでしょうか? この挙動だと何にも使えない気がするのです。 処理がShowで止まらずに進んでしまうので入力値を受け取れませんし。 処理を止めるコードとセットで使うのでしょうか? RefEditでは絶対にvbModelessは正常に動作しませんか?
676 名前:デフォルトの名無しさん mailto:sage [2023/01/11(水) 07:07:46.99 ID:ESDkH7B7d.net] 画面表示後に後続のコードを実行させたくないなら vbModal にしないとだめ vbModeless のままで作りたいなら後続のコードを画面側にもっていくか ブック側に別のPublic関数として用意して画面側から実行するなりしないとだめ vbModeless は画面を表示した状態でもブック側を操作できるようにしたいときに指定するものなので そういう事をしたいときに使いましょう
677 名前:デフォルトの名無しさん [2023/01/11(水) 07:14:17.28 ID:pPL7W2Oc0.net] >>666 vbModeless は単純にユーザーフォームを表示したままEXCELシートを編集できるようにするか 否かなので、入力待ちのような場合には不要ですね。 本来の使い方というか、特徴からしてフローティングツールボックスみたいなことができる感じ? Photoshopとか見たことあるとイメージしやすいかな。。。 必要かどうかは置いておいて例えば、、、 複数のマクロが作ってあるEXCELファイルでシート上のコマンドボタンでマクロ呼出ししようと すると当然、別シートに移ると使えなくなるけどvbModelessのユーザーフォームに作っておけば シートを移ってもボタン一発で呼び出せる、みたいな? あとはテーブルがいくつか作られているシートでテーブルを渡りながら編集する必要がある場合、 目的のテーブルのみを表示させるマクロを登録しておけば簡単にアクセスできるようになる、とか。 どちらもどうでもいい使い方だけどw ユーザーフォームとのデータの受け渡しならココを参考にしてみては? 関数化して引数でやりとりしてしまえばいいような気がする。。。 https://excel-ubara.com/excelvba3/EXCELFORM010.html
678 名前:666 mailto:sage [2023/01/11(水) 10:17:37.94 ID:UjJptVS80.net] >>667 >>668 ありがとうございます。 パブリック変数よりFunctionの戻り値をうまく使うっていう方がいいのですね。 UserForm_Initializeもいらなくなりそうですね。 フォームが増えていくとフォーム毎に渡すよう受け取るようのパブリック変数作って ちょっと管理しづらいなと思っていましたのでいい勉強になりました。 Hideも使っていきます。 モーダルだとフォーム出てる間、タッチパッドの二本指スクロールが正常に動作しなくなるので そのためだけにモードレスに魅力を感じていました。
679 名前:666 mailto:sage [2023/01/11(水) 10:30:30.16 ID:UjJptVS80.net] >>668 ちなみにそのサイトにあるdoModalというフォーム側に書くパブリック関数名ですが。 今試したところ、標準モジュールと違ってPublic Subで同名のdoModal関数を フォーム毎に一つずつ名前重複エラーにならなかったんですが、これを仕様として受け止めて フォーム側の呼び出し関数を全部同じ名前にしてしまっても安全でしょうか? フォームが5個あるとして、別々の呼び出し関数を作るのは名前を憶えれないどうせ 呼び出し時には 標準モジュール側で 受け取る変数名 = FormName.doModal(引数1,引数2) みたいにするので別にdoModalにこだわりませんでが フォーム名.Initializeとか、フォーム名.ShowMeとかにする危険性はありますでしょうか?
680 名前:デフォルトの名無しさん mailto:sage [2023/01/11(水) 10:47:26.82 ID:fNRPVgbqM.net] オブジェクト指向ですね
681 名前:デフォルトの名無しさん mailto:sage [2023/01/11(水) 11:07:44.33 ID:ESDkH7B7d.net] >>670 標準モジュールに宣言するPublic関数とは違って ユーザーフォームに宣言するPublic関数はユーザーフォーム名.XXXのような記載をして呼び出すので同名の関数でも構わない (XXX単独では呼べない)
682 名前:デフォルトの名無しさん mailto:sage [2023/01/11(水) 11:12:01.18 ID:ESDkH7B7d.net] >>670 VBEの画面でF2を押下するとオブジェクトブラウザが表示されるから 自分で作った変数や関数がどういう管理をされているかみてみるといいかもね
683 名前:デフォルトの名無しさん mailto:sage [2023/01/11(水) 12:42:00.54 ID:R7jAcCIud.net] >>670 > みたいにするので別にdoModalにこだわりませんでが > フォーム名.Initializeとか、フォーム名.ShowMeとかにする危険性はありますでしょうか? 頭にshowをつけてユニークな名前にすることは個人的にはよくある。 initializeはつけたことないけどユニークな名前なら平気なんじゃないかな。ただVBA側で用意されている名前に酷似してしまうから避けるけど。
684 名前:670 mailto:sage [2023/01/11(水) 14:39:04.35 ID:UjJptVS80.net] >>672 そうですよね。自信持って決まった名前のやつ使い回します。 >>673 見る習慣なかったですが見ないと理解は深まらないやつですねこれは。 >>674 予約語とぶつからないよう気を付けます。 グローバル変数のやりとりなくしたら右上×ボタン閉じでエラーが出る原因が突き止められなくて苦労しました。 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = vbFormControlMenu Then Cancel = True Me.Hide End If End Sub 右上×ボタンで閉じるとShowの次の行に制御は戻るのに、モジュールレベルの変数は 値をクリアされてしまうのですね。 とりあえずグローバルのやりとりは卒業できました。ありがとうございました。
685 名前:デフォルトの名無しさん [2023/01/11(水) 23:25:55.84 ID:DN2jjrph0.net] オブジェクト指向では 多態性を覚えて初めてその恩恵を実感すると思う。
686 名前:デフォルトの名無しさん mailto:sage [2023/01/12(木) 01:03:37.94 ID:kydlVtmO0.net] >>676 多態性とは… プログラムの経験が浅いとイマイチ具体例が出て来なくてモヤモヤっとした状態から抜け出せませんね。 VBAはオブジェクトは作れないけど、元々作ってあるオブジェクトの利用は出来るんですよね?多分 as objectとされるものは大体、オブジェクト名.プロパティ名とかオブジェクト名.メソッド名みたいなの持ってますよね。 継承というのは、Range.InsertとRange.EntireRow.Insertみたいな親クラスのメソッドを 引き継いでる子クラスみたいなことなのでしょうか。 今の経験量ではどれだけリファレンスサイトを読んでもピンときません。 残念ですし、アドバイスを活かせず申し訳ないです。 オブジェクト指向と非オブジェクト指向の境目がわかるようになるまで深入りしないようにしようと思っています。
687 名前:デフォルトの名無しさん mailto:sage [2023/01/12(木) 01:27:45.18 ID:285P/eUV0.net] VBAはそもそもちゃんとしたオブジェクト指向言語じゃないから ちゃんとしたオブジェクト指向言語やらんと、その境目なんてわからんよ
688 名前:デフォルトの名無しさん [2023/01/12(木) 05:03:44.98 ID:DzjvAA7t0.net] そうね Object指向の概念はVBAだけやってれば 人によっては一生身につかないかもね。 この手の参考資料が一番多いのはやっぱりJavaになるのかなぁ。 VBAと文法が近いVB.Netでもあまり見かけないね。アレもIObject指向言語なのに。
689 名前:デフォルトの名無しさん [2023/01/12(木) 14:53:02.95 ID:HTRe+k0wd.net] >>679 お前には見つけられないだけ
690 名前:デフォルトの名無しさん mailto:sage [2023/01/12(木) 15:01:56.40 ID:LJFXYIUK0.net] vbscriptでwin32apiのキーダウンを使おうとしているのですが、 キーダウンは検知できるのですが、標準入力に
691 名前:押したキーが入ってしまいます。 この標準入力を削除することはできないでしょうか もしくはキーダウンが標準入力にならないようにする方法はないでしょうか [] [ここ壊れてます]
692 名前:デフォルトの名無しさん mailto:sage [2023/01/12(木) 15:37:08.41 ID:EIUtrygUd.net] ここはExcelVBAのスレなのでスレチです
693 名前:デフォルトの名無しさん mailto:sage [2023/01/12(木) 18:59:52.86 ID:UVTOHIyL0.net] vbsのスレは気持ち悪いからねえ win32apiコールとか何でもできるpowershellを検討しよう
694 名前:デフォルトの名無しさん [2023/01/12(木) 21:50:28.71 ID:YA4W27ZxM.net] でもパワーシェルはダブルクリックで起動できないって ところが
695 名前:デフォルトの名無しさん [2023/01/12(木) 22:14:31.34 ID:HTRe+k0wd.net] >>684 馬鹿にはできないだけだぞ
696 名前:デフォルトの名無しさん mailto:sage [2023/01/12(木) 22:22:53.89 ID:Iq4TKL6o0.net] >>684 バッチからPowerShell呼べばいいだけ