Excel VBA 質問スレ Part51

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (スププ Sd4a-O827)
垢版 |
2017/11/08(水) 11:26:30.13ID:+KUB1/9hd

スレ立ての際は一行目に
!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総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/

※前スレ
Excel VBA 質問スレ Part50
http://mevius.2ch.net/test/read.cgi/tech/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
486デフォルトの名無しさん (ワッチョイ 5303-6+fO)
垢版 |
2017/12/14(木) 19:24:50.30ID:oezENCsV0
同じだったらファイル名でええやんw何鼻息荒くしてんの?w
2017/12/14(木) 20:32:08.46ID:g1PrWAQxx
>>485
恐らく>>484はWorkbooks.Itemの引数について話してるんだろうだが、君にはそのあたりが分からんみたいだな
2017/12/14(木) 20:33:08.02ID:g1PrWAQxx
>>487
安価間違えた、これは>>486
2017/12/14(木) 21:01:41.06ID:bra/P7/Ad
>>453
をもとに考えてみた

お金を入れるとカップにジュースが注がれる自販機を思い浮かべるんだ

Set wb = 'ジュースが入るカップ
Workbooks.Open( _'お金を判別してボタンが押されるとジュースを出す回路
Application.GetOpenFilename _'お金
)
→お金を入れてボタンを押したらカップにジュースが注がれる

Set wb = Application.GetOpenFilename
→カップに直接お金を入れて飲めないと騒ぐあほ

どうだ!?
2017/12/14(木) 21:06:22.48ID:zDxHi8mM0
>>451
お前バカだろ
変数wbはただの入れ物
workbook型しか入れられない入れ物にString型入れようとしてんだぞ?
これでわからないならただのバカだから二度と来るな
2017/12/14(木) 21:25:56.75ID:oezENCsV0
>>490
おまえのカアチャンは誰でも受け入れるのにwbって意外と固いんだな
492デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 21:27:02.90ID:QIiUylbtp
>>490
うん
それはしってるよ
でもworkbooks.Openでも同じだよね
文字列帰って来るよね
493デフォルトの名無しさん (ササクッテロラ Spc7-8sno)
垢版 |
2017/12/14(木) 21:32:46.73ID:QIiUylbtp
application.getOpenfilename
→あ.xlsxを選択
C:¥あ.xlsx が帰って来る

workbooks.Open filename:=application.getOpenfilename(つまりC:¥あ.xlsx)

ん?どっちもパス付きのブック名じゃねえの?
ってことをいってる
2017/12/14(木) 21:55:08.02ID:5D+dY0yO0
>>493
文字列として返ってきたから文字列型と思ってるなら、一回workbook型をウォッチに入れてみたら?
ツリー形式でオブジェクトの、中身が見れるから全然別ものだとわかるはず
2017/12/14(木) 21:58:53.83ID:zDxHi8mM0
>>492
バーカw
"C:\うんち.xlsx"がworkbooks型の変数に代入できる分けないだろw
まあデフォルトプロパティなんてものが罪なんだが
てか、workbooks型のデフォルトプロパティってNameプロパティなんだな(Pathか?)
はじめて知ったわ、使わんから
2017/12/14(木) 22:19:18.62ID:cH/6/SdG0
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
2017/12/14(木) 23:32:44.97ID:IXGcMbV0a
>>486
違う。
新規ブックの場合はファイル名じゃないだろ。
理解出来て無い奴に理解出来る奴向けの説明をしても駄目だ。

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

>>493
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に格納するってこと。
498デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/14(木) 23:34:29.57ID:oVDd8Fug0
短くわかりやすくまとめられるやついねえの?
いくらVBAができたって引き継ぎができない奴は無能なんだが
499デフォルトの名無しさん (ワッチョイ d2af-iA8U)
垢版 |
2017/12/14(木) 23:41:16.00ID:oVDd8Fug0
俺もずっとROMってたけど
こいつらの説明はマジで意味不明だわ

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

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

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

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

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

つまるところどっちもC\aaa.xlsxって文字列を返してんじゃねえの?何がちげえの?ってこと

これいうの10回目ないい加減学習しろイラつくな
500デフォルトの名無しさん (ワッチョイ d2af-iA8U)
垢版 |
2017/12/14(木) 23:44:38.82ID:oVDd8Fug0
こいつらのたとえ

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

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

って感じ
見ててムカつくから発言したわ
501デフォルトの名無しさん (ワッチョイ d2af-iA8U)
垢版 |
2017/12/14(木) 23:46:05.94ID:oVDd8Fug0
おれが聞きたいのは

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

わかりやすく答えろ
2017/12/14(木) 23:55:54.24ID:n2gI2QxJ0
前にいた関西弁の荒しと同一人物なんだろうけど、健気にもちょっと勉強してきてるのが笑えるw
2017/12/14(木) 23:56:28.06ID:qidVZ8HWa
>>501
無理。
軍事用にコンピューターというものが発明されてから今日までの歴史と仕組みを説明しなきゃならんから。
そして、君にそれを理解出来るだけの能力が有るとは思えないから。

大抵の人は全てを理解しているわけじゃ無いが、自分の利用している範囲ぐらいは理解している。
2017/12/15(金) 00:06:16.08ID:sv72SjNaa
>>499
ん?
>Apllcation.GetOpenでaaaっていうエクセルを開く

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

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

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

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

Workbook型に入ってるのはファイル名じゃない。
Set WB=Workbooks.Openの意味するところはfilenameに指定された文字列をファイル名と見立ててブックを開き、もし仮に運よく開くことができたらそのブックをWBに格納するという意味。
505デフォルトの名無しさん (ワッチョイ d2af-iA8U)
垢版 |
2017/12/15(金) 00:18:22.73ID:qta4Ddk+0
>指定された文字列をファイル名と見立ててブックを開き

これが意味不明

GetOpenで指定したファイル名を返すんだろ?
じゃあこれはファイル名になるじゃねえのか?
ファイルを開かなかった場合はファルスがかえることはわかる
2017/12/15(金) 00:22:57.61ID:OGmesrFEa
>>505
GetOpenFilenameの文とWorkbooks.Openの文は別の文だろ。
プログラム組む奴はGetOpenFilenameで取得したものと違うものを入れることも出来る。
だから結果的に入ったのはファイル名でも、
Workbooks.Open自身はそれを前提にはしないだろ。
2017/12/15(金) 00:25:39.28ID:HZMi2rOwd
>>496
このレスの一番下がわかりやすいんじゃない?
508デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 00:26:48.82ID:qta4Ddk+0
>>506
日本語話して
ドヤ顔くん
2017/12/15(金) 00:26:50.88ID:Ma3k2IENa
GetOpenFilenameはメモ帳のファイル名を取って来ることも出来る。
Wordのファイル名を取って来ることも出来る。
Workbooks.Openで開けないファイル名ということも有るし、Workbooks.Openで開けるファイル名だとしてもExcelで開かなければならないということも無い。
510デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 00:27:25.61ID:qta4Ddk+0
>>507
オブジェクトブラウザーでてなんだよ
わからねえよ
511デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 00:28:29.79ID:qta4Ddk+0
>>509
あーなんとなくわかったかな
Openメソッドで開ける=エクセル型=ワークブック型に格納可能

ってこと?
512デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 00:32:05.55ID:qta4Ddk+0
>>496
つまりだ
君が言いたいのは(要約しないとダメなのかよ、、、)
application.GetOpenfilenameだと文字列として返ってくる
workbook型には文字列は入らない

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

コンピュ−ターは人間が考えるような意味を理解しない。
定義通り動くだけ。
514デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 00:35:45.56ID:qta4Ddk+0
>>513
また回りくどい言い方してんな
頭悪いのか
2017/12/15(金) 00:39:33.42ID:OGmesrFEa
>>512
その理解で良い。
516デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 00:41:12.92ID:qta4Ddk+0
>>515
最初からこう言えよ
馬鹿じゃねえの?
ほんとにバカしかいねえよ
呆れるというか心配になってくる
517デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 00:42:06.72ID:qta4Ddk+0
補足するとworkbook.Openで返ってくる(開く)=workbook型ということね
2017/12/15(金) 00:42:07.75ID:W4xtzKqva
>>514
君がどこまで分かって無いのか、こっちは分からないんだ。
エスパーじゃ無いんだから。

>>512の話だって型とは何だ?という説明もしなきゃならんのか?と考えれば>>513のような話も必要になって来る。
2017/12/15(金) 00:57:45.39ID:2M4lhz74x
>>516
最初からみーんなそう言ってるぞw
ようやく頭が追い付いてきたのかな?
2017/12/15(金) 01:03:08.36ID:2M4lhz74x
メゾット君もだんだん自分の頭の悪さを自覚してきてるみたいだし、あと二日以内には恥ずかしい捨て台詞を残して消える運命かな
レス保存したからいつでも再放送出来るけどなwww
2017/12/15(金) 01:23:44.47ID:IJmI7Oq80
>>512,516
>>413でまっさきに型を理解しろって言ってんだが
まあここまで食い下がる根性は認めるけど、いいかげん最低限は自分で勉強してくれ
2017/12/15(金) 01:24:37.63ID:JMZCHg3W0
多分Excel VBA入門的な記事を読み進めればすぐに理解できたと思うんですけど
勉強の進め方が下手くそすぎる
523デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 09:26:34.27ID:qta4Ddk+0
で、この型をしっかりと説明してるのはどこだ?
524デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 09:27:43.96ID:qta4Ddk+0
URLでもなんでも貼ってよ
525デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 10:46:54.06ID:qta4Ddk+0
ちなみにさ
VBAってなんでメンテナンスがいるの?
コードを直接弄るわけじゃないからバグなんてでないと思うけど
2017/12/15(金) 11:01:21.94ID:sRcKW4ZTM
てめーの提示したコードエラー出まくりバグばっかじゃねーか
2017/12/15(金) 11:23:22.68ID:HChVIO9E0
コードは変わらなくてもWindowsとかExcelとか業務仕様とか、まわりが変わっていく
528デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 11:26:16.78ID:qta4Ddk+0
VBAは楽しいぞ
俺はmos マスターだがVBAはいっさん知らんかった
最終目標としては意味不明な超複雑なコードを記述し
おれが辞めた後は誰も対処ができないという優越感を味わいたい
そしてVBEをだしてカチカチしてる姿がなんとも知的でかっこいい
ほんとこれだけのきっかけが知識につながって行く
529デフォルトの名無しさん (スッップ Sd32-GTd9)
垢版 |
2017/12/15(金) 11:36:34.77ID:yfj2Ro7Gd
今どきVBAに新規参入者がいる驚き
2017/12/15(金) 11:48:05.70ID:HChVIO9E0
>>528
>>498
2017/12/15(金) 12:00:52.51ID:IqUBh/zH0
>>528
それは能力の低い奴の言う言葉。
能力のある奴はお前が辞めても対処できるように記述する。
2017/12/15(金) 12:08:15.31ID:aoP9DSfXM
>>528
いや、ずっと同じ質問してる辺りこれっぽっちも知識が増えているように見えないんだが
そしてブーメランに草
2017/12/15(金) 12:11:37.98ID:IqUBh/zH0
>>521
そこをあっさり理解出来ないからここまで時間制掛かってる。
彼の分かってない所はみんながそういうもんだとあっさり進む所で自分中心で考えること。
コンピューターが自分と同じように考えてくれると思ってる。

アレンブラやマシン語の不自由な世界で自分と同じようには考えてくれないということを思い知った方が良い。
2017/12/15(金) 12:26:43.87ID:SvHkecGU0
もの凄く複雑で他人の理解が及ばないようなコード書くのが目標なら、
なおさら誰の助けも借りずに独学で高めていくのが重要なんだよなぁ。

ネットで検索して簡単に見つかるような情報すら当たれないヤツが目指すものじゃないよね。
2017/12/15(金) 12:27:05.72ID:JZsZmqT4r
>>497
いやなんかまた鼻息荒くしちゃってるけど元々同じって言ったのお前だからなw

なんで素直にブック名とファイル名は違うって言えないんだよw
どうせ下手くそな説明なんだから無理して技巧的に言おうとすんなw
536デフォルトの名無しさん (ワッチョイ d2af-iA8U)
垢版 |
2017/12/15(金) 12:27:38.94ID:qta4Ddk+0
>>533
こいつらのオナニー意見なんて一切参考にせず自己解決したんだが?

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

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

これでどう?誰でもわかりやすいと思うけど?
頭悪すぎね?君たち
537デフォルトの名無しさん (スッップ Sd32-GTd9)
垢版 |
2017/12/15(金) 13:00:25.68ID:yfj2Ro7Gd
なんか
1 + 1 =2

「1に1を加えると2になる」
と表現してる感じだなあ
2017/12/15(金) 13:01:13.53ID:aoP9DSfXM
もう突っ込まないぞ!
次のお客様どうぞ
2017/12/15(金) 13:03:33.01ID:SvHkecGU0
>>537
そもそもWorkbooks.Openメソッドはファイル名を返さないから、
「1+1 は 2 じゃないぞ。俺たちは 1 + 1で200だ。10倍だぞ10倍」みたいなもん。
2017/12/15(金) 13:34:09.09ID:8rowC9ysa
>>536
わかった!君はプログラムじゃなくて日本語の勉強から始めよう
2017/12/15(金) 13:34:59.69ID:8rowC9ysa
会話形式にしてくれないと理解できないといってくれれば誰か頑張ったかもねw
542デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 13:57:32.57ID:qta4Ddk+0
>>539
はいはいブック名ね
どっちでもいいだろアホ
2017/12/15(金) 14:06:04.35ID:SvHkecGU0
>>542
ブック名も返さないよ。
何にせよWorkbooks.Openメソッドが名前を返したら

Set WB = Workbooks.Open(Application.GetOpenFilename)

が成立しないから。
2017/12/15(金) 14:12:36.10ID:sRcKW4ZTM
いいからMSDNのリファレンス読んでこいよ
545デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 14:42:08.62ID:qta4Ddk+0
>>543
はいはい
workbookオブジェクトを返すのね
はいはい死ね死ね
2017/12/15(金) 14:44:22.53ID:IqUBh/zH0
>>536
それ、全部既に言ってたからw
お前はみんながすんなり分かるところをこれだけすったもんだしてやっと分かっただけ。
これまでのやりとりが無かったら、それそのまんま言っても理解出来て無い。

そもそも、バカがどうしてバカなのかなんてこっちは理解出来ない。
お前とは違うからな。
2017/12/15(金) 14:47:50.40ID:xyZ0U828M
メソッドの返り値として何の型のどんなオブジェクトが返ってくることを意識する重要さが微塵もわかってないのでこいつのVBAスキルはここで打ち止めだな
2017/12/15(金) 15:09:10.26ID:vqijPR8bp
以降はスルーしよう
549デフォルトの名無しさん (スッップ Sd32-GTd9)
垢版 |
2017/12/15(金) 15:21:09.44ID:yfj2Ro7Gd
整数 + 整数の戻り値が整数なのに整数 / 整数の戻り値が整数じゃない理由がわからない、不合理だ、と
駄々をこねる人間もいるんだからしょうがない
2017/12/15(金) 19:31:32.21ID:lmKJ5VLWa
世の中にはこういう本物のバカもいるんだなあと勉強になったよ
551デフォルトの名無しさん (ワッチョイ 5303-6+fO)
垢版 |
2017/12/15(金) 19:39:48.70ID:IAZ3SurN0
わりとそこかしこに居るけどな、本物のバカ
ひきこもりか?おまえw
552デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/15(金) 21:40:28.03ID:qta4Ddk+0
>>547
まだ始めて2週間って話してなかった?
ちなMOSエキスパート所持者ね
2017/12/15(金) 21:49:11.45ID:SvHkecGU0
>>419からもう二週間も経ったのか。時が経つのは早いな。
2017/12/15(金) 22:06:37.13ID:5LKBHQ7A0
>>552
> ちなMOSエキスパート所持者ね

ここ、笑うとこですか?
2017/12/15(金) 22:06:40.33ID:sA/nQpBXa
MOSエキスパート?
何それ美味しいの?

昔、「初心者だから仕様がないけどさ」と説教した相手が今回君が挑戦してる言語のエキスパート持ってたけどさ。
2017/12/16(土) 04:53:25.79ID:kSf4Qz7z0
先日、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へ)
2017/12/16(土) 04:53:47.87ID:kSf4Qz7z0
>>556
(その2)
[現象]
 ・Fitering成功しているように見えるが、非表示セルにカーソル移動できてしまう。
 ・セル値の削除が効かない。(連動イベントが動かず、本現象に気づく)
 ・範囲コピー貼り付けが正しく行われない。
 ・セルをコピーモードにしても、選択範囲が破線矩形にならない。
  →なんと恐ろしいことに、操作の対象が現在見えているActiveCellではなく、
   呼出元画像のあるシートの同一番地に対して行われている様子。
   破線矩形も元シートを開いたらそこにあった。
   削除処理も元シートに対して行われる。
   ステータスバーのセル値カウントも、現在見えているシートではなく、呼出元の情報を返す様子。
   ActiveCell.Address(External:=True)は実際に見えている移動先シートを示しているのに、、、

[発生条件の再検証]
 ・別シートの画像.OnAction→Popup.OnActionで初めて成立。
 ・画像.OnActionから直接Proc実行(Sheet選択、Autofilter実施)では再現せず。
 ・Alt+F8からのPopup起点とすると再現せず。
 ・Popup.OnActionを入れ子にしても再現せず。
 ・ボタンをTableと同じシートに配置した場合は再現せず。
 ・Office2010では再現せず。
(その3へ)
2017/12/16(土) 04:54:06.08ID:kSf4Qz7z0
>>556
(その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は無実でシート選択の不全実行が現象の概要とみています。
2017/12/16(土) 04:56:00.08ID:kSf4Qz7z0
>>556
環境情報が抜けていました。
Win10 バージョン 1703 (OS ビルド 15063.786)
2017/12/16(土) 05:17:34.49ID:kSf4Qz7z0
>>556
(その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"
2017/12/16(土) 05:26:07.46ID:j6rMoAMF0
そういうときは、doeventsやwaitも試してみるべし
今パソコン無いから試す暇がない
2017/12/16(土) 05:36:15.74ID:kSf4Qz7z0
>>561
そういえばDoEventsは試しました。
結果効果はなく、SendKeysを無効化して現象回避もできなくなるという逆効果も確認しました。

Waitはどこに入れると効果的ですかね。
間にStopを入れて一時停止したりはしてみましたけど、、、
2017/12/16(土) 05:45:39.73ID:kSf4Qz7z0
>>561
今回のはあまり待ち要素はないと見ていますが、以下の3カ所に2秒ほど入れてみました。
 ・シート切替の前後、.ShowPopupの直前
再現してしまいました。
2017/12/16(土) 18:57:10.19ID:9cn7Nun80
現在vbaをネットで勉強中ですが書籍も使って勉強しようと思っています
プログラミング初心者がvbaを学ぶのにお勧めの書籍を教えていただけませんか?
565デフォルトの名無しさん (アウアウカー Sa6f-MO8t)
垢版 |
2017/12/16(土) 20:17:51.76ID:7KC6Lrbda
VBAで書籍は金の無駄だよ
最初はマクロの記録を見るのとネットでぐぐれば大抵のことはできるよ
2017/12/16(土) 20:36:50.77ID:IU5B3eEvp
データの入力規則にカンマ区切りの項数不定の1-9の数字のみを許容したいのですが、どうすればよいですか?

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

regexp使ってVBAでチェックする方法ならやり方が分かるのですが、セルのデータ入力規則で設定する方法が分かりません。
2017/12/16(土) 20:57:31.30ID:yaHEvAoH0
>>566
シートのChangeイベントあたりに
そのコードを仕込んでおくのはいかがでしょうか
ダメな場合はエラーメッセージ出して、セルの値を消しちゃえば
入力規則チックになるかと
2017/12/16(土) 21:10:04.55ID:yaHEvAoH0
>>564
本格的にやりたいなら、VBAと関係ないように思えるけど
「スッキリわかるJava」シリーズをオススメしたい。
自分の場合、VBA本ではさっぱりだったけど、この本で目覚めた。
オブジェクト指向の解説は、VBAの理解にもかなり役立つ。
プログラミング言語は根幹は同じで、方言みたいなもんなので
他の言語にもすんなり入っていけるようになる。
やれることが多くなるよ。
569デフォルトの名無しさん (ササクッテロレ Spc7-8sno)
垢版 |
2017/12/16(土) 21:57:56.42ID:0LU2hdfpp
オブジェクト指向をVBA始めて1週間だが理解してみた

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

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

これがオブジェクト指向
570デフォルトの名無しさん (スッップ Sd32-GTd9)
垢版 |
2017/12/16(土) 22:19:01.15ID:vwwP6eCQd
>>569
違うけど気にしないでいいよ
厳密なな定義ないから
571デフォルトの名無しさん (ワッチョイ 5303-6+fO)
垢版 |
2017/12/16(土) 22:21:35.33ID:6cm/hyEb0
あと一歩というところだな、実にオシイと言っておこう
しかし始めて1週間でそこまでオブジェクト指向の真髄に迫るとは大したものだ
末恐ろしい奴が現れたもんだ、これは俺もうかうかして居られんな
572デフォルトの名無しさん (スッップ Sd32-GTd9)
垢版 |
2017/12/16(土) 22:26:05.73ID:vwwP6eCQd
なるほど
俺が間違っていたようだ
573デフォルトの名無しさん (ワッチョイ 339f-MO8t)
垢版 |
2017/12/16(土) 23:09:21.00ID:9T+lJsLD0
お、おぅ
2017/12/16(土) 23:16:38.47ID:jWdcz3p90
Access だと、ずいぶん前から SendKeys は使うな ってのが喧しいが
Excel だと現役なんか? いいんか?
2017/12/16(土) 23:32:07.04ID:oxEVVuR00
>>556
(その5)
画像リンクが外部ファイルにある場合はSendKeysも役にたたないようです。
なんかいい回避策ないですかね?
2017/12/17(日) 01:01:58.50ID:ZCl426tV0
たんにActiveCellのシートが思ってるものじゃないだけの気がするなぁ
そのコードどこに書いてるんだよ
2017/12/17(日) 01:39:41.36ID:F05u2uwp0
誰がオブジェクト恥垢やねん!(´・ω・`)b
2017/12/17(日) 04:46:14.88ID:Hjh32hjm0
>>576
どゆこと?

例えばですね、他Bookにある画像をクリックしてそこにPopupが表示され、フィルタ処理を選びます。
で、フォーカスは対象テーブルのあるブック・シートに遷移して、フィルタリングに成功します。
SDIなので画面上は呼出元ブックとテーブル用ブックが2つ並んでおります。
ここでScriptは完了するわけですが、追加の操作をするために、遷移先シートを明示的に選択。
明らかに自分はその目的のシートを選んでいます。
ここでImmediateから、ActiveCell.Address(external:=True)をたたくと明らかに今触っているセルの番地が、Book名、シート名、セル番地名のフルパスで戻ります。
ここでカレントセルのある範囲を選択反転してCopy操作を行うと、呼出元ブックの同じセル番地がコピーモードの破線矩形にかわるんです。
カーソルで下へスクロールすると、呼出元シートもリモコンで操作しているみたいに一緒にスクロールするんです。
削除操作も、、、、同一ファイルで操作している時は気づかなかったですが、別ファイルから行うと凄いびっくりなビジュアルが展開されます。
明らかに "ActiveCell" という状況が表と裏に分離されたような状態になるんです。
同じブックをWin7+Excel2010で操作した場合は起きません。
自ファイルだとSendKeysで逃げられるんですが、外部ファイルからシート切替しても呼出元が切り替わってしまって、、
テーブル側ブックがキー操作相当でシート切替されないとこの状態が解除されないみたいです。
2017/12/17(日) 05:09:02.50ID:/bdPdb8E0
>>578
とりあえずActiveSheetとかSelectionとか使わない方法で実装するのはダメなの?
あと同時に実行されるマクロは全て同じブックに入れておくべきだと思うよ。
2017/12/17(日) 06:51:48.24ID:Hjh32hjm0
>>579
(その6)
Debug用と問題回避のためにActiveCellを記述していますが、実際のコードでは使用していません。
>>558のSelectionはコードの中に記述しているわけではなく、検証用の画像ボタンを登録する手順としてImmediateから実行しているだけです。極力BackEndから操作する派です。

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

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

じゃあ、本当に外から制御すればどうかな?と思い、上記のVBScriptを同一フォルダに置いて呼び出す作戦に。
2017/12/17(日) 06:52:33.95ID:Hjh32hjm0
>>579
(その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には不具合対応してもらいたいです。
コメントいただいた方々、ありがとうございました。
2017/12/17(日) 06:55:18.78ID:Hjh32hjm0
>>581
あれ、一部書き間違えました。実際は、、

 Call Shell("wscript " & ThisWorkbook.Path & "\SelectSheet.vbs", vbHide)
583デフォルトの名無しさん (ワッチョイ d2af-8sno)
垢版 |
2017/12/17(日) 10:32:12.89ID:e1NNF66l0
つまりここでは
なんの型にはめるのか?
命令は?状態は?

だろ?
でもCellsってプロパティだろ?なんで一発で状態から入るんだ?
2017/12/17(日) 11:20:01.90ID:ZjZyIyTi0
>>583
Cellsはオブジェクトだ
そしてWorksheetオブジェクトやCellsオブジェクトのプロパティでもある

あと、ようやく時間ができたからWorkbookオブジェクトをVariantに代入しようとしたら当然のごとく「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」になった。
一体何を試してパスが云々なんて話が出てきたんだろう。
Dim V As Variant
V = Workbooks(1)
→代入不可
Set V = Workbooks(1)
→VはVariant/Object/ThisWorkbook型
調べてみてもWorkbook型にデフォルトプロパティは設定してなさそう。
2017/12/17(日) 11:21:03.68ID:ZjZyIyTi0
>>584
訂正
CellsはRangeオブジェクトだ
そしてWorksheetオブジェクトやRangeオブジェクトのCellsプロパティでもある
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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