スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
※前スレ
Excel VBA 質問スレ Part51
http://mevius.2ch.net/test/read.cgi/tech/1510107990/
探検
Excel VBA 質問スレ Part52
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/01/27(土) 20:25:05.67ID:Xe+uGT7T412デフォルトの名無しさん
2018/03/17(土) 06:33:04.45ID:n47xCJZ+ 質問です
今EXCELで対戦格闘ゲームを作っているのですが
キャラクター同士の当たり判定は
それぞれ攻撃用、体用と別々に持つことで
正しく動いています。
ただ攻撃が当たった時のヒットマークを表示する位置を
どのように算出すれば良いかが思いつきません。
何か良い方法はないでしょうか?
ちなみにキャラクターはシートのセルを方眼紙のように見立てて
横256*縦200で1セルを1ドットに見立てて行っています。
今EXCELで対戦格闘ゲームを作っているのですが
キャラクター同士の当たり判定は
それぞれ攻撃用、体用と別々に持つことで
正しく動いています。
ただ攻撃が当たった時のヒットマークを表示する位置を
どのように算出すれば良いかが思いつきません。
何か良い方法はないでしょうか?
ちなみにキャラクターはシートのセルを方眼紙のように見立てて
横256*縦200で1セルを1ドットに見立てて行っています。
413デフォルトの名無しさん
2018/03/17(土) 07:23:19.78ID:n47xCJZ+ 言い忘れていましたが
当たり判定は各キャラクターの動作毎、絵柄毎に
攻撃用が1〜3個、体用が1〜5個の四角い範囲を持っていて
それが重なったかどうかで判定を行なっています。
動作とは例えば小パンチとか、大パンチとかを指します。
同じ絵柄でも違う動作の場合は
違う範囲で当たり判定を行えるようにしています。
当たり判定は各キャラクターの動作毎、絵柄毎に
攻撃用が1〜3個、体用が1〜5個の四角い範囲を持っていて
それが重なったかどうかで判定を行なっています。
動作とは例えば小パンチとか、大パンチとかを指します。
同じ絵柄でも違う動作の場合は
違う範囲で当たり判定を行えるようにしています。
414デフォルトの名無しさん
2018/03/17(土) 07:48:47.16ID:71uTBaAx415デフォルトの名無しさん
2018/03/17(土) 08:14:30.06ID:n47xCJZ+416デフォルトの名無しさん
2018/03/17(土) 08:23:52.27ID:0VMaqrOi417デフォルトの名無しさん
2018/03/17(土) 09:02:41.97ID:8EqoOoha 生きる!!!!!
(´・ω・`)b
(´・ω・`)b
418デフォルトの名無しさん
2018/03/17(土) 09:10:30.63ID:71uTBaAx >>415
「ゲームプログラミングなら俺に聞け」とか、そういうスレの方が絶対いいと思う
「ゲームプログラミングなら俺に聞け」とか、そういうスレの方が絶対いいと思う
419デフォルトの名無しさん
2018/03/17(土) 11:01:00.47ID:plFeqth9 ヒットマークとやらをどう表示したいのかも書いてない
こんなんで回答がつくわけない
質問の体を装ったただの俺こんなの作ってるスゲーだろアピール
こんなんで回答がつくわけない
質問の体を装ったただの俺こんなの作ってるスゲーだろアピール
420デフォルトの名無しさん
2018/03/17(土) 12:28:23.68ID:zttMJW/5 当たり判定とヒットマークの位置関係だけあらかじめ決めておいて、あとはヒットした当たり判定のセル位置のアドレスなり座標なりからオフセット参照するだけじゃん
421デフォルトの名無しさん
2018/03/17(土) 12:53:01.02ID:0VMaqrOi422デフォルトの名無しさん
2018/03/17(土) 13:02:49.05ID:JhGe8NGg マウントって簡単に言いすぎ
倫理をふりかざして人を委縮させようとする言動に限らないと
言葉の力がなくなってしまう
倫理をふりかざして人を委縮させようとする言動に限らないと
言葉の力がなくなってしまう
423デフォルトの名無しさん
2018/03/17(土) 13:38:51.05ID:heA3uIoa424デフォルトの名無しさん
2018/03/17(土) 14:18:21.64ID:7XiT0JZV >>412
もしかして当たった位置が判らないということですか?
もしかして当たった位置が判らないということですか?
425デフォルトの名無しさん
2018/03/17(土) 15:07:46.54ID:JHaB3/LC >>412
へぇ、このスレでは珍しい質問だね。
あくまでひとつの方法としての提案だけど、
当たり判定が出来るということは攻撃範囲と体範囲って呼んでるけど、
それが重なったことは判定出来てるんだよね?
なら重なった範囲の中心にヒットマークを出すようにすればいいと思うよ。
つまりキャラAの右下セルよりキャラBの左上セルが
左上にあって、かつ
キャラAの左上セルよりキャラBの右下セルが右下にある場合、これがキャラが重なった「当たった」ことに該当するんだけど、
この状態からキャラAの右下セルからキャラBの左上セルの縦横それぞれの差分を出して
それを2で割ってキャラAの右下セルの縦と横にそれぞれ足してやれば求められるはず。
後は複数判定用の範囲を持ってるというところで
どの範囲を優先するかの優先順位をつけて。
頑張って下さいね。
へぇ、このスレでは珍しい質問だね。
あくまでひとつの方法としての提案だけど、
当たり判定が出来るということは攻撃範囲と体範囲って呼んでるけど、
それが重なったことは判定出来てるんだよね?
なら重なった範囲の中心にヒットマークを出すようにすればいいと思うよ。
つまりキャラAの右下セルよりキャラBの左上セルが
左上にあって、かつ
キャラAの左上セルよりキャラBの右下セルが右下にある場合、これがキャラが重なった「当たった」ことに該当するんだけど、
この状態からキャラAの右下セルからキャラBの左上セルの縦横それぞれの差分を出して
それを2で割ってキャラAの右下セルの縦と横にそれぞれ足してやれば求められるはず。
後は複数判定用の範囲を持ってるというところで
どの範囲を優先するかの優先順位をつけて。
頑張って下さいね。
426デフォルトの名無しさん
2018/03/17(土) 22:00:46.63ID:plFeqth9 自演死ね
427デフォルトの名無しさん
2018/03/18(日) 01:02:38.92ID:5x2puHKk 教えてください。
別ブックを範囲(A10:B24)指定してコピーして
現在のブックA10をはじめとした範囲にペーストしたいのですが、
なぜか参照ブックをアクティブにした上で範囲指定ができません。
最初のブック・・・A.xlsm
参照ブック・・・nal.xls 参照シート:sheet10
参照ブックのデータ最終行・・・i (24が入っています)
Dim i As Integer
Workbooks("nal.xls").Activate
i = Worksheets("sheet10").Range("A10").End(xlDown).Row
Workbooks("nal.xls").Activate
Worksheets("sheet10").Activate
Range(Cells(10, 1), Cells(i, 2)).Select ←RangeクラスのSelectメソッドが失敗しました。
Selection.Copy
どなたか助けてください。
別ブックを範囲(A10:B24)指定してコピーして
現在のブックA10をはじめとした範囲にペーストしたいのですが、
なぜか参照ブックをアクティブにした上で範囲指定ができません。
最初のブック・・・A.xlsm
参照ブック・・・nal.xls 参照シート:sheet10
参照ブックのデータ最終行・・・i (24が入っています)
Dim i As Integer
Workbooks("nal.xls").Activate
i = Worksheets("sheet10").Range("A10").End(xlDown).Row
Workbooks("nal.xls").Activate
Worksheets("sheet10").Activate
Range(Cells(10, 1), Cells(i, 2)).Select ←RangeクラスのSelectメソッドが失敗しました。
Selection.Copy
どなたか助けてください。
428デフォルトの名無しさん
2018/03/18(日) 03:11:59.88ID:Ml7D0I3C 複数シートでゴニョゴニョする際は
Worksheets("sheet10").Range(Worksheets("sheet10").Cells(10, 1), Worksheets("sheet10").Cells(i, 2)).Select
と略さずに書くといいよ
デバッグ中につい違うページ開いちゃうと後で泣きを見る
Worksheets("sheet10").Range(Worksheets("sheet10").Cells(10, 1), Worksheets("sheet10").Cells(i, 2)).Select
と略さずに書くといいよ
デバッグ中につい違うページ開いちゃうと後で泣きを見る
429デフォルトの名無しさん
2018/03/18(日) 03:58:35.89ID:JrJJTzVM Aブックに、BブックをOpenするコードが書いてあります。
困ったことにBブックが正常に開くこともあれば、
長時間たってもビジー状態が続き開かないこともあります。
これはAブックから開くときだけでなく、Bブックのアイコンをダブルクリックしても同様です。
そんなときでも、エクセルを強制終了した後にBブックを開くとなぜか問題なく開くことも多いです。
Bブックの問題を取り除くのが正しい方法なんでしょうが、とりあえずの対策として、
wb = Workbooks.Open(strPath & "\" & "B.xslm")
で、AブックがBブックをOpenした後に一定時間経過後にBブックの特定のセルの内容を読み取れなければ、
Bブックを強制的に閉じて、再度Bブックを開き直すというコードを書こうと思ったのですが、
wb = Workbooks.Open(strPath & "\" & "B.xslm") を実行すると、
Bブックが開くまでAブックのマクロが止まってしまい、Bブックのセルが読めるかどうか判定することができません。
どうしたらよいでしょうか?
困ったことにBブックが正常に開くこともあれば、
長時間たってもビジー状態が続き開かないこともあります。
これはAブックから開くときだけでなく、Bブックのアイコンをダブルクリックしても同様です。
そんなときでも、エクセルを強制終了した後にBブックを開くとなぜか問題なく開くことも多いです。
Bブックの問題を取り除くのが正しい方法なんでしょうが、とりあえずの対策として、
wb = Workbooks.Open(strPath & "\" & "B.xslm")
で、AブックがBブックをOpenした後に一定時間経過後にBブックの特定のセルの内容を読み取れなければ、
Bブックを強制的に閉じて、再度Bブックを開き直すというコードを書こうと思ったのですが、
wb = Workbooks.Open(strPath & "\" & "B.xslm") を実行すると、
Bブックが開くまでAブックのマクロが止まってしまい、Bブックのセルが読めるかどうか判定することができません。
どうしたらよいでしょうか?
430デフォルトの名無しさん
2018/03/18(日) 04:24:15.80ID:/1Of5770 >>429
開けていないものを閉じろと言うのは無理ゲー
開けていないものを閉じろと言うのは無理ゲー
431デフォルトの名無しさん
2018/03/18(日) 06:47:14.19ID:JFJ3EKTR 最初にタスクマネージャーで、
起動中のすべてのExcel を、強制終了させてから実行すれば?
たぶん、起動中のExcel が、そのブックをつかんでいるのだろう
起動中のすべてのExcel を、強制終了させてから実行すれば?
たぶん、起動中のExcel が、そのブックをつかんでいるのだろう
432412
2018/03/18(日) 11:12:47.56ID:l25Pelu+433デフォルトの名無しさん
2018/03/18(日) 11:21:02.32ID:A1IN0XTG >>432
VBA初心者でこのスレをたまにチラチラ見ているものですが
「EXCELで対戦格闘ゲーム」ってものがどういうものなのか全然想像できないです
(どうやったらそんなことできるの! てかどんな画面になるの!! 状態です)
もしよろしければ、何か雰囲気の掴めそうな画像か
もしくは、そういう人たちが作ったゲームのリンクなどを紹介していただけると嬉しいです
VBA初心者でこのスレをたまにチラチラ見ているものですが
「EXCELで対戦格闘ゲーム」ってものがどういうものなのか全然想像できないです
(どうやったらそんなことできるの! てかどんな画面になるの!! 状態です)
もしよろしければ、何か雰囲気の掴めそうな画像か
もしくは、そういう人たちが作ったゲームのリンクなどを紹介していただけると嬉しいです
434427
2018/03/18(日) 21:11:28.30ID:5x2puHKk >>428
お返事遅くなってすみません。
コード丸写しで略さずにかいたところ、うまく動きました。
エラーの前のbookとsheetをアクティブにしただけでは足りなかったようで。
勉強になりました。
ありがとうございました。
お返事遅くなってすみません。
コード丸写しで略さずにかいたところ、うまく動きました。
エラーの前のbookとsheetをアクティブにしただけでは足りなかったようで。
勉強になりました。
ありがとうございました。
435デフォルトの名無しさん
2018/03/18(日) 21:34:46.44ID:utQAsfrI on
436デフォルトの名無しさん
2018/03/18(日) 21:35:52.97ID:utQAsfrI ontimeでopenするとかは?
437デフォルトの名無しさん
2018/03/19(月) 07:21:13.16ID:We1Ev2gv >>433
ちと古いけどこういうのがある
Excel VBA アクションゲーム作成入門 Excel 2007/2003/2002 対応
https://book.impress.co.jp/books/2686
ちと古いけどこういうのがある
Excel VBA アクションゲーム作成入門 Excel 2007/2003/2002 対応
https://book.impress.co.jp/books/2686
438デフォルトの名無しさん
2018/03/19(月) 20:14:20.80ID:uXl73OAC >>437
紹介ありがとうだけど…、本だとやっぱりよく実感がつかめない…
でその本のタイトルで色々ググってみたら実際にゲームをやってる動画が出てきた
エクセルでスーパーマリオを作ってみた
http://www.nico video.jp/watch/sm12052293
Excelでこんなものが作れちゃうってすごい!(というか見てもなお信じられないが)
紹介ありがとうだけど…、本だとやっぱりよく実感がつかめない…
でその本のタイトルで色々ググってみたら実際にゲームをやってる動画が出てきた
エクセルでスーパーマリオを作ってみた
http://www.nico video.jp/watch/sm12052293
Excelでこんなものが作れちゃうってすごい!(というか見てもなお信じられないが)
439デフォルトの名無しさん
2018/03/19(月) 20:59:21.19ID:Lmqu9UWt440デフォルトの名無しさん
2018/03/19(月) 22:27:28.31ID:bkGJBs4p スーパーマリオのDLLとかあるんか?
すげーなエクセルって
すげーなエクセルって
441デフォルトの名無しさん
2018/03/19(月) 23:08:18.69ID:SfVA8M0M >>440
DLLは自分でいくらでも作れるし、スーパーマリオもDLL化は可能だけど普通はそんなバカなことはやらない
DLLは自分でいくらでも作れるし、スーパーマリオもDLL化は可能だけど普通はそんなバカなことはやらない
442デフォルトの名無しさん
2018/03/20(火) 00:08:55.57ID:w5UAsH4d443デフォルトの名無しさん
2018/03/20(火) 00:13:05.69ID:XeOK7PK4444デフォルトの名無しさん
2018/03/20(火) 01:20:07.81ID:NBntR4Uy はいはい、メゾット君は無視しましょうね〜
445デフォルトの名無しさん
2018/03/20(火) 06:01:07.86ID:w5UAsH4d メゾット野郎はいつも口先ばかりwwwwwwww
違うってんならゲーム作ってみせろ無能wwwwwwwwwww
違うってんならゲーム作ってみせろ無能wwwwwwwwwww
446デフォルトの名無しさん
2018/03/20(火) 08:02:11.84ID:Su8VuYEw ゲームをエクセルで作る意味って何があるの?
447デフォルトの名無しさん
2018/03/20(火) 08:03:53.80ID:TJC60I00 意味は他人に教わるものじゃない
自分で見出すのだ
自分で見出すのだ
448デフォルトの名無しさん
2018/03/20(火) 08:14:23.93ID:mdjnVZmX やろうと思えばできるって言ってもなあ
やってない人が言ってもみたいな
やってない人が言ってもみたいな
449デフォルトの名無しさん
2018/03/20(火) 08:32:50.91ID:Su8VuYEw マリオのゲームってもコントロールしてるわけじゃないでしょ?
ドットに色表示してるだけじゃないの?
ドットに色表示してるだけじゃないの?
450デフォルトの名無しさん
2018/03/20(火) 09:49:54.48ID:uUCQMwFd451デフォルトの名無しさん
2018/03/20(火) 15:10:05.57ID:HXa9qFC5452デフォルトの名無しさん
2018/03/20(火) 16:00:38.63ID:J0Id73NT DLLしたあとインスコするんだったっけ。
453デフォルトの名無しさん
2018/03/20(火) 19:53:45.15ID:FFuoeUFR >>452
同じフォルダに置いておけば使えるだろw
同じフォルダに置いておけば使えるだろw
454デフォルトの名無しさん
2018/03/20(火) 20:20:30.33ID:GZSZ4At9 ボケ殺し
455デフォルトの名無しさん
2018/03/20(火) 22:16:37.59ID:BysB7y8w アスペなんやで
456デフォルトの名無しさん
2018/03/20(火) 22:48:23.28ID:9kggXYDo 質問です。
任意のフォルダ(ThisBookと同じフォルダ)の中にある
xlsファイルの数を取得する方法を考えています。
Dim N as Integer
With CreateObject("Scripting.FileSystemObject")
For Each ff In .GetFolder(ThisWorkbook.Path).Files
If UCase(.GetExtensionName(ff.Path)) = "xls" Then N = N + 1
Next
End With
ネットで調べてみたものの、カウントがされません。
現在対象のフォルダにはxlsファイルが一つあります。
どこを修正すれば良いのでしょうか。
教えてください。
任意のフォルダ(ThisBookと同じフォルダ)の中にある
xlsファイルの数を取得する方法を考えています。
Dim N as Integer
With CreateObject("Scripting.FileSystemObject")
For Each ff In .GetFolder(ThisWorkbook.Path).Files
If UCase(.GetExtensionName(ff.Path)) = "xls" Then N = N + 1
Next
End With
ネットで調べてみたものの、カウントがされません。
現在対象のフォルダにはxlsファイルが一つあります。
どこを修正すれば良いのでしょうか。
教えてください。
457デフォルトの名無しさん
2018/03/20(火) 23:07:13.92ID:BysB7y8w >>456
UCaseの意味をもう一度調べてみれば?
UCaseの意味をもう一度調べてみれば?
458デフォルトの名無しさん
2018/03/20(火) 23:25:24.58ID:qVb9KqM8 Ruby なら、これだけだが
puts Dir.glob('*.txt').size #=> 5
puts Dir.glob('*.txt').size #=> 5
459デフォルトの名無しさん
2018/03/20(火) 23:29:52.36ID:9kggXYDo460デフォルトの名無しさん
2018/03/21(水) 11:16:23.41ID:7pPMZ9pD461デフォルトの名無しさん
2018/03/21(水) 23:19:13.74ID:1JiLJjJR そーゆー感性ってすごく大事
なんとなくだが
なんとなくだが
462デフォルトの名無しさん
2018/03/22(木) 23:48:33.27ID:wY4uz5GL そいうWithの使い方は嫌い
んとなくだが
んとなくだが
463デフォルトの名無しさん
2018/03/23(金) 05:10:41.67ID:fhxmeXqE 寧ろ、with はああいう使い方をすべきなんじゃないの。単なる記述の省略としてだけでなく。
464デフォルトの名無しさん
2018/03/23(金) 07:23:25.20ID:KEQJOoX5 いんや、.NetのUsingみたいに解放は確実に出来るけど
ひとつのスコープにひとつしか使えないし
コーディングに慣れてる人には
一瞬、どこで生成してるの?ってなるから
可読性の見地からイマイチかなと思う
ひとつのスコープにひとつしか使えないし
コーディングに慣れてる人には
一瞬、どこで生成してるの?ってなるから
可読性の見地からイマイチかなと思う
465デフォルトの名無しさん
2018/03/23(金) 07:26:59.80ID:L9ucwTOA 既におなじみの使い方だろうとしか
466デフォルトの名無しさん
2018/03/23(金) 07:47:34.14ID:Kb85u4Z4 withってusingみたいに解放してくれるんだ
Set使うより簡潔にできるのね
Set使うより簡潔にできるのね
467デフォルトの名無しさん
2018/03/23(金) 08:04:55.76ID:FQA7q+b8468デフォルトの名無しさん
2018/03/23(金) 08:12:14.14ID:3JBwFnH8 こんなもんコピペグラマーでもしょっちゅう目にしてるはず
この程度でわかりにくいとか、どんだけ素人だ
ただ、老眼の俺にはドットの見落とし、書き漏らしがちょっと怖い
この程度でわかりにくいとか、どんだけ素人だ
ただ、老眼の俺にはドットの見落とし、書き漏らしがちょっと怖い
469デフォルトの名無しさん
2018/03/23(金) 12:22:12.90ID:5CV31jFy470デフォルトの名無しさん
2018/03/23(金) 18:30:24.67ID:fhxmeXqE471デフォルトの名無しさん
2018/03/23(金) 19:28:31.68ID:L9ucwTOA472デフォルトの名無しさん
2018/03/23(金) 20:26:02.56ID:qUw1cRZJ 無知なのは仕方がないとしてもEnd Withの後にClass_Terminateが呼び出されるのなら
論理的な帰結としてWithがオブジェクトの解放をしているのではないと気がついて欲しかったなあ
論理的な帰結としてWithがオブジェクトの解放をしているのではないと気がついて欲しかったなあ
473デフォルトの名無しさん
2018/03/23(金) 20:32:59.84ID:L9ucwTOA474デフォルトの名無しさん
2018/03/23(金) 20:43:47.72ID:L9ucwTOA それに「無知」とは何のことかな?
非明示的にデストラクトされてもFreeはされない言語があってその事を知らない、という意味かな?
だとしたら知らない
非明示的にデストラクトされてもFreeはされない言語があってその事を知らない、という意味かな?
だとしたら知らない
475デフォルトの名無しさん
2018/03/23(金) 22:16:31.73ID:LTH6T9fs476デフォルトの名無しさん
2018/03/23(金) 22:31:56.84ID:DV5xQmy6 解放の方法が違う程度の事を気にしてたら現場で発狂しまくりだろうなぁ
477デフォルトの名無しさん
2018/03/24(土) 00:04:50.79ID:X8NV5dnx スタイルは大事だから気にするわな。
気にしない奴はバグ増えまくりだ。
現場が忙しくなると崩れて来る。
そして俺のバグも増えるというわけさ。
気にしない奴とは仕事したくないな。
気にしない奴はバグ増えまくりだ。
現場が忙しくなると崩れて来る。
そして俺のバグも増えるというわけさ。
気にしない奴とは仕事したくないな。
478デフォルトの名無しさん
2018/03/24(土) 00:39:44.09ID:TyYpGZwY 解放の方法てwそんなもんないわwww
479デフォルトの名無しさん
2018/03/24(土) 01:08:51.19ID:nM3MUJGs プログラマってどういう大学のでの人たちがやってるんだ?
あんま高学歴のイメージ湧かないんだけど
あんま高学歴のイメージ湧かないんだけど
480デフォルトの名無しさん
2018/03/24(土) 02:40:55.22 Withをネストして内側から外側を参照するにはどうすればいいの?
最悪それ自身のオブジェクトを変数に保持できればいいけどできないよね?
>>456を例にとると(この場合ネストするメリットは何もないけど)
Dim N As Integer
With CreateObject("Scripting.FileSystemObject")
Dim obj As Object
Set obj = .
With .GetFolder(ThisWorkbook.Path)
For Each ff In .Files
If LCase(obj.GetExtensionName(ff.Path)) = "xls" Then N = N + 1
Next
End With
End With
とか
Dim N As Integer
With CreateObject("Scripting.FileSystemObject")
With .GetFolder(ThisWorkbook.Path)
For Each ff In .Files
If LCase(..GetExtensionName(ff.Path)) = "xls" Then N = N + 1
Next
End With
End With
とか
最悪それ自身のオブジェクトを変数に保持できればいいけどできないよね?
>>456を例にとると(この場合ネストするメリットは何もないけど)
Dim N As Integer
With CreateObject("Scripting.FileSystemObject")
Dim obj As Object
Set obj = .
With .GetFolder(ThisWorkbook.Path)
For Each ff In .Files
If LCase(obj.GetExtensionName(ff.Path)) = "xls" Then N = N + 1
Next
End With
End With
とか
Dim N As Integer
With CreateObject("Scripting.FileSystemObject")
With .GetFolder(ThisWorkbook.Path)
For Each ff In .Files
If LCase(..GetExtensionName(ff.Path)) = "xls" Then N = N + 1
Next
End With
End With
とか
481470
2018/03/24(土) 02:46:47.80ID:fNSyCTew スマソが、結局>>456のコードにおいて、fileSystemObjectはEnd withのタイミングでfreeされるってことでok?
で、With OpenTextFile()とした場合も同様にcloseされる理解でok?
で、With OpenTextFile()とした場合も同様にcloseされる理解でok?
482デフォルトの名無しさん
2018/03/24(土) 02:53:52.34ID:fNSyCTew483デフォルトの名無しさん
2018/03/24(土) 03:02:44.42 >>481
With New ObjectX
.Exec
End With
は、
Dim obj As ObjectX
Set obj = New ObjectX
obj.Exec
Set obj = Nothing
と同等という理解
根拠となる文献は↓の人が挙げてくれるはず
With New ObjectX
.Exec
End With
は、
Dim obj As ObjectX
Set obj = New ObjectX
obj.Exec
Set obj = Nothing
と同等という理解
根拠となる文献は↓の人が挙げてくれるはず
484デフォルトの名無しさん
2018/03/24(土) 03:12:24.84ID:TyYpGZwY つまりNothingを代入してもオブジェクトが解放されないのと同様にEnd Withでオブジェクトは解放されない
たまたまそこでオブジェクトの参照カウントが0になったから解放されただけ
たまたまそこでオブジェクトの参照カウントが0になったから解放されただけ
485デフォルトの名無しさん
2018/03/24(土) 04:09:07.06ID:fNSyCTew > freeされる
という表現が悪かったか。
Nothing代入と等価ならそれでええです。いずれにせよその類の機能はwithに無いと思っていたので。
ありがとう。
という表現が悪かったか。
Nothing代入と等価ならそれでええです。いずれにせよその類の機能はwithに無いと思っていたので。
ありがとう。
486デフォルトの名無しさん
2018/03/24(土) 05:50:00.67ID:3Pb/XQ// >>484
うん?.Net系と勘違いしてない?
.Net系は確かに参照しているところが無くなればガベージコレクションで解放するけど
VBAや旧VBであるVB6はNothingを入れるとそのObjectそのものが解放される仕組みだと思ったけど
うん?.Net系と勘違いしてない?
.Net系は確かに参照しているところが無くなればガベージコレクションで解放するけど
VBAや旧VBであるVB6はNothingを入れるとそのObjectそのものが解放される仕組みだと思ったけど
487デフォルトの名無しさん
2018/03/24(土) 05:57:47.30ID:Ou2f/XLi 参考までに
With New ObjectX
.Exec
End With
→End Withで解放される
With New ObjectY
.Exec
GoTo Line1
End With
Line1:
→解放されない(関数の最後で解放)
GoTo Line2
With New ObjectZ
Line2:
.Exec
End With
→生成されない(.Execで実行時エラー)
With New ObjectX
.Exec
End With
→End Withで解放される
With New ObjectY
.Exec
GoTo Line1
End With
Line1:
→解放されない(関数の最後で解放)
GoTo Line2
With New ObjectZ
Line2:
.Exec
End With
→生成されない(.Execで実行時エラー)
488デフォルトの名無しさん
2018/03/24(土) 06:08:07.14ID:Ou2f/XLi >>486
仮にClass1で以下のプロパティが定義されているとすると
Public Property Get Self() As Class1
Set Self = Me
End Property
以下のWithで生成されたオブジェクトはEnd Withで解放されない
Dim obj As Class1
With New Class1
Set obj = .Self
End With
仮にClass1で以下のプロパティが定義されているとすると
Public Property Get Self() As Class1
Set Self = Me
End Property
以下のWithで生成されたオブジェクトはEnd Withで解放されない
Dim obj As Class1
With New Class1
Set obj = .Self
End With
489デフォルトの名無しさん
2018/03/24(土) 06:24:23.25ID:3Pb/XQ// >>488
同様にNotingを入れると?
同様にNotingを入れると?
490デフォルトの名無しさん
2018/03/24(土) 08:07:41.90ID:dVRvT3Vm491デフォルトの名無しさん
2018/03/24(土) 08:16:33.84ID:wM3wzjps492デフォルトの名無しさん
2018/03/24(土) 08:21:58.80ID:Ypx42xzO VBA Set Obj = Nothing は必要か
http://thom.hateblo.jp/entry/2015/12/20/135035
http://thom.hateblo.jp/entry/2015/12/20/135035
493デフォルトの名無しさん
2018/03/24(土) 08:41:38.11ID:G40hdKBQ >>484
これでしょ
これでしょ
494デフォルトの名無しさん
2018/03/24(土) 09:04:16.28ID:dVRvT3Vm495デフォルトの名無しさん
2018/03/24(土) 09:33:19.46ID:DtiNFwiJ 俺はオブジェクトにNothingを入れるのを諦めた
プロシージャの途中で条件によりExit Subする時とかまでカバーしようとすると
コードが変な方向にねじ曲がっていく
プロシージャの途中で条件によりExit Subする時とかまでカバーしようとすると
コードが変な方向にねじ曲がっていく
496デフォルトの名無しさん
2018/03/24(土) 09:40:33.58ID:E2uahCPZ >>494
悔しくて草生やした時点でお前の負け
悔しくて草生やした時点でお前の負け
497デフォルトの名無しさん
2018/03/24(土) 10:14:46.87ID:maeX3hx+498デフォルトの名無しさん
2018/03/24(土) 10:19:01.04ID:Ou2f/XLi499デフォルトの名無しさん
2018/03/24(土) 10:33:33.02ID:TyYpGZwY500デフォルトの名無しさん
2018/03/24(土) 10:43:35.46ID:dVRvT3Vm >>496
反論できなくて悔しいね w
反論できなくて悔しいね w
501デフォルトの名無しさん
2018/03/24(土) 10:50:03.59ID:dVRvT3Vm502デフォルトの名無しさん
2018/03/24(土) 10:50:20.70ID:TyYpGZwY >>500
バカはしゃべるな
バカはしゃべるな
503デフォルトの名無しさん
2018/03/24(土) 11:44:41.58ID:D3IeoiHR 「ネストしているときはWithを使えないからネストしないときもWithはやめよう」
↑
これを「一貫性」と呼ぶのか?流石にそういう主張じゃないよな。
↑
これを「一貫性」と呼ぶのか?流石にそういう主張じゃないよな。
504デフォルトの名無しさん
2018/03/24(土) 11:51:46.46ID:Z79Bg+7E ExcelがPythonをネイティブサポートしたら世界はどう変わるか。
505デフォルトの名無しさん
2018/03/24(土) 11:55:52.55ID:3GLZsUhU506デフォルトの名無しさん
2018/03/24(土) 12:03:27.93ID:nM3MUJGs 応用力とは言わないんじゃないの
その場しのぎの対応は、一貫性がないんだよ
その場しのぎの対応は、一貫性がないんだよ
507デフォルトの名無しさん
2018/03/24(土) 12:22:38.50 >>480の汎用的な解ができたよー
【標準モジュール】
Public Function ObjectWrapper(ByRef ObjectRef As Object, Optional ByRef ParentWrapper As ObjectWrapperClass = Nothing) As ObjectWrapperClass
Dim wrapper As ObjectWrapperClass
Set wrapper = New ObjectWrapperClass
Set wrapper.Ref = ObjectRef
Set wrapper.Parent = ParentWrapper
Set ObjectWrapper = wrapper
End Function
【クラスモジュール : ObjectWrapperClass】
Private m_ref As Object
Private m_parent As ObjectWrapperClass
Public Property Set Ref(ByRef ObjectRef As Object)
Set m_ref = ObjectRef
End Property
Public Property Get Ref() As Object
Set Ref = m_ref
End Property
Public Property Set Parent(ByRef ObjectWrapper As ObjectWrapperClass)
Set m_parent = ObjectWrapper
End Property
Public Property Get Parent() As ObjectWrapperClass
Set Parent = m_parent
End Property
Public Property Get Self() As Object
Set Self = Me
End Property
【標準モジュール】
Public Function ObjectWrapper(ByRef ObjectRef As Object, Optional ByRef ParentWrapper As ObjectWrapperClass = Nothing) As ObjectWrapperClass
Dim wrapper As ObjectWrapperClass
Set wrapper = New ObjectWrapperClass
Set wrapper.Ref = ObjectRef
Set wrapper.Parent = ParentWrapper
Set ObjectWrapper = wrapper
End Function
【クラスモジュール : ObjectWrapperClass】
Private m_ref As Object
Private m_parent As ObjectWrapperClass
Public Property Set Ref(ByRef ObjectRef As Object)
Set m_ref = ObjectRef
End Property
Public Property Get Ref() As Object
Set Ref = m_ref
End Property
Public Property Set Parent(ByRef ObjectWrapper As ObjectWrapperClass)
Set m_parent = ObjectWrapper
End Property
Public Property Get Parent() As ObjectWrapperClass
Set Parent = m_parent
End Property
Public Property Get Self() As Object
Set Self = Me
End Property
508デフォルトの名無しさん
2018/03/24(土) 12:24:31.16 >>507の使用例
With ObjectWrapper(CreateObject("Scripting.FileSystemObject"))
With ObjectWrapper(.Ref.GetFolder(ThisWorkbook.Path), .Self)
For Each ff In .Ref.Files
If LCase(.Parent.Ref.GetExtensionName(ff.Path)) = "xls" Then N = N + 1
Next
End With
End With
With ObjectWrapper(CreateObject("Scripting.FileSystemObject"))
With ObjectWrapper(.Ref.GetFolder(ThisWorkbook.Path), .Self)
For Each ff In .Ref.Files
If LCase(.Parent.Ref.GetExtensionName(ff.Path)) = "xls" Then N = N + 1
Next
End With
End With
509デフォルトの名無しさん
2018/03/24(土) 13:02:42.69ID:TyYpGZwY java臭いw
510デフォルトの名無しさん
2018/03/24(土) 15:59:40.14ID:+7wE18C6 1点質問です。
ODBC接続するマイクロソフトクエリ(xxxx.dqy)をエクセルVBA(EXCEL2010)から起動する際、
ユーザとパスワードを自動入力してログインするマクロを作成したいのですが、
どのように記載すればいいでしょうか。詳しい方、ご教示下さい。
宜しくお願い致します。
sub mac()
Workbooks.Open ("C:\TEMP\xxxx.dqy")
'/// ユーザ(abc)、パスワード(p1a#s%s)自動入力
end sub
ODBC接続するマイクロソフトクエリ(xxxx.dqy)をエクセルVBA(EXCEL2010)から起動する際、
ユーザとパスワードを自動入力してログインするマクロを作成したいのですが、
どのように記載すればいいでしょうか。詳しい方、ご教示下さい。
宜しくお願い致します。
sub mac()
Workbooks.Open ("C:\TEMP\xxxx.dqy")
'/// ユーザ(abc)、パスワード(p1a#s%s)自動入力
end sub
511デフォルトの名無しさん
2018/03/24(土) 17:38:17.30ID:H6zN6TQZ■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- バービー、 台湾有事の発言の波紋で「たまったもんじゃない」「高市さんに真意は聞きたい」「国民に向けて説明してほしい」 [muffin★]
- 20代の3割が「テレビ見ない」現実…そして静かに広がる「究極のテレビ離れ」とは [muffin★]
- 【悲報】中国→日本行きの航空チケット、高市有事の影響で50万人分がキャンセルされる [834922174]
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
- んなっしょい🍬禁止🈲のお🏡
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- 高市早苗「……なんて言ってみたw」中国「なんだ、言ってみただけかw」👈これで全部元通りになるという事実 [782460143]
- 【悲報】ガラパゴス島国ジャップ、自分達の容姿が優れてると錯覚してしまう [383063292]
