[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 10/09 14:54 / Filesize : 339 KB / Number-of Response : 1038
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part51



1 名前:デフォルトの名無しさん [2017/11/08(水) 11:26:30.13 ID:+KUB1/9hd.net]

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

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

※関連スレ
VBAなんでも質問スレ Part2
mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/

※前スレ
Excel VBA 質問スレ Part50
mevius.2ch.net/test/read.cgi/tech/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)


508 名前:名無し mailto:sage [2017/12/14(木) 21:55:08.02 ID:5D+dY0yO0.net]
>>495
文字列として返ってきたから文字列型と思ってるなら、一回workbook型をウォッチに入れてみたら?
ツリー形式でオブジェクトの、中身が見れるから全然別ものだとわかるはず

509 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 21:58:53.83 ID:zDxHi8mM0.net]
>>494
バーカw
"C:\うんち.xlsx"がworkbooks型の変数に代入できる分けないだろw
まあデフォルトプロパティなんてものが罪なんだが
てか、workbooks型のデフォルトプロパティってNameプロパティなんだな(Pathか?)
はじめて知ったわ、使わんから

510 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 22:19:18.62 ID:cH/6/SdG0.net]
Application.GetOpenFilename → 指定したファイルのパス【String型(正確にはVariant)】を取得

Workbooks.Open → filenameに【String型でファイルパスを指定】すると
そのファイルを開いた結果の【Workbook型オブジェクト】を取得

Dim str as String
Dim wb as Workbook
str = Application.GetOpenFilename →OK
str = Workbooks.Open(Application.GetOpenFilename) →NG
Set wb = Application.getOpenfilename →NG
Set wb = Workbooks.Open(Application.GetOpenFilename) →OK

オブジェクトブラウザーを見ると勉強になるよ
それぞれ、こうなっている
Class Application
Function GetOpenFilename()

Class Workbooks
Function Open(Filename As String) As Workbook

511 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 23:32:44.97 ID:IXGcMbV0a.net]
>>488
違う。
新規ブックの場合はファイル名じゃないだろ。
理解出来て無い奴に理解出来る奴向けの説明をしても駄目だ。

たまたま同じになってもブック名はファイル名じゃ無い。
だからパス付きだろうがパス無しだろうがファイルはファイルだと考えても、それとは関係ないブック名は違う。
C:¥abcd.xlsxというファイルとブック名としてのabcd.xlsxとは何の関連も無い。
似たように見えるのはたまたまだ。
だからC:¥abcd.xlsxはブック名には成りようがない。

>>495
Application.GetOpenFilenaneで帰ってくるのは"C:¥あ.xlsx"という文字だけな。
Excelブックとは関係ないファイル名だな。
例えばメモ帳で適当に入力して保存したファイルでも取ってこれるだろ。
それに別に"C:¥あ.xlsx"はExcelじゃないと開けないというわけでも無いぞ。
そもそも"C:¥あ.xlsx"はApplication.GetOpenFilenaneで取ってきたからファイル名だろうけど、取ってきた後のその文字列は=ファイル名とは限らん。

Dim wb As Workbook
Dim strFile As String
strFile=Application.GetOpenFilename
ってのはstrFileにたまたまApplication.GetOpenFilenameによってファイル名が入ったということで、
Set wb = Workbooks.Open(strFile)
のstrFileがファイル名かどうかは分からん。
このー文はApplication.GetOpenFilenameのことなんか知らんからな。
このー文の意味するところはstrFileをファイル名と思って開いてみて、開けたらwbに格納するってこと。

512 名前:デフォルトの名無しさん [2017/12/14(木) 23:34:29.57 ID:oVDd8Fug0.net]
短くわかりやすくまとめられるやついねえの?
いくらVBAができたって引き継ぎができない奴は無能なんだが

513 名前:デフォルトの名無しさん [2017/12/14(木) 23:41:16.00 ID:oVDd8Fug0.net]
俺もずっとROMってたけど
こいつらの説明はマジで意味不明だわ

お、良い線言ってんな って思ったらいきなりカタカナ語がでてきてググっても意味不明
こいつらマジもんのコミュ障すぎてイラつきしかない

オナニー発言ばっかで答えがない

Apllcation.GetOpen
でaaaっていうエクセルを開く

C:\aaa.xlsx が返ってくる
しかしWB(Workbookオブジェクト変数にしている)では指定できない

でも
Workbooks.Open filename:=Apllcation.GetOpen
これはWorkBook型に入る

つまるところどっちもC\aaa.xlsxって文字列を

514 名前:返してんじゃねえの?何がちげえの?ってこと

これいうの10回目ないい加減学習しろイラつくな
[]
[ここ壊れてます]

515 名前:デフォルトの名無しさん [2017/12/14(木) 23:44:38.82 ID:oVDd8Fug0.net]
こいつらのたとえ

子供がリンゴを指さす
「これなに?」

こいつら
「これは物質○○が含まれて○○っていう色素があって赤い、つまり栄養は○○がふくまれている
ちなみにその栄養は○○って物質にも入っている」ドヤァ

って感じ
見ててムカつくから発言したわ

516 名前:デフォルトの名無しさん [2017/12/14(木) 23:46:05.94 ID:oVDd8Fug0.net]
おれが聞きたいのは

なんでワークブックスオープンで指定したファイル名文字列だとワークブック変数に格納できんだよって話
ゲットオープンはパスがついているから格納できないのはわかった

わかりやすく答えろ



517 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 23:55:54.24 ID:n2gI2QxJ0.net]
前にいた関西弁の荒しと同一人物なんだろうけど、健気にもちょっと勉強してきてるのが笑えるw

518 名前:デフォルトの名無しさん mailto:sage [2017/12/14(木) 23:56:28.06 ID:qidVZ8HWa.net]
>>503
無理。
軍事用にコンピューターというものが発明されてから今日までの歴史と仕組みを説明しなきゃならんから。
そして、君にそれを理解出来るだけの能力が有るとは思えないから。

大抵の人は全てを理解しているわけじゃ無いが、自分の利用している範囲ぐらいは理解している。

519 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:06:16.08 ID:sv72SjNaa.net]
>>501
ん?
>Apllcation.GetOpenでaaaっていうエクセルを開く

これ間違い。
開かない。
ファイル名を取得するだけ。

>しかしWB(Workbookオブジェクト変数にしている)では指定できない

ファイル名じゃないからな。
ブック名を指定する必要がある。
たまたま偶然ファイル名と同じだけどパス付きはブック名とは違うな。

>Workbooks.Open filename:=Apllcation.GetOpen
これはWorkBook型に入る

Workbook型に入ってるのはファイル名じゃない。
Set WB=Workbooks.Openの意味するところはfilenameに指定された文字列をファイル名と見立ててブックを開き、もし仮に運よく開くことができたらそのブックをWBに格納するという意味。

520 名前:デフォルトの名無しさん [2017/12/15(金) 00:18:22.73 ID:qta4Ddk+0.net]
>指定された文字列をファイル名と見立ててブックを開き

これが意味不明

GetOpenで指定したファイル名を返すんだろ?
じゃあこれはファイル名になるじゃねえのか?
ファイルを開かなかった場合はファルスがかえることはわかる

521 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:22:57.61 ID:OGmesrFEa.net]
>>507
GetOpenFilenameの文とWorkbooks.Openの文は別の文だろ。
プログラム組む奴はGetOpenFilenameで取得したものと違うものを入れることも出来る。
だから結果的に入ったのはファイル名でも、
Workbooks.Open自身はそれを前提にはしないだろ。

522 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:25:39.28 ID:HZMi2rOwd.net]
>>498
このレスの一番下がわかりやすいんじゃない?

523 名前:デフォルトの名無しさん [2017/12/15(金) 00:26:48.82 ID:qta4Ddk+0.net]
>>508
日本語話して
ドヤ顔くん

524 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:26:50.88 ID:Ma3k2IENa.net]
GetOpenFilenameはメモ帳のファイル名を取って来ることも出来る。
Wordのファイル名を取って来ることも出来る。
Workbooks.Openで開けないファイル名ということも有るし、Workbooks.Openで開けるファイル名だとしてもExcelで開かなければならないということも無い。

525 名前:デフォルトの名無しさん [2017/12/15(金) 00:27:25.61 ID:qta4Ddk+0.net]
>>509
オブジェクトブラウザーでてなんだよ
わからねえよ

526 名前:デフォルトの名無しさん [2017/12/15(金) 00:28:29.79 ID:qta4Ddk+0.net]
>>511
あーなんとなくわかったかな
Openメソッドで開ける=エクセル型=ワークブック型に格納可能

ってこと?



527 名前:デフォルトの名無しさん [2017/12/15(金) 00:32:05.55 ID:qta4Ddk+0.net]
>>498
つまりだ
君が言いたいのは(要約しないとダメなのかよ、、、)
application.GetOpenfilenameだと文字列として返ってくる
workbook型には文字列は入らない

こういうことが言いたいのね?

528 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:33:26.47 ID:JSBwNcqSa.net]
>>510
それはコンピューターというものをまるで理解出来ていないからそうなる。
厳密には
strFile = Application.GetOpenFilename
が実行されたからstrFileはファイル名だろとコンピューターに言っても、コンピューターは違います、文字列です。と言う。
strFileに入っている文字列のファイルは有るのかと問えば、有ります。と言う。
じゃあ、strFileはファイル名じゃねえかと問えば、違います、文字列です。と言う。

コンピュ−ターは人間が考えるような意味を理解しない。
定義通り動くだけ。

529 名前:デフォルトの名無しさん [2017/12/15(金) 00:35:45.56 ID:qta4Ddk+0.net]
>>515
また回りくどい言い方してんな


530 名前:頭悪いのか []
[ここ壊れてます]

531 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:39:33.42 ID:OGmesrFEa.net]
>>514
その理解で良い。

532 名前:デフォルトの名無しさん [2017/12/15(金) 00:41:12.92 ID:qta4Ddk+0.net]
>>517
最初からこう言えよ
馬鹿じゃねえの?
ほんとにバカしかいねえよ
呆れるというか心配になってくる

533 名前:デフォルトの名無しさん [2017/12/15(金) 00:42:06.72 ID:qta4Ddk+0.net]
補足するとworkbook.Openで返ってくる(開く)=workbook型ということね

534 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:42:07.75 ID:W4xtzKqva.net]
>>516
君がどこまで分かって無いのか、こっちは分からないんだ。
エスパーじゃ無いんだから。

>>514の話だって型とは何だ?という説明もしなきゃならんのか?と考えれば>>515のような話も必要になって来る。

535 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 00:57:45.39 ID:2M4lhz74x.net]
>>518
最初からみーんなそう言ってるぞw
ようやく頭が追い付いてきたのかな?

536 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 01:03:08.36 ID:2M4lhz74x.net]
メゾット君もだんだん自分の頭の悪さを自覚してきてるみたいだし、あと二日以内には恥ずかしい捨て台詞を残して消える運命かな
レス保存したからいつでも再放送出来るけどなwww



537 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 01:23:44.47 ID:IJmI7Oq80.net]
>>514,518
>>415でまっさきに型を理解しろって言ってんだが
まあここまで食い下がる根性は認めるけど、いいかげん最低限は自分で勉強してくれ

538 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 01:24:37.63 ID:JMZCHg3W0.net]
多分Excel VBA入門的な記事を読み進めればすぐに理解できたと思うんですけど
勉強の進め方が下手くそすぎる

539 名前:デフォルトの名無しさん [2017/12/15(金) 09:26:34.27 ID:qta4Ddk+0.net]
で、この型をしっかりと説明してるのはどこだ?

540 名前:デフォルトの名無しさん [2017/12/15(金) 09:27:43.96 ID:qta4Ddk+0.net]
URLでもなんでも貼ってよ

541 名前:デフォルトの名無しさん [2017/12/15(金) 10:46:54.06 ID:qta4Ddk+0.net]
ちなみにさ
VBAってなんでメンテナンスがいるの?
コードを直接弄るわけじゃないからバグなんてでないと思うけど

542 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 11:01:21.94 ID:sRcKW4ZTM.net]
てめーの提示したコードエラー出まくりバグばっかじゃねーか

543 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 11:23:22.68 ID:HChVIO9E0.net]
コードは変わらなくてもWindowsとかExcelとか業務仕様とか、まわりが変わっていく

544 名前:デフォルトの名無しさん [2017/12/15(金) 11:26:16.78 ID:qta4Ddk+0.net]
VBAは楽しいぞ
俺はmos マスターだがVBAはいっさん知らんかった
最終目標としては意味不明な超複雑なコードを記述し
おれが辞めた後は誰も対処ができないという優越感を味わいたい
そしてVBEをだしてカチカチしてる姿がなんとも知的でかっこいい
ほんとこれだけのきっかけが知識につながって行く

545 名前:デフォルトの名無しさん [2017/12/15(金) 11:36:34.77 ID:yfj2Ro7Gd.net]
今どきVBAに新規参入者がいる驚き

546 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 11:48:05.70 ID:HChVIO9E0.net]
>>530
>>500



547 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 12:00:52.51 ID:IqUBh/zH0.net]
>>530
それは能力の低い奴の言う言葉。
能力のある奴はお前が辞めても対処できるように記述する。

548 名前:名無し mailto:sage [2017/12/15(金) 12:08:15.31 ID:aoP9DSfXM.net]
>>530
いや、ずっと同じ質問してる辺りこれっぽっちも知識が増えているように見えないんだが
そしてブーメランに草

549 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 12:11:37.98 ID:IqUBh/zH0.net]
>>523
そこをあっさり理解出来ないからここまで時間制掛かってる。
彼の分かってない所はみんながそういうもんだとあっさり進む所で自分中心で考えること。
コンピューターが自分と同じように考えてくれると思ってる。

アレンブラやマシン語の不自由な世界で自分と同じようには考えてくれないということを思い知った方が良い。

550 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 12:26:43.87 ID:SvHkecGU0.net]
もの凄く複雑で他人の理解が及ばな

551 名前:「ようなコード書くのが目標なら、
なおさら誰の助けも借りずに独学で高めていくのが重要なんだよなぁ。

ネットで検索して簡単に見つかるような情報すら当たれないヤツが目指すものじゃないよね。
[]
[ここ壊れてます]

552 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 12:27:05.72 ID:JZsZmqT4r.net]
>>499
いやなんかまた鼻息荒くしちゃってるけど元々同じって言ったのお前だからなw

なんで素直にブック名とファイル名は違うって言えないんだよw
どうせ下手くそな説明なんだから無理して技巧的に言おうとすんなw

553 名前:デフォルトの名無しさん [2017/12/15(金) 12:27:38.94 ID:qta4Ddk+0.net]
>>535
こいつらのオナニー意見なんて一切参考にせず自己解決したんだが?

Wrokbook型変数「これは文字列だから俺の方にははまらないよ」 = _
Application.GetOpenFilename「すまん、俺はただ選択されたファイルの文字列を返すだけなんだよ」

Workbook型変数「お、WorkbooksオブジェのOpenメソッドで開いとるやん。格納できるよ」= _
Workbooks.Open (Filename:=Application.GetOpenfilename)「俺は開いた文字列をファイル名として返すね」

これでどう?誰でもわかりやすいと思うけど?
頭悪すぎね?君たち

554 名前:デフォルトの名無しさん [2017/12/15(金) 13:00:25.68 ID:yfj2Ro7Gd.net]
なんか
1 + 1 =2

「1に1を加えると2になる」
と表現してる感じだなあ

555 名前:名無し mailto:sage [2017/12/15(金) 13:01:13.53 ID:aoP9DSfXM.net]
もう突っ込まないぞ!
次のお客様どうぞ

556 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 13:03:33.01 ID:SvHkecGU0.net]
>>539
そもそもWorkbooks.Openメソッドはファイル名を返さないから、
「1+1 は 2 じゃないぞ。俺たちは 1 + 1で200だ。10倍だぞ10倍」みたいなもん。



557 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 13:34:09.09 ID:8rowC9ysa.net]
>>538
わかった!君はプログラムじゃなくて日本語の勉強から始めよう

558 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 13:34:59.69 ID:8rowC9ysa.net]
会話形式にしてくれないと理解できないといってくれれば誰か頑張ったかもねw

559 名前:デフォルトの名無しさん [2017/12/15(金) 13:57:32.57 ID:qta4Ddk+0.net]
>>541
はいはいブック名ね
どっちでもいいだろアホ

560 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 14:06:04.35 ID:SvHkecGU0.net]
>>544
ブック名も返さないよ。
何にせよWorkbooks.Openメソッドが名前を返したら

Set WB = Workbooks.Open(Application.GetOpenFilename)

が成立しないから。

561 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 14:12:36.10 ID:sRcKW4ZTM.net]
いいからMSDNのリファレンス読んでこいよ

562 名前:デフォルトの名無しさん [2017/12/15(金) 14:42:08.62 ID:qta4Ddk+0.net]
>>545
はいはい
workbookオブジェクトを返すのね
はいはい死ね死ね

563 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 14:44:22.53 ID:IqUBh/zH0.net]
>>538
それ、全部既に言ってたからw
お前はみんながすんなり分かるところをこれだけすったもんだしてやっと分かっただけ。
これまでのやりとりが無かったら、それそのまんま言っても理解出来て無い。

そもそも、バカがどうしてバカなのかなんてこっちは理解出来ない。
お前とは違うからな。

564 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 14:47:50.40 ID:xyZ0U828M.net]
メソッドの返り値として何の型のどんなオブジェクトが返ってくることを意識する重要さが微塵もわかってないのでこいつのVBAスキルはここで打ち止めだな

565 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 15:09:10.26 ID:vqijPR8bp.net]
以降はスルーしよう

566 名前:デフォルトの名無しさん [2017/12/15(金) 15:21:09.44 ID:yfj2Ro7Gd.net]
整数 + 整数の戻り値が整数なのに整数 / 整数の戻り値が整数じゃない理由がわからない、不合理だ、と
駄々をこねる人間もいるんだからしょうがない



567 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 19:31:32.21 ID:lmKJ5VLWa.net]
世の中にはこういう本物のバカもいるんだなあと勉強になったよ

568 名前:デフォルトの名無しさん [2017/12/15(金) 19:39:48.70 ID:IAZ3SurN0.net]
わりとそこかしこに居るけどな、本物のバカ
ひきこもりか?おまえw

569 名前:デフォルトの名無しさん [2017/12/15(金) 21:40:28.03 ID:qta4Ddk+0.net]
>>549
まだ始めて2週間って話してなかった?
ちなMOSエキスパート所持者ね

570 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 21:49:11.45 ID:SvHkecGU0.net]
>>421からもう二週間も経ったのか。時が経つのは早いな。

571 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 22:06:37.13 ID:5LKBHQ7A0.net]
>>554
> ちなMOSエキスパート所持者ね

ここ、笑うとこですか?

572 名前:デフォルトの名無しさん mailto:sage [2017/12/15(金) 22:06:40.33 ID:sA/nQpBXa.net]
MOSエキスパート?
何それ美味しいの?

昔、「初心者だから仕様がないけどさ」と説教した相手が今回君が挑戦してる言語のエキスパート持ってたけどさ。

573 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 04:53:25.79 ID:kSf4Qz7z0.net]
先日、AutoFilterとValidationの不具合で質問したものです。
(まだ解決していませんが、、)
また新たな不具合に悩まされています。
このような場合、どこに報告すればMSの目にとまりますかね?
もし同一環境のかたおられましたら再現テストしていただけるとありがたいです。

[環境]
Microsoft Office Home and Business 2013
バージョン: 15.0.4989.1000 (2017/12)
Excel2013
Win10 64bit Core i7 Mem8GB

[手順]
以下の手順で実行するとシートSelectが不完全な状態になる。
 Trigger: 別シートの貼付画像のOnAction
 →PopupMenuのOnAction
 →呼び出されたProc内で、SheetSelect
  続けてAutofilter実施 (直接の原因ではない)
(その2へ)

574 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 04:53:47.87 ID:kSf4Qz7z0.net]
>>558
(その2)
[現象]
 ・Fitering成功しているように見えるが、非表示セルにカーソル移動できてしまう。
 ・セル値の削除が効かない。(連動イベントが動かず、本現象に気づく)
 ・範囲コピー貼り付けが正しく行われない。
 ・セルをコピーモードにしても、選択範囲が破線矩形にならない。
  →なんと恐ろしいことに、操作の対象が現在見えているActiveCellではなく、
   呼出元画像のあるシートの同一番地に対して行われている様子。
   破線矩形も元シートを開いたらそこにあった。
   削除処理も元シートに対して行われる。
   ステータスバーのセル値カウントも、現在見えているシートではなく、呼出元の情報を返す様子。
   ActiveCell.Address(External:=True)は実際に見えている移動先シートを示しているのに、、、

[発生条件の再検証]
 ・別シートの画像.OnAction→Popup.OnActionで初めて成立。
 ・画像.OnActionから直接Proc実行(Sheet選択、Autofilter実施)では再現せず。
 ・Alt+F8からのPopup起点とすると再現せず。
 ・Popup.OnActionを入れ子にしても再現せず。
 ・ボタンをTableと同じシートに配置した場合は再現せず。
 ・Office2010では再現せず。
(その3へ)

575 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 04:54:06.08 ID:kSf4Qz7z0.net]
>>558
(その3)
[試験に用いたコード]

1) テーブルとは別シートにある画像を選択して、ImmediateからOnAction登録。
Selection.OnAction = "mkPop"

2) Popup生成
Sub mkPop()
 With CommandBars.Add(Position:=msoBarPopup)
  With .Controls.Add
    .Caption = "Filter"
    .OnAction = "DoFilter"
  End With
  .ShowPopup
  .Delete
 End With
End Sub

3) Filterling実施
Sub DoFilter()
Sheets("List").Select
Sheets("List").Range("$A$1:$C$5").AutoFilter Field:=1, Criteria1:="TEST"
Debug.Print ActiveCell.Address(external:=True) '確認用
End Sub
** 実際には機材画像のPropertyから読み込んだ文字列でフィルタリング。
** 今回はAutoFilterは無実でシート選択の不全実行が現象の概要とみています。

576 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 04:56:00.08 ID:kSf4Qz7z0.net]
>>558
環境情報が抜けていました。
Win10 バージョン 1703 (OS ビルド 15063.786)



577 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 05:17:34.49 ID:kSf4Qz7z0.net]
>>558
(その4)
回避のためのリフレッシュ手順を忘れておりました。

[効果があるリフレッシュ操作]
 ' 以下、または手動によるシート切替(Screenupdating=False効かず、ちらつくが、、)
 '--------------------------------
 Application.SendKeys "^{PgDn}":Application.SendKeys "^{PgUp}"

 ' Popup表示前にSheet移動してしまう。(Cancel有無にかかわらず移動してしまうが、、)
 '--------------------------------
 Application.ScreenUpdating = False: Sheets("List").Select
 .ShowPopup

[効果がないもの]
 ' Filtering直前のAutoFilter再設置
 ActiveSheet.Range("$A$1:$C$5").AutoFilter

 ' 画面再描画処理
 Application.ScreenUpdating = False: Application.ScreenUpdating = True

 ' その他、以下を試したがNG
 Application.EnableEvents = True
 Application.DisplayFullScreen = True: Application.DisplayFullScreen = False
 Application.CalculateFull
 Application.CalculateFullRebuild
 AppActivate (Application.Caption)
 Worksheets("List").Activate
 Application.StatusBar = "aaaaaa": Application.StatusBar = False
 MsgBox "OK"

578 名前:名無し mailto:sage [2017/12/16(土) 05:26:07.46 ID:j6rMoAMF0.net]
そういうときは、doeventsやwaitも試してみるべし
今パソコン無いから試す暇がない

579 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 05:36:15.74 ID:kSf4Qz7z0.net]
>>563
そういえばDoEventsは試しました。
結果効果はなく、SendKeysを無効化して現象回避もできなくなるという逆効果も確認しました。

Waitはどこに入れると効果的ですかね。
間にStopを入れて一時停止したりはしてみましたけど、、、

580 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 05:45:39.73 ID:kSf4Qz7z0.net]
>>563
今回のはあまり待ち要素はないと見ていますが、以下の3カ所に2秒ほど入れてみました。
 ・シート切替の前後、.ShowPopupの直前
再現してしまいました。

581 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 18:57:10.19 ID:9cn7Nun80.net]
現在vbaをネットで勉強中ですが書籍も使って勉強しようと思っています
プログラミング初心者がvbaを学ぶのにお勧めの書籍を教えていただけませんか?

582 名前:デフォルトの名無しさん [2017/12/16(土) 20:17:51.76 ID:7KC6Lrbda.net]
VBAで書籍は金の無駄だよ
最初はマクロの記録を見るのとネットでぐぐれば大抵のことはできるよ

583 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 20:36:50.77 ID:IU5B3eEvp.net]
データの入力規則にカンマ区切りの項数不定の1-9の数字のみを許容したいのですが、どうすればよいですか?

正規表現だと、こんな感じです。
/^([1-9]+,)*([1-9]+)$/

regexp使ってVBAでチェックする方法ならやり方が分かるのですが、セルのデータ入力規則で設定する方法が分かりません。

584 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 20:57:31.30 ID:yaHEvAoH0.net]
>>568
シートのChangeイベントあたりに
そのコードを仕込んでおくのはいかがでしょうか
ダメな場合はエラーメッセージ出して、セルの値を消しちゃえば
入力規則チックになるかと

585 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 21:10:04.55 ID:yaHEvAoH0.net]
>>566
本格的にやりたいなら、VBAと関係ないように思えるけど
「スッキリわかるJava」シリーズをオススメしたい。
自分の場合、VBA本ではさっぱりだったけど、この本で目覚めた。
オブジェクト指向の解説は、VBAの理解にもかなり役立つ。
プログラミング言語は根幹は同じで、方言みたいなもんなので
他の言語にもすんなり入っていけるようになる。
やれることが多くなるよ。

586 名前:デフォルトの名無しさん [2017/12/16(土) 21:57:56.42 ID:0LU2hdfpp.net]
オブジェクト指向をVBA始めて1週間だが理解してみた

まず
変数は何かの型に入れる
お前はこれしかできねえよ
っていう

そして
その型の中のさらに型の中の命令はなに?
と掘り下げて行く

これがオブジェクト指向



587 名前:デフォルトの名無しさん [2017/12/16(土) 22:19:01.15 ID:vwwP6eCQd.net]
>>571
違うけど気にしないでいいよ
厳密なな定義ないから

588 名前:デフォルトの名無しさん [2017/12/16(土) 22:21:35.33 ID:6cm/hyEb0.net]
あと一歩というところだな、実にオシイと言っておこう
しかし始めて1週間でそこまでオブジェクト指向の真髄に迫るとは大したものだ
末恐ろしい奴が現れたもんだ、これは俺もうかうかして居られんな

589 名前:デフォルトの名無しさん [2017/12/16(土) 22:26:05.73 ID:vwwP6eCQd.net]
なるほど
俺が間違っていたようだ

590 名前:デフォルトの名無しさん [2017/12/16(土) 23:09:21.00 ID:9T+lJsLD0.net]
お、おぅ

591 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 23:16:38.47 ID:jWdcz3p90.net]
Access だと、ずいぶん前から SendKeys は使うな ってのが喧しいが
Excel だと現役なんか? いいんか?

592 名前:デフォルトの名無しさん mailto:sage [2017/12/16(土) 23:32:07.04 ID:oxEVVuR00.net]
>>558
(その5)
画像リンクが外部ファイルにある場合はSendKeysも役にたたないようです。
なんかいい回避策ないですかね?

593 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 01:01:58.50 ID:ZCl426tV0.net]
たんにActiveCellのシートが思ってるものじゃないだけの気がするなぁ
そのコードどこに書いてるんだよ

594 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 01:39:41.36 ID:F05u2uwp0.net]
誰がオブジェクト恥垢やねん!(´・ω・`)b

595 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 04:46:14.88 ID:Hjh32hjm0.net]
>>578
どゆこと?

例えばですね、他Bookにある画像をクリックしてそこにPopupが表示され、フィルタ処理を選びます。
で、フォーカスは対象テーブルのあるブック・シートに遷移して、フィルタリングに成功します。
SDIなので画面上は呼出元ブックとテーブル用ブックが2つ並んでおります。
ここでScriptは完了するわけですが、追加の操作をするために、遷移先シートを明示的に選択。
明らかに自分はその目的のシートを選んでいます。
ここでImmediateから、ActiveCell.Address(external:=True)をたたくと明らかに今触っているセルの番地が、Book名、シート名、セル番地名のフルパスで戻ります。
ここでカレントセルのある範囲を選択反転してCopy操作を行うと、呼出元ブックの同じセル番地がコピーモードの破線矩形にかわるんです。
カーソルで下へスクロールすると、呼出元シートもリモコンで操作しているみたいに一緒にスクロールするんです。
削除操作も、、、、同一ファイルで操作している時は気づかなかったですが、別ファイルから行うと凄いびっくりなビジュアルが展開されます。
明らかに "ActiveCell" という状況が表と裏に分離されたような状態になるんです。
同じブックをWin7+Excel2010で操作した場合は起きません。
自ファイルだとSendKeysで逃げられるんですが、外部ファイルからシート切替しても呼出元が切り替わってしまって、、
テーブル側ブックがキー操作相当でシート切替されないとこの状態が解除されないみたいです。

596 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 05:09:02.50 ID:/bdPdb8E0.net]
>>580
とりあえずActiveSheetとかSelectionとか使わない方法で実装するのはダメなの?
あと同時に実行されるマクロは全て同じブックに入れておくべきだと思うよ。



597 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 06:51:48.24 ID:Hjh32hjm0.net]
>>581
(その6)
Debug用と問題回避のためにActiveCellを記述していますが、実際のコードでは使用していません。
>>560のSelectionはコードの中に記述しているわけではなく、検証用の画像ボタンを登録する手順としてImmediateから実行しているだけです。極力BackEndから操作する派です。

実際の運用Bookでは極力同一ファイルにMacroを集めています。
Macro自体は仕事を完全に全うするのですが、、、そのあとシートの状態がおかしくなるという現象です。
状態を解消するには、呼出先のBookでシート切替を行う方法のみ。

で、発想を変えて、「外部から制御できないか」と考えました。
VBE内にVBSScriptを記述し、「中の外」からシート選択してみようと。
結果NG、再現してしまいました。

じゃあ、本当に外から制御すればどうかな?と思い、上記のVBScriptを同一フォルダに置いて呼び出す作戦に。

598 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 06:52:33.95 ID:Hjh32hjm0.net]
>>581
(その7)
--------------------------------
[Popupから呼び出すProc]
Sub DoFilter()
 Sheets("List").Select
 Sheets("List").Range("$A$1:$C$5").AutoFilter Field:=1, Criteria1:="TEST"
 Call = Shell("wscript " & ThisWorkbook.Path & "\SelectSheet.vbs", vbHide)
End Sub
--------------------------------
[SelectSheet.vbsの中身]
call SheetSelect_fromVBS
Sub SheetSelect_fromVBS()
 Dim xlApp: Set xlApp = GetObject(, "Excel.Application")
 With xlApp
  .Workbooks("ListBook.xlsm").Activate
  .Worksheets("List").Select
 End With
 Set xlApp = Nothing
End Sub
--------------------------------
なんとこれが功を奏し、ActiveSheetの幽体離脱状態から抜け出すことができました。
シート切替も不要に。これで一先ず凌げそうですが、MSには不具合対応してもらいたいです。
コメントいただいた方々、ありがとうございました。

599 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 06:55:18.78 ID:Hjh32hjm0.net]
>>583
あれ、一部書き間違えました。実際は、、

 Call Shell("wscript " & ThisWorkbook.Path & "\SelectSheet.vbs", vbHide)

600 名前:デフォルトの名無しさん [2017/12/17(日) 10:32:12.89 ID:e1NNF66l0.net]
つまりここでは
なんの型にはめるのか?
命令は?状態は?

だろ?
でもCellsってプロパティだろ?なんで一発で状態から入るんだ?

601 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 11:20:01.90 ID:ZjZyIyTi0.net]
>>585
Cellsはオブジェクトだ
そしてWorksheetオブジェクトやCellsオブジェクトのプロパティでもある

あと、ようやく時間ができたからWorkbookオブジェクトをVariantに代入しようとしたら当然のごとく「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」になった。
一体何を試してパスが云々なんて話が出てきたんだろう。
Dim V As Variant
V = Workbooks(1)
→代入不可
Set V = Workbooks(1)
→VはVariant/Object/ThisWorkbook型
調べてみてもWorkbook型にデフォルトプロパティは設定してなさそう。

602 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 11:21:03.68 ID:ZjZyIyTi0.net]
>>586
訂正
CellsはRangeオブジェクトだ
そしてWorksheetオブジェクトやRangeオブジェクトのCellsプロパティでもある

603 名前:デフォルトの名無しさん [2017/12/17(日) 11:26:43.28 ID:e1NNF66l0.net]
>>587
cellsはrange?
意味わからない
プロパティでオブジェクトってなに?
もっとうまく説明してくんね?

604 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 11:27:13.71 ID:gZkjaYao0.net]
>>586
自分用語を使うどころかコードも正確にコピペできてないからそのまま実行しても無駄だぞ
エスパー力を全力で働かせて察してあげない限り回答しても罵倒が返ってくる

605 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 11:37:53.28 ID:ZJu/+/V0x.net]
>>585
メゾット君、プロパティだから状態というのは間違えやすい考え方だからこの際捨て去った方が良い
プロパティは呼び出し元プログラムに対してオブジェクトのクラス内部への変数へのアクセスを提供するもので、アクセス先の変数のデータ型はプリミティブな値であることもあれば、何らかのオブジェクトである場合もある
というか、オブジェクト式の途中で出てくるプロパティは全てオブジェクトへの参照を提供するプロパティだ

Cellsの場合はRange型のオブジェクトへのアクセスを提供するプロパティだが、Grobalのメンバプロパティだから上位オブジェクト式を

606 名前:省略して書けるわけ []
[ここ壊れてます]



607 名前:デフォルトの名無しさん [2017/12/17(日) 11:46:44.41 ID:gC8RO3PCp.net]
>>590
カタカタ使うな

608 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 11:53:12.87 ID:ZjZyIyTi0.net]
>>589
そうだよな・・
自分でクラス作ってみれば一発で理解できそうなものだが・・






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<339KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef