Excel VBA 質問スレ Part74

■ このスレッドは過去ログ倉庫に格納されています
2021/12/20(月) 01:40:59.22ID:jnlr9GaR0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ

ExcelのVBAに関する質問スレナリ
コード書き込みや作成依頼もOKナリ

※前スレ
Excel VBA 質問スレ Part73
https://mevius.5ch.net/test/read.cgi/tech/1631485799/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
430デフォルトの名無しさん (ワッチョイ d168-e0vW)
垢版 |
2022/01/16(日) 20:31:17.59ID:JxOh46GE0
>>426
431デフォルトの名無しさん (ワッチョイ d168-e0vW)
垢版 |
2022/01/16(日) 20:31:53.39ID:JxOh46GE0
>>426
色々聞いてみるといいかもね
恐らくインテリセンスも、みんな使わない
432デフォルトの名無しさん (ワッチョイ d168-e0vW)
垢版 |
2022/01/16(日) 20:35:43.37ID:JxOh46GE0
>>429
>>363の通り、どこで時間が書かているかを突き止める必要がある
2022/01/16(日) 20:53:15.31ID:RSDKT1580
>>432

初心者なのでDebug式をどこに代入すればいいかわからないので教えてください。

https://i.imgur.com/dzwx5GC.jpg

(コード書くと改行多すぎで弾かれます)
434デフォルトの名無しさん (ワッチョイ 6e8e-SRyr)
垢版 |
2022/01/16(日) 21:09:10.46ID:KEj0DMHt0
>>433

>>2を読め
435デフォルトの名無しさん (ワッチョイ d168-e0vW)
垢版 |
2022/01/16(日) 21:13:53.65ID:JxOh46GE0
>>433
>>434は頭おかしい
ちょっと待て
436デフォルトの名無しさん (ワッチョイ d168-e0vW)
垢版 |
2022/01/16(日) 21:14:52.42ID:JxOh46GE0
っって思ったけどせめてデータで出せ
メモ帳にコピペしてdotupとかそのへん
437デフォルトの名無しさん (ワンミングク MM52-/2yr)
垢版 |
2022/01/16(日) 21:22:18.03ID:lhZQvquHM
馬鹿を相手にすんな
438デフォルトの名無しさん (ワッチョイ d168-e0vW)
垢版 |
2022/01/16(日) 21:26:17.91ID:JxOh46GE0
>>437
専門板にいると、自分が万能な気になる
そうじゃないんだよ
みんな、一長一短なんだ
2022/01/16(日) 22:33:39.20ID:uTGjF8kU0
>中身は自分で考えろ

おー!!カッコいいねー!!
熱血トレーナーみたいだね〜
2022/01/16(日) 22:35:56.49ID:YgWToIcEd
VBAで更新したパワークエリーが更新完了まで待機するコードありますか?
2022/01/16(日) 23:13:05.80ID:RSDKT1580
Private Sub Worksheet Before DoubleClick(ByVal Target As Range, Cancel As Boolean)
Const Hani = "N4 N1000
Const Iro. As Variant 15
Dim Rng As Range
Set Rng = Intersect(Range(Hani), Target)
If Intersect(Target, Range("N4 N1000')) Is Nothing Then Exit Sub
With Target
Select Case Value
Case
Value = "2000"
Case "2000
Value =""
End Select
End With
If Not Rng Is
Nothing Then
Cancel = True
If Rnginterior Colorindex = xINbre Then
Eng Interior Colorindex = Iro
Else
Prg Interior Colorindex = xiNbre
End IfEnd If
Set Rng = Nothing
End Sub
2022/01/16(日) 23:18:31.80ID:ranDxh1Nr
Googleレンズで読み込んだやつなので正確ではないけど流れは一緒です。
ネットにあった色つけコードに数字も入力するようにしています。
↑で言っていたように使用しているAシートとBシートに違いはほぼないです。というか新規シートにBをコピーしても読み込み遅くなるので全く理由がわからないです。フォントは一緒、セルの使用数は読み込み遅いシートのほうが少なく、画像も関係ないので何がなんだか…
2022/01/16(日) 23:50:40.30ID:ranDxh1Nr
ごめんなさい
https://hoimins.com/uncategorized/excel-page-break-preview-slow/
多分これです。印刷範囲を設定したら読み込みがなくなりました。
2022/01/17(月) 12:48:25.06ID:RtDdCZiGM
ほれ、タイプミスだけ直しといてやったぞ

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Const Hani = "N4:N1000"
  Const Iro As Variant = 15
  Dim Rng As Range
  Set Rng = Intersect(Range(Hani), Target)
  If Intersect(Target, Range("N4:N1000")) Is Nothing Then Exit Sub
  With Target
    Select Case .Value
      Case ""
        .Value = "2000"
      Case "2000"
        .Value = ""
    End Select
  End With
  If Not Rng Is Nothing Then
    Cancel = True
    If Rng.Interior.ColorIndex = xlNone Then
      Rng.Interior.ColorIndex = Iro
    Else
      Rng.Interior.ColorIndex = xlNone
    End If
  End If
  Set Rng = Nothing
End Sub
2022/01/18(火) 15:16:34.47ID:TQ7V1ae50
前スレの298,303なのだが、
msgboxでウィンドウを表示させるとExcelがクラッシュしないことがわかった。
だから
'マクロがクラッシュしないための措置
i = MessageBoxTimeoutA(0&, "マクロを開始します", "通知", vbMsgBoxSetForeground, 0&, 100)
自動的に閉じるmsgboxを表示させることで回避策としたわ。

msgboxがある/なしでクラッシュするなんて言うバグてきいたことあります?
446デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/18(火) 15:40:58.30ID:CJu6lFHP0
>>445
聞いたことはないけど、合ってもおかしくないと思う
OSや別アプリと並行処理させ、並行処理が終わってないままvbaだけ処理すすめる・・・ことで落ちていると思う
DoEventsで解決するはずなんだけど、DoEvents自体も挙動がどこかおかしい。

多分だけど、
applicaion.calcurate=false
とか高速化入れてない?あれを設定しなければ落ちなくなる可能性があると思う
447デフォルトの名無しさん (ワッチョイ aeda-wAYo)
垢版 |
2022/01/18(火) 18:06:02.41ID:2NZPk0PK0
フォーカスがなくなって裏で動いているのに気づかなかったってだけじゃね
2022/01/19(水) 02:44:48.77ID:J6vWAZC60
>>94
自己レスだけど検証してる動画があった
https://youtu.be/FSS94HnW3Dk
2022/01/19(水) 08:14:43.10ID:SKsqr1XrM
>>448
見たけど画面描画してるからその分遅くなってることを考慮してない、やり直し、と言いたい。
まあそれでも結論は変わらんと思うが。

というか、たぶん結論有りきで動いてるよなこの人。
2022/01/19(水) 12:40:48.58ID:U3XJgxPOM
>>449
画面更新止めるコマンドもあるので別に気にはしてないですが、エクセルの関数が実数になるまでそれなりに、時間かかりますよね

まぁ、でもAの方法(外部リンク参照)で作り変えて行こうかと思います。
2022/01/19(水) 16:06:12.24ID:wLv0/dLh0
取得したデータをどう使いたいのかにもよるけど
参照するExcelブックの数が増減する場合はVBA使って特定のフォルダにぶち込まれたExcelブックを全部取得するようにすると楽
個人で使う分にはこれでいいが、仕事などで自分以外の社員が触る機会がある場合は、周りのスキルを考えてVBAを使わず数式で参照させて済ますのも良いと思う
だが、環境にもよるが、外部参照を含む数式を書いたExcelブックを開いたまま参照先のExcelブックを開くと参照エラー(#REF!)になる場合があるので注意
452デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/19(水) 16:34:49.01ID:x+9vZ6k00
MSGBOXが表示された時、必ず最前面にする方法ってありますか?
alt+tabでタスクを切り替えないとMSGBOXが表示されない事があります
処理が止まっているのか進んでるのか分からなくて、困ってしまう
2022/01/19(水) 17:15:49.65ID:O8ktC4tSM
>>452
VBAのMsgBoxでは不可能
Win32APIのMessageBoxAをTopMost=Trueに設定して呼び出すしかない
VBAからMessageBoxAを呼び出す方法はぐぐればすぐ出てくる
454デフォルトの名無しさん (ラクッペペ MM66-Dw/N)
垢版 |
2022/01/19(水) 17:21:36.62ID:ZRK6Alb6M
そんなフラグ効果あんのか?
455デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/19(水) 17:56:37.68ID:x+9vZ6k00
>>453
ありがとうございます、そういう方法があったのですね。
処理完了のメッセージボックス、そちらにしていきます。助かりました。
2022/01/19(水) 18:35:22.31ID:DmIv8IzU0
いちおうMsgBoxでシステムモーダルの指定があるにはあるんだけどな
期待通りに動かんことが多い

いちアプリケーションがシステム全体にかかわる動作をするなって風潮だからな
2022/01/19(水) 18:45:15.60ID:F2K8Y8lc0
>>451
他ブックへの参照はgotoより使いたくないかも
2022/01/19(水) 19:04:03.23ID:DmIv8IzU0
>>457
複数のブックで構成されてるような資料だとまあなくはないかと

しかしリンクとコピーが比較対象になるのが理解できん
速度とかで選択するようなものじゃないだろ
2022/01/19(水) 19:59:02.99ID:wLv0/dLh0
>>457
わかるけど、それはプログラミングの知識がある人が職場に当たり前にいるという前提の話
まったくVBAを知らない社員に一から教え込むよりまし
ていうか個人的には、Excelブックを100個も参照させるようなのが仕事上の事情なら、まずはその運用を見直した方がいいと思うけど
2022/01/19(水) 20:45:45.55ID:U3XJgxPOM
他ブックの参照がなぜ駄目なのかさっぱりわからないです。。教えて下さい。

参照後の処理の内容になにか前提条件があるのですか?
自分の前提は、Excelブックを参照、みんな同じExcelバージョン、同じフォーマットを使うです
2022/01/19(水) 20:58:42.62ID:B4PAoBE9M
リンク切れで機能しないゴミとなったブックをお目にかかったことがないなら幸せなことだな
2022/01/19(水) 22:01:47.23ID:K9C4LDWb0
エクセルは詳しくないけど、「存在しない可能性すらある
グローバル変数」ってこと?

ちょっと学んで、「どこからでもセルの書き換え効くの?
グローバル変数地獄じゃない?」と思ったけど、もっと
大規模に起こり得るってこと?
2022/01/19(水) 22:31:45.36ID:wLv0/dLh0
>>460
フォルダ名(参照・被参照のExcelブックが別々のフォルダにある場合)、ファイル名、シート名、(使用しているなら)テーブル名、あとセルの配置
どれか一つでも変えるとリンク切れになるので、できればあまり使いたくない
ただ、先にも書いたけど状況次第ではやむを得ないこともあるし、もしそのあたりのリスクを払拭できるなら選択肢としてはあるかなと思って書いたけど、
もし、そういうことをそれほど把握する必要がない程度に重要性が高くなく、かつパフォーマンス(速度)重視の話なのであれば、あまり気にしなくていい

でも、これが仕事で何度も使用するような類のものの話だとすれば、パフォーマンスを考える前に運用をよく考えた方がいい
例えば、ファイル数(100個)や参照セル数(ブック1つにつき60セル)が固定で、シートやブックなんかはパス付で保護かけて構造を弄れないようにして、できたらファイル名なんかもアクセス権を設定して変更できないようにするか、ファイルを扱う人に絶対変えないようにしっかり申し送りするとか
もしくは構造を弄られたとしてもすぐ元どおりにできるぐらいのシンプルな作り、あるいは壊されてもすぐ復元できるようにしておくとか
どんな状況なのかは分からないけど、何を優先すべきなのかをよく整理した方がいい、という話になると思う
2022/01/19(水) 22:43:22.55ID:zGHKrub60
>>460
親からひ孫世代まで参照が繋がってるファイル群なんてものが存在した
2022/01/19(水) 22:52:36.39ID:TxiQul+S0
>>464
参照繫ぐくらいなら、ファイルパスもセルに記入して上書きさせるように実装するわ。それくらいリンクは嫌だわ。
2022/01/19(水) 23:01:56.42ID:J6vWAZC60
なるほど。理解出来ました。
ありがとうございます。

運用的には
VBAでファイル名算出する
シート名が違っていたり、フォーマットズレしていたら検出したいチェックツールにしたいので問題なさそうです。
参照エラーがでたら壊した人のところに殴り込みに行くシステムですね。
2022/01/20(木) 00:15:58.14ID:gV+Fwxtn0
まあ、まともに作ったファイルサーバなら
shadow copy くらいは残ってるだろうがね。
468デフォルトの名無しさん (アウアウウー Sa05-wAYo)
垢版 |
2022/01/20(木) 06:56:43.44ID:AmtKyR6La
無理して変な機能追加するから
後で見返した時にワケわからなくなる
2022/01/20(木) 08:28:58.94ID:mCK9tQrM0
>>468
それはみんなそう
なので少しでもわかりやすいように書いておくことが必要
慣れてないうちはコメント付けまくるのもありだと思う
これは何の変数かとか、大きく何をしているか、この行は何をしているか書いとけばリファクタリングするのにも楽になる
470デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 08:52:11.33ID:aoz8cIff0
>>466
毎日カチコミになるのが目に見えているゾ
2022/01/20(木) 09:39:15.12ID:+AoyW20h0
どうしても100個のファイルに分けなければならないのか
一つのブックに100シート突っ込むことはできないのか
とか考えたりはするかも
472デフォルトの名無しさん (オッペケ Srd1-2j/7)
垢版 |
2022/01/20(木) 12:41:49.38ID:NS2MNDvFr
ファイルコピーか、シートのコピーで
バックアップ取っておくとかは考えるかも。
473デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 12:47:52.34ID:aoz8cIff0
取引先一件につき、ファイル一つ
それをマクロで集計

最初30個ぐらいだったファイルが、
会社が成長して、100ファイルになったことはあったな
フォーマットやファイルは全て自分で管理してたから問題なかったけど、
今も大丈夫かなぁ
あれ手で計算するのは大変すぎ
2022/01/20(木) 13:46:34.45ID:BPf7HX0l0
1ファイル45個のクエリーを含む同様のファイルが
13地点×6ヶ年分=78個あって、
これをシーケンシャルに1つずつ、For Nextで更新するよう組んだ。

最初の2ヶ月目くらいまでは7時間くらいで更新出来てたが、
3ヶ月目以降は毎回どこかの、
 Set tblQ = ThisWorkbook.Worksheets(ws).ListObjects(q)
と、ワークシート名とクエリー名を変数に代入するところでコケる・・・

その都度、コードを削除していったん保存、
再度貼り付けてデバッグし続行させる
沼にはまった。
475デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 13:49:08.24ID:aoz8cIff0
>>474
そういう時は、ファイル保存を挟むと良い
エクセルは立ち上げっぱなしだと、どんどんテンポラリファイルが巨大化する
保存すると、それが一旦整理される
2022/01/20(木) 13:57:12.27ID:BPf7HX0l0
>>475
アドバイス、ありがとう。

一応、開く78個のファイルは1個ずつ保存して閉じているけど、
大元のVBAを持つbookをその都度保存せよ
ということかしら?

そういや、プロジェクトエクスプローラーに
既に処理が終わって閉じたbookのファイル名が残って
どんどん増えて行ったような・・・

こっちは1ファイル処理後ごとに上書き保存とかの処理は入れてなかった。
2022/01/20(木) 13:57:52.65ID:HwD0Q83s0
なんで全部Excelでやろうとするかね ボリューム見て将来鑑みて、どっかの時点で「これはパンクする」
ってぇ判断をしなかったツケだろ 経費抑制? むしろ無駄な経費が膨大に掛かってるのには目を瞑るんだ へー
478デフォルトの名無しさん (ワッチョイ bd5f-2j/7)
垢版 |
2022/01/20(木) 14:17:24.56ID:gV+Fwxtn0
>>474
変数は毎処理ごとに開放してる?
2022/01/20(木) 14:28:11.68ID:mCK9tQrM0
>>477
本人はやれる中で頑張ってるんだと思う、きっと
でも確かにそれはAccessのほうがってことはあるよね
VBAできる人なら覚えるのも簡単だと思うし
2022/01/20(木) 14:32:45.01ID:bfB7zVPYM
kintoneとかでいいでしょ
481デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 14:40:11.29ID:aoz8cIff0
>>476
>一応、開く78個のファイルは1個ずつ保存して閉じているけど、
もし、
set foo = workbook.open~~~)
みたいにしてたら、最後に
set foo = nothing
を挟まないと、ずっとメモリ残り続けることになると思う。>478さんの指摘がこれ

>大元のVBAを持つbookをその都度保存せよ
これはかなりオススメ。
コードの内容がわかって無くても、エクセルファイルを保存すると大体うまくいく
※保存時に色々とうまくやってくれてるっぽい

>>477
それ言い出すと全企業が大企業並の設備を整える必要がある
ある程度拡張性を備えた上で、「5年後は別システムに移行しているだろう」のような判断ができればいいね
基本、要素(営業や取引先)がドカドカ増えないなあ、システムは特に移行しなくていいと思う。
多少使いにくくても、ノウハウが切り捨てられる方が惜しい
482デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 14:41:43.21ID:aoz8cIff0
>>480
使ってから言えよ
あれ柔軟性が全くない

柔軟性の必要がない、タピオカ屋さん、ワッフル屋さんなんかにはドンピシャだろうね
2022/01/20(木) 14:41:48.98ID:BPf7HX0l0
>>478
してなくて、ぼんやり「まずはこのあたりをやらなきゃアカンのかなぁ・・・」とは思ってた。
次に更新する月初めまでにやりまする。

大元のbookで、
"For i To k" より後の、
"Next i" までに使った変数全てについて
 Set 変数名 = Nothing
を "Next i" の直前に入れる感じで?
2022/01/20(木) 14:48:42.80ID:bfB7zVPYM
>>482
本当にその柔軟性必要?勝手にそう思い込んでるだけじゃない?
方眼紙に自由自在にレイアウトできなくても情報は伝わるんだぞ
485デフォルトの名無しさん (ワッチョイ bd5f-2j/7)
垢版 |
2022/01/20(木) 14:49:07.12ID:gV+Fwxtn0
一つのプロシージャで全処理するより

Class とか、Function 使う方が良いかもね。
486デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 15:07:43.50ID:aoz8cIff0
>>484
必要
もちろん100社で100通りじゃない。100社で10通りぐらい。今後も増えるだろう
この柔軟性は、エクセルだとかなり受け入れやすい

>>485
正直、なるだけ1プロシージャは維持したほうが良いと思う
エクセルVBAは他の言語と違って、あまりにファイルへの依存性が強すぎる
487デフォルトの名無しさん (ワッチョイ bd5f-2j/7)
垢版 |
2022/01/20(木) 15:16:04.35ID:gV+Fwxtn0
ふーん。

オレなら処理毎にFunction プロシージャに引数で渡してあげて
ループ処理終わったら、変数開放するけどな。

変に長ったらしいのより、そっちの方が解読性がよくなる。
488デフォルトの名無しさん (ワッチョイ 6e8e-SRyr)
垢版 |
2022/01/20(木) 15:19:27.67ID:n5KSDES60
>>481
お前みたいな奴がメンテできないシステムを作り出すのだぞ
2022/01/20(木) 15:20:13.56ID:gV+Fwxtn0
まあ、オレはAccess VBA専門なので
Excel VBA は遠い記憶ですが…

シンプル・イズ・ベスト。
490デフォルトの名無しさん (ラクッペペ MM66-Dw/N)
垢版 |
2022/01/20(木) 15:20:30.61ID:/dOetE+CM
バカがやると引数地獄かグローバル地獄になんだよ
491デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 15:21:57.99ID:aoz8cIff0
>>488
言いたい事は分かるんだけど、エクセルはOSの依存が妙に強くて
OSの機能借りないとキツイ部分が多々ある
未だにMSGBOXがどうしようもなかった
492デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 15:22:53.50ID:aoz8cIff0
>>490
なるほどw
2022/01/20(木) 15:24:46.85ID:gV+Fwxtn0
>>490

初心者はね。

最近は設計工程ばかりで、コーディングもしてないから
下流ビギナーの思考はわからんけど。
2022/01/20(木) 15:38:37.39ID:gV+Fwxtn0
確かにグローバル変数は使わない方が良い。

ホーム・プロシージャからFunction へ飛ばして
処理させてあげて
戻り値を次のFunctionへ…

って感じで作ると、テスト工程の時に楽になる。

デッカいシステムを組むとそっちの方が絶対楽だし
改修の時も、解読に困らないからね。
495デフォルトの名無しさん (ワッチョイ 6e8e-SRyr)
垢版 |
2022/01/20(木) 15:56:22.20ID:n5KSDES60
>>491
いや、お前の能力が足りないだけだぞ
496デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 16:21:54.83ID:aoz8cIff0
エクセルの場合は、エクセルという超グローバルオブジェクトがある
それをメインに据えれば良いと思うけどな
2022/01/20(木) 17:01:00.66ID:ovHTHlPT0
ホント、マクロは組む人によってその人のカラーや癖が出るとは言ったもんだね。
2022/01/20(木) 17:03:05.54ID:GNfzU0ds0
変数を日本語というか漢字とか使うのって邪道?
行とか列とかそのまま漢字文字で使ってるんだけど
499デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 17:03:18.69ID:aoz8cIff0
>>497
んなもんプログラムならどれも一緒
エクセルは一段回上のファイルがあって、目に付きやすいだけ
500デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 17:06:10.63ID:aoz8cIff0
>>498
2buyte文字ね
全然良い、というかむしろそっちの方が読みやすい
気をつけるのは、海外の漢字や絵文字
上でも出てたけど、半角ポンドなどエラーが起こりやすい文字がある
2022/01/20(木) 17:34:30.16ID:BPf7HX0l0
>>498
漢字をマクロ内で使って、
この5〜6年くらいの間で知ってるだけで少なくとも2回、
MSのupdateで動かなくなってた記憶があるので
それに対処出来ればOKかと。

Rangeで引っ張る定義名とかsheet名は
特殊な記号は避けて漢字使っちゃってる。
2022/01/20(木) 17:50:55.00ID:HwD0Q83s0
日本語(漢字)でもいいんだ へー   っていうレベルのが真似して安易に使い出したらカオス
他人事だから後は野となれ山となれ  っていう発想としか思えない
日本語OSが出来てからやれよ とは思う  米語OS使わざるを得ないなら粛々と従ってろや と
 ま、だからってローマ字に換えて30文字ぐらいのモジュールが40ヶぐらい並んでるのを見た時には一時間ぐらい気絶したけど
getsumatsukoushinn() nenjikoushintokuisakibetuhinmokubetsu()   あのさ、、、 これにOK出したの誰よ?
503デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 17:51:21.68ID:aoz8cIff0
そういや何年か前、accessVBAだっけ?2byte文字あると全部エラーになるみたいなのあったな
2022/01/20(木) 18:02:49.63ID:mCK9tQrM0
>>502
ワロス
505デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/20(木) 18:26:03.22ID:aoz8cIff0
>>502
こういうの見るとoption explicit必須何やなって思わされる
506デフォルトの名無しさん (オッペケ Srd1-2j/7)
垢版 |
2022/01/20(木) 18:30:19.80ID:NS2MNDvFr
開発現場のローカルルールは
2バイト文字禁止が普通だけどね。

色んな環境で使うことを想定したら
日本語とかありえん。

コーディングの時は日本語だけど、
最終的に全置換で英語表記に変える。
2022/01/20(木) 20:06:44.42ID:KxaVQnjRM
> 色んな環境で使うことを想定したら
Excel VBA でそんなことを気にしないといけない状況って相当珍しいだろw
2022/01/20(木) 20:09:21.62ID:WDmMC3D+M
俺が前に行ってた派遣先ではC#で漢字の変数名や関数名とか自由に使ってたわ
業界ではそれなりに知られた老舗のソフトメーカーなんだけど
まあ、そういう職場もあるってことで
2022/01/20(木) 20:34:21.90ID:NL1fx3HA0
日本語以外での展開を考えてるならまあ2バイト文字禁止で良いんじゃね
日本語環境で開発してる段階で漢字禁止とかあんまり見ないけどな

ただ、メソッド名に日本語は過去にえらいことになった例があるからなぁ...
510デフォルトの名無しさん (ワッチョイ 6e8e-SRyr)
垢版 |
2022/01/20(木) 23:42:09.41ID:n5KSDES60
ID:aoz8cIff0

いつもの馬鹿でしたとさ
2022/01/21(金) 02:47:14.61ID:XETJK2Tn0
派遣てなになに?
VBA技術者の派遣とかあるんだ?
512デフォルトの名無しさん (オッペケ Srd1-2j/7)
垢版 |
2022/01/21(金) 03:05:10.67ID:iDAtgXvmr
派遣業(ピンハネ屋)を禁止にすれば
日本人の給料は上がります。
2022/01/21(金) 05:15:31.24ID:XETJK2Tn0
派遣て確か専門職だからめちゃめちゃ稼げると聞いたけど、どうなの??
那須は出ないとは聞いたけど時給はめっちゃ高いと聞いたものでして。
514デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/21(金) 07:53:02.69ID:U4E8wi5/0
>>513
1500-2000円ぐらいだったかな。ただもう募集自体がほとんどない。
ほぼ全てローカル環境での作業のため、リモートも出来ない

>>512
下がる
2022/01/21(金) 08:07:59.20ID:XETJK2Tn0
へえ、1500から2000円ねそうなんだ。
自分田舎住みだからその時給はかなり水準高いわ。
こっちなんてどんだけExcelの技術あっても良くて時給1200円前後。
マクロ書ける人材は貴重だからもっと給料上げるべきだと思う。
516デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/21(金) 08:29:03.61ID:U4E8wi5/0
企業常駐型だから、基本かなり居づらいし
VBAでゴリゴリの開発や保守なんて絶対にやらんほうがいいわ
2022/01/21(金) 08:45:23.59ID:XETJK2Tn0
あ、常駐型SEを思い出した。
給料はもっと貰うべき。
2022/01/21(金) 08:51:43.72ID:k97g2FVL0
適正が有るだけで大した労力使わないのに給料は高いんだよ
楽だよな
2022/01/21(金) 09:29:31.93ID:KSflUQH80
ExcelでEnumChildWindowsを使って他アプリの子ウィンドを取得するプログラムをテストしています。
と言っても知識がないのでネットからソースをコピーしてテストしているレベルです。
EnumChildWindowsの引数でコールバック関数をしているのですが、コールバック関数を実行した時に順調に
実行される時とEnumChildWindowsを実行した途端Excelが終了する時があります。
何かよくあるミスとかあれば教えてください。
APIの宣言、コールバック関数は標準モジュール、その他はシートモジュールに書いています。
プログラムを張り付けて良いか分からないので張り付けていませんが良いならご指示ください。
よろしくお願いします。
520デフォルトの名無しさん (ワッチョイ 8d68-e0vW)
垢版 |
2022/01/21(金) 09:44:43.07ID:U4E8wi5/0
>>519
コードは貼ってくれ
2022/01/21(金) 11:25:52.95ID:KSflUQH80
519です。
長すぎると怒られるのでいくつかに分けます。
よろしくお願いします。

Sheet1モジュール

'///GetWindowの定数///
Const GW_HWNDFIRST = 0 '基準となるWindowと同じ種類のうち最前面のWindow
Const GW_HWNDLAST = 1 '基準となるWindowと同じ種類のうち最背面のWindow
Const GW_HWNDNEXT = 2 '基準となるWindowの次のWindow
Const GW_HWNDPREV = 3 '基準となるWindowの前のWindow
Const GW_OWNER = 4  '基準となるWindowのオーナーWindow
Const GW_CHILD = 5    '基準となるWindowの子WindowのうちトップレベルのWindow
Dim myHwnd As LongPtr  '検索ボタンのハンドルを記憶

Sub Test1()
'アプリhogeの検索ボタンを探す
Dim Ret As LongPtr
Dim hwnd As LongPtr

hwnd = FindWindow(vbNullString, "hoge") 'トップウィンド
hwnd = FindWindowEx(hwnd, 0, vbNullString, "hoge_1")'検索ボタンが所属している子ウィンド

Ret = EnumChildWindows(hwnd, AddressOf EnumChildProc, 0)
myHwnd = GetWindow(myHwnd, GW_HWNDPREV)
End Sub
2022/01/21(金) 11:29:13.91ID:KSflUQH80
標準モジュール

Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As LongPtr, ByVal hwndChildAfter As LongPtr, ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Declare PtrSafe Function EnumChildWindows Lib "user32" (ByVal hwnd As LongPtr, ByVal callBackProc As LongPtr, ByRef lParam As LongPtr) As LongPtr
Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As LongPtr, ByVal lpString As String, ByVal cch As LongPtr) As LongPtr
Declare PtrSafe Function GetWindow Lib "user32" (ByVal hwnd As LongPtr, ByVal wCmd As LongPtr) As LongPtr
2022/01/21(金) 11:35:16.64ID:KSflUQH80
標準モジュールの続きです。

Public Function EnumChildProc(ByVal hwnd As Long) As Long
Dim Ret As LongPtr
Dim Leng As LongPtr
Dim Name As String * 255
2022/01/21(金) 11:39:21.83ID:KSflUQH80
書込みができないようで中途半端なところで切れてしまいすみません。
残り数行なのですがもう少し後で投稿します。
よろしくお願いします。
2022/01/21(金) 12:02:38.78ID:Pj4yIAd6M
>>524
長くなる時はコードをシェアできるサービス使って
https://collabedit.com/3dgh5
526デフォルトの名無しさん (アウアウウー Sa05-VGE5)
垢版 |
2022/01/21(金) 12:24:55.64ID:R2BsGPNsa
標準モジュールからユーザーフォームを呼び出して、そこで入力された値を持ってきて処理したいです

試しにシンプルにこんな感じでやっても駄目なんですが、どうすればいいでしょうか?


標準モジュール
Option Explicit
Public ret As Boolean
Sub test()
Dim ret As Boolean: ret = False
UserForm1.Show
MsgBox ret
End Sub

ユーザーフォーム
Private Sub CommandButton1.Click()
Dim ret As Boolean
ret = True
Unload Me
End Sub


これでtestを実行すると、メッセージボックスにFalseが表示されます
ユーザーフォームが出てきてボタンをクリックしたら、Trueをメッセージボックスに表示するようにしたいです
2022/01/21(金) 12:37:47.66ID:KSflUQH80
>>525
指示してもらったことろへ貼り付けました。
よろしくお願いします。
2022/01/21(金) 12:39:51.71ID:aZlF8gD40
>>526
標準モジュール
Option Explicit
Public ret As Boolean
Sub test()
  ret = False
  UserForm1.Show
  MsgBox ret
End Sub

ユーザーフォーム
Private Sub CommandButton1.Click()
  ret = True
End Sub
529デフォルトの名無しさん (アウアウウー Sa05-VGE5)
垢版 |
2022/01/21(金) 12:47:38.25ID:R2BsGPNsa
>>528
Dimを抜くと、変数が定義されていませんと出てしまうんです
Option Explicitを入れなければ通りますが、やはりTrueは返ってこないでFalseになります
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況