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)
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 そうだよな・・ 自分でクラス作ってみれば一発で理解できそうなものだが・・
609 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 11:59:28.64 ID:R4ec2g2Bx.net] >>592 あの質問者が自分でクラスを作れるようになるのって何年か先の話だろうな
610 名前:デフォルトの名無しさん [2017/12/17(日) 12:11:00.98 ID:gC8RO3PCp.net] クラス? オブジェクトに必要な要素を全部埋め込むやつだろ? もうできるよ? でもnewクラスの使い方が意味がわからない 同じクラスで(中身も同じ)なら作る意味ないんじゃねえの?
611 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 12:19:09.45 ID:ZjZyIyTi0.net] 確かにこれでは何年も先の話になりそうだ
612 名前:デフォルトの名無しさん [2017/12/17(日) 12:31:47.04 ID:gC8RO3PCp.net] いま、クラスをみてみた そしたらworkbookの中にworksheetsがプロパティとしていた どういうことだ? 俺はVBAの盲点をついたか?
613 名前:デフォルトの名無しさん [2017/12/17(日) 12:40:07.47 ID:gC8RO3PCp.net] 知りすぎたか?
614 名前:デフォルトの名無しさん [2017/12/17(日) 12:51:28.57 ID:gC8RO3PCp.net] dim i as long For i = 2 To i.Cells(.Rows.Count, 1).End(xlUp).Row このi.cellsの意味がわからない 教えてくれ
615 名前:デフォルトの名無しさん [2017/12/17(日) 13:07:40.63 ID:+CY9tzJPd.net] プロパティは内部変数へのアクセスに限らずいろんなこと出来るし、最初さっぱり理解できなかった。 まさかただのシンタックスシュガーだなんて想像してなかったからな。
616 名前:デフォルトの名無しさん mailto:sage [2017/12/17(日) 13:23:13.67 ID:R4ec2g2Bx.net] >>598 このコードは絶対にコンパイル通らないぞ For i = 2 To i.Cells(.Rows.Count, 1).End(xlUp).Rowの意味なんてこっちが知りたいくらいだ