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)
58 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 08:26:57.35 ID:pr331NCP0.net] たかがファイル名を取得するのに処理負荷を感じるほど重くなるとか考えられないな。 読み取り先が等速ドライブに突っ込んだCDだったとか、回線の細いNASだったとかなら分かるけど。
59 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 09:22:13.43 ID:mbcSFLNRa.net] >>52 クラスにして使いやすくしてるならDir関数でもいいと思うけど生で使う気は更々起きねーなあれは めんどくさすぎる 早い遅いは環境次第だろう 何をしようとしたか知らんが
60 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 12:42:29.30 ID:IBZYfbeXM.net] またVBAでクラス語る奴が来ちゃったよ...
61 名前:デフォルトの名無しさん [2017/11/13(月) 12:44:49.20 ID:U+ZWq00Pa.net] なんかWindows10でマクロの挙動が安定しなくなったんだけど、そういうのある?
62 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 13:17:08.13 ID:GJIgK8HXa.net] >>58 語ってるつもりはないし、普通に機能としてあるのに使ってバカにされる筋合いもない
63 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 13:21:12.07 ID:ck+reS0/0.net] vbaでクラス使うメリットあるの? 一応あるインターフェースは使い物にならないし、継承も使えないし、コンストラクタに引数も設定出来ない。 vbaでクラス使うメリット教えて
64 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 13:21:56.90 ID:GJIgK8HXa.net] >>61 カプセル化
65 名前:デフォルトの名無しさん [2017/11/13(月) 13:43:14.72 ID:4dN82Cnsd.net] >>61 たまにある 単体の処理してる間だけじゃなく、しばらくの間は状態を持っててほしいとき ごく素朴な使い方しか出来ないし、しようとも思わないけど
66 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 13:48:11.54 ID:GJIgK8HXa.net] というか、クラスを使うデメリットって逆に何
67 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 13:52:55.00 ID:HKnEhqdPd.net] そもそもクラスが必要になるほど大規模なコードを書く用途にVBAは向いてない、使うべきじゃない ちゃんとした開発環境を使え 会社が許可しないなら転職するか我慢するかの二択、あるいは出世して自分で規則を変えろ 仕事の能率がアップして利益が増えるんなら反対する理由はないだろ
68 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 15:44:46.11 ID:XD2Cv4t70.net] 自分の好きなコードが書けないから転職とかww
69 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 15:54:24.73 ID:IBY/CNJo0.net] 不合理なことを押し付けてくる会社なら、転職も選択肢ってことだろ。日本語ダイジョブ?
70 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 16:07:38.26 ID:pr331NCP0.net] クラスを使うとシンプルに表現出来る場合がある。規模の問題では無い。 普通に使ってるとなかなか活用するイメージが湧かないけど、覚えておくと役に立つよ。
71 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 17:08:14.63 ID:GJIgK8HXa.net] ここでも前に書いたけど、配列のラッパークラスとか、一度作ると便利よ コレクションだと微妙に取り回し悪かったりするからね これ以上はスレチかな
72 名前:デフォルトの名無しさん [2017/11/13(月) 17:09:30.17 ID:4dN82Cnsd.net] >>68 そうだよね ただ、いちいちクラスモジュールを追加しなきゃならないから、使い捨てクラスをほいほい定義しづらい
73 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 17:20:46.73 ID:78YzXPYPa.net] FileSystemObjectのファイル一覧取得が遅いのなんて結構有名な話だと思うんだが。 ハードディスクにあるファイル名全部取ってくるとかすれば分かる。 昔
74 名前:、どっかに比較してる所が有ったんだが見つからないな。 Win32APIが一番速かったがDirでもそんなに大きな違いは出なかった。 が、FileSystemObjectは糞遅い結果になってた。 そもそも自分で組んだら遅くてネットで調べたらやっぱり遅かったという。 [] [ここ壊れてます]
75 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 17:23:43.47 ID:78YzXPYPa.net] クラスは凄く便利だが、無理に使う必要は無いと思う。 個人的には仕様を考えた段階でクラス使うのがぴったりと感覚で分かる。 そういう時以外は使わない。
76 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 17:47:02.85 ID:GJIgK8HXa.net] >>71 そうなんか まあ、今んとこそんな大量のファイルのやり取りしたことないから体感したことなかったわ まあ、その辺使うにしても生で扱うよりクラスでまとめちゃった方が取り回し良さそうだがね その辺は好みなんだろうけどね
77 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 18:55:14.32 ID:IBZYfbeXM.net] >>64 まともな言語ならクラスを使うデメリットはないけどVBAのクラスは制限が多すぎて使う意味がない
78 名前:デフォルトの名無しさん [2017/11/13(月) 19:08:08.64 ID:wM5leOdq0.net] >>59 bit数の関係で安定しなくなったことはある >>61 多分、ない class使ったほうが見通しがよくなる場合はあるけど、 正直そんなに変わらんというか、めんどくさくなるだけの場合が多い気がする
79 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 21:27:40.19 ID:qqs7mRHsj] この流れで突然クソみたいな質問するの恐縮なのですが… 共有で使っているExcelのデータの行がランダムに大量に消える現象が起きてます 多分誰かがオートフィルタかけた状態でうっかり削除したんだと思うんですが、 消えた行に全く共通点が無いので「マクロにウイルスが付いたんだ!マクロやめろ!」って因縁付けられています まずVBAにウイルスを仕込むならともかく、VBAを使用しているせいでウイルスに感染するって無いですよね? あとこのコードに行を消すような要素があるか見てもらいたいです オートフィルタをかけるだけの簡単なコードなんで無いと思うんですが周りに誰も聞ける人が居ないので一応… 簡単な指示だけどすごく頻繁に使うので消したくないんです Sub filter1() Range("K2").AutoFilter Field:=9, Criteria1:="<>" Range("L2").AutoFilter Field:=10, Criteria1:="" Range("O2").AutoFilter Field:=13, Criteria1:="AA" End Sub Sub filter2() Range("K2").AutoFilter Field:=9, Criteria1:="<>" Range("L2").AutoFilter Field:=10, Criteria1:="" Range("O2").AutoFilter Field:=13, Criteria1:="" End Sub Sub filter3() If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData End If End Sub
80 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 21:36:08.79 ID:S878v5EG0.net] この流れで突然クソみたいな質問するの恐縮なのですが… 共有で使っているExcelのデータの行がランダムに大量に消える現象が起きてます 多分誰かがオートフィルタかけた状態でうっかり削除したんだと思うんですが、 消えた行に全く共通点が無いので「マクロにウイルスが付いたんだ!マクロやめろ!」って因縁付けられています まずVBAにウイルスを仕込むならともかく、VBAを使用しているせいでウイルスに感染するって無いですよね? あとこのコードに行を消すような要素があるか見てもらいたいです オートフィルタをかけるだけの簡単なコードなんで無いと思うんですが周りに誰も聞ける人が居ないので一応… 簡単な指示だけどすごく頻繁に使うので消したくないんです Sub filter1() Range("K2").AutoFilter Field:=9, Criteria1:="<>" Range("L2").AutoFilter Field:=10, Criteria1:="" Range("O2").AutoFilter Field:=13, Criteria1:="AA" End Sub Sub filter2() Range("K2").AutoFilter Field:=9, Criteria1:="<>" Range("L2").AutoFilter Field:=10, Criteria1:="" Range("O2").AutoFilter Field:=13, Criteria1:="" End Sub Sub filter3() If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData End If End Sub
81 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 21:42:36.96 ID:zsNLMe3/0.net] シート保護かけてみるとか
82 名前:デフォルトの名無しさん [2017/11/13(月) 21:45:59.98 ID:wM5leOdq0.net] >>77 ウィルスに感染していて、セキュリティをsageているためにウィルスが実行されているというパターンなら考えられるが 其れ以前の問題として ・オートフィルタをかける ・全体をコピー ・ペースト(値として貼り付けなど) で行が減っている可能性のほうが高いと思う この仕様 、意外と知られていないんじゃないかなぁ
83 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 22:24:58.44 ID:S878v5EG0.net] >>79 それって別のシートやブックに貼り付けるときに可視セルだけ貼り付けられているという意味ですか? 別のブックやシートにコピーする事は無いと思うので可能性としては低い気がします… 試しにオートフィルタしながら同じシートに
84 名前:貼り付けようとしたら「コピー領域と貼り付け領域が違うため貼付できません」となりました [] [ここ壊れてます]
85 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 22:25:14.14 ID:GJIgK8HXa.net] >>77 まあ、自作マクロでウィルスどうこうはあり得ないわ コード見る限りでも、フィルターかけてるだけで値の操作はしてないしな まあ、フィルターかけっぱなしにならないようにブッククローズ時にフィルター解除すれば?
86 名前:デフォルトの名無しさん [2017/11/13(月) 22:28:52.42 ID:wM5leOdq0.net] >>80 >それって別のシートやブックに貼り付けるときに可視セルだけ貼り付けられているという意味ですか? そう >別のブックやシートにコピーする事は無いと思うので可能性としては低い気がします… そか オートフィルタならまずこれかなーと思ったけど、コピーペーストしてないなら違うかな
87 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 22:30:45.38 ID:GJIgK8HXa.net] フィルターで謎のデータ消失なら質問者の疑念通りフィルターかけたまんま範囲削除じゃねーかな
88 名前:デフォルトの名無しさん [2017/11/13(月) 22:32:36.92 ID:wM5leOdq0.net] 実際のコード上げたほうがいいかもねぇ
89 名前:デフォルトの名無しさん mailto:sage [2017/11/13(月) 22:46:30.32 ID:S878v5EG0.net] ありがとうございます コードがおかしいわけじゃないなら良かったです 一応ここに貼ったコードはAAの部分に別の単語が入ってるだけで他は全て実際に使っているものと同じです クローズ時にフィルター解除するようにはしてなかったのでやってみます
90 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 09:16:46.87 ID:8wZuibTmp.net] インターネットが壊れた!みたいなのはやめてください!
91 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 09:53:14.55 ID:tqdP1JBma.net] エクセルの特定の行だけ消すウイルスとか笑えるわ まあ、バグ満載のマクロとかある意味ウイルスだけど
92 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 11:29:31.52 ID:G7+v7Fl70.net] ウィルスは簡単に作れるだろ。 リテラシー無い奴が増えたからウィルスとは何ぞ?という議論が必要かも知れんが。 ただ、ExcelよりはAccessとかのが簡単だから大丈夫なんか?と思ったことあるけど。 Application.VBE系のコードが動くようになってれば感染させるのは簡単。 通常、Excelではセキュリティ設定で動かないようにはなってる。 Accessには設定が無い。 WordやPowerPointはどうだったかな。 Application.VBE系ってのはコード書いてるエディタを弄るものでVBAでコードを追加出来る。 つまり自分自身のコードをHDD上の不特定なxlsファイル開いて追加すれば自己増殖出来るし、Auto_Open辺りを追加して次回誰かが開いた時に勝手に実行させることも出来る。 ついでにそのxlsファイルをメールに添付して、アドレス帳の適当な所に送ることも出来る。 少し書ける奴なら分かってるだろうからApplication.VBE系は動かない設定になってるだろう。 Application.VBE系は便利でGithubにアップしたり、VBAのバックアックしたり、コード取得してWinmergeに与えて比較したり色々利用してたけどVB.netのCOMアドインに移行中。
93 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 11:36:59.15 ID:JNyIRsqMM.net] 隙あらば自分語り
94 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 12:24:48.16 ID:vavtQv330.net] 長文はスルーで
95 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 12:38:00.31 ID:Tcgv7xMn0.net] コンピュータウィルスって「操作している人間の意に沿わない動きをするプログラム」だったと思ったんだけど、 いつの間にか定義が変わったのか。 CDトレー開いたりマウスをランダムに動かすジョーク系もウィルスだったはずだから>>77 のもウィルスと言っていいと思ったんだが。
96 名前:デフォルトの名無しさん [2017/11/14(火) 12:42:08.62 ID:dN7NjwRxp.net] >>91 その定義だと世の中のあらゆるソフトはウイルスになるんじゃね バグはあるからな AndroidやiOSもウイルスになる
97 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 13:07:49.89 ID:5gpUPtII0.net] >>91 その定義だとワームやトロイの木馬とウィルスが区別できないわけだが いくら今だとより広義に使われるとはいえ >>いつの間にか定義が変わったのか はそのままお前に返してやるよ
98 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 13:09:39.12 ID:Tcgv7xMn0.net] >>92 バグは確か「論理的に正しくない結果を
99 名前:もたらす何か」みたいな定義だったと思う。 マシン内に虫が侵入して電気的にショートするのが語源だしね。 同じ定義で使い続けるとバグとウィルスがあやふやになるというのは時代の流れだなぁ。 [] [ここ壊れてます]
100 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 13:16:31.95 ID:Tcgv7xMn0.net] >>93 ワームもトロイの木馬も、元々はコンピュータウィルスを感染させるテクニックというか、 媒介手順だったはずがいつの間にか独立してウィルスの親戚みたいな扱いになってるよなぁ。
101 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 14:03:33.75 ID:5gpUPtII0.net] >>95 もともと、「感染」しないものはウィルスじゃない いつのまにか独立したんじゃなくて、初めからちゃんと別物でちゃんと区別されていたんだが いつのまにかまとめてウィルスと呼ばれるようになったんだ 今じゃマルウェア全般が広義にウィルスって言われる始末 バグは語源は諸説あるが、作成者の意図にそわない動作 ウィルスは作成者の意図にそった動作するプログラム いくらなんでもそれを混同しないでくれ
102 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 17:57:06.04 ID:Tcgv7xMn0.net] >>96 だからトロイの木馬もワームも単体ではウィルスじゃなかったんだよ。 言うなればコンテナみたいなものなんで、トロイの木馬型のパッチプログラムとかも可能だし。 たぶん想像している「定義づけられた時期」が違うせいで食い違ってるだけだな。
103 名前:デフォルトの名無しさん mailto:sage [2017/11/14(火) 17:58:22.04 ID:MC75ktwb0.net] もうやめよう
104 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 10:46:14.78 ID:PQCfnSyv0.net] >>97 ??? 自己増殖しなきゃウィルスじゃない。 トロイもワームもウィルスじゃねーだろ。
105 名前:デフォルトの名無しさん [2017/11/15(水) 12:15:18.42 ID:l7NNgtZ+d.net] プログラミングによる業務自動化絶対阻止マンがいて、ウィルスだろうがワームだろうが 題目はなんでもいいから邪魔しようとしている という妄想をした... ...疲れているようだ
106 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 12:24:36.36 ID:CIMTn4iP0.net] vbaが駄目なら関数でやればいいじゃない
107 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 12:41:18.42 ID:PQCfnSyv0.net] いや、だからApplication.VBE系の実行を拒否する設定にしておけばOK。 普通はそうなってる。 マイクロソフトも散々懲りたということだろう。 Accessはそうなってないから危険だけど、どっちにしろアンチウィルスソフト入れたり、それなりに敏感ならまあ大丈夫だろう。 メールに添付されたファイルを何も考えずに開くようなバカのいる所はそもそもコンピュ−タ使うなって話。
108 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 15:25:25.16 ID:PmECE2vTd.net] Excel2010からExcel2013にしたら「ライブラリが見つかりません」というが発生しました。 他のPCで作成したExcelファイルを開こうとしたら上記のようなエラーが発生したのです。 Excel2010の時も参照設定は参照不可になっておりましたがExcelに記載されているデータを 参照するだけでVBSは動かさないのでExcel2010ではエラーになりませんでしたが、Excel2013 ではファイルを開いた際に「ライブラリが見つかりません」というエラーになります。 これはExcelに開いた際に参照設定のチェックをしないみたいな設定があるのでしょうか?
109 名前:デフォルトの名無しさん [2017/11/15(水) 17:08:22.00 ID:MYmTne2b0.net] >>103 説明がひどいなw
110 名前:デフォルトの名無しさん [2017/11/15(水) 20:25:36.13 ID:m2725R1N0.net] vbeのツールのライブラリファイルって実体はなになんですか?参照不可になったりしますが オブジェクトエクスプローラのライブラリともちがうし
111 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 21:27:06.93 ID:BuHcCqTIx.net] >>103 VBSとオブジェクトライブラリに何の関係があるんだ?
112 名前:デフォルトの名無しさん [2017/11/15(水) 23:13:12.29 ID:gnIues9e0.net] メモリリークはVBAでどう対処すればいい? 巨大なファイルクローズ後にまるまんまリークするのですが
113 名前:デフォルトの名無しさん [2017/11/15(水) 23:18:44.71 ID:R7mLmomD0.net] 巨大なファイルは ・作らない ・分割する ・変換する ・開かずに読み取る ・csvならテキストとして読み込む この辺 メモリリークはある意味どうしようもないので前提からどうにかしないと解決しない
114 名前:デフォルトの名無しさん mailto:sage [2017/11/15(水) 23:25:33.43 ID:gnIues9e0.net] >>108 ありがとう。思い当たるのもあります。 ・開かずに読み取る これ、できるんですね。調べてみます
115 名前:デフォルトの名無しさん mailto:sage [2017/11/16(木) 02:14:21.20 ID:Og9f/0gn0.net] 俺なら読み取り専用で一部だけ読んで閉じる
116 名前:デフォルトの名無しさん [2017/11/16(木) 12:25:39.51 ID:NqwHUE6Zr.net] >>107 それはメモリリークではないので気にする必要はありません
117 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 11:56:05.53 ID:8RvIbz6z0.net] 巨大なファイルをSSDのHDDに移すと速いんじゃね
118 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 11:57:22.13 ID:8RvIbz6z0.net] HDDってかいたけどHDDじゃないけどな
119 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 12:27:16.57 ID:OabwNEEsd.net] SSDのHHDのFFD
120 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 17:41:51.06 ID:1LBcgp5Vd.net] VBAで原価計算してる人いる?
121 名前:デフォルトの名無しさん mailto:sage [2017/11/17(金) 20:16:29.56 ID:Iig4V4n+H.net] Dir関数で末尾$のフォルダを確認するとエラーになる。 (配下のフォルダはエラーにならない) これ、どんな理由でしょうか?
122 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 00:56:48.74 ID:lwdaQlHz0.net] >>116 なぜエラーの内容を書かないのか 軽く試した範囲ではエラーにならないな 環境とエラー内容と、実際にエラーになるコード晒せ
123 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 12:07:28.26 ID:+9+JGsY3H.net] >>117 ですよね。すんません。 'Case NG ?Dir("¥¥Svr¥Share$", vbDirectory) 'Case OK ?Dir("¥¥Svr¥Share$¥Sub", vbDirectory) アクセス権は親フォルダから継承していますので双方UNCアクセス可能な状態です。Domain Admins権限で実行しています。 GetAttrの戻りは双方 16 です。 共有名に$をつけない場合は発生しないように見受けられます、、、 と、思ったのですが、$の有無ではなくて、共有フォルダ自体を指定すると発生するようです。 エラーは、52: ファイル名または番号が不正です。となります。 ご教示お願いします。
124 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 12:11:55.49 ID:+9+JGsY3H.net] >>117 環境は、 2008Server Win7Pro/Excel 2010@vmware 5.4.0 です。
125 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 13:20:32.42 ID:+9+JGsY3H.net] >>117 末尾を"¥"で終わらせるとエラーにならないことがわかりました。でも戻りが "." になります。わからなくもないですが "Share$" を期待していたので、、 どう解釈すればいいのでしょうか。 (Dir を使う際は末尾 "¥" を励行したほうがいい?)
126 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 17:21:41.22 ID:lwdaQlHz0.net] UNCパスでそこは共有名であってフォルダ名じゃない気がするが
127 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 17:56:31.65 ID:HVgorTjE0.net] すいません wordのVBAです。 画像貼りつけて文字列の折り返しを背景にするのに下記では2行目で 描画の対象とならないオブジェクトが選ばれているためにtypeメソッドまたはプロパティは使用できません。 となりますが、どうしたらよいですか? Selection.InlineShapes.AddPicture FileName:="a.jpg", SaveWithDocument:=True Selection..ShapeRange.WrapFormat.Type=wdWrapBehind
128 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 19:38:08.85 ID:+9+JGsY3H.net] >>121 なんかややこしいですね。 共有名に "¥" をつけて初めて共有フォルダのルートフォルダとして認識される、と覚えておくことにします。
129 名前:デフォルトの名無しさん mailto:sage [2017/11/18(土) 22:21:46.28 ID:+9+JGsY3H.net] 立て続けにすんません。 onAction の引数について、全角英数記号が半角に解釈されて実行されてしまうのは既知の仕様でしょうか? ひらがなカタカナは被害を受けないようです。 CommandBars.ActiveControl.Caption CommandBars.ActiveControl.OnAction あたりで変換前の文字列を救出できるようですが、、根本的対応はないのでしょうか。 上記で躓いてしまい、公式で情報をみつけられなかったもので、、
130 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 10:05:19.39 ID:M3mw+ZdH0.net] >>122 まずさ、Selection使うの辞めようぜ。 Hoge.Select Selection.Fuga という形が有ったらたいてい Hoge.Fuga という形にできる。 つまりね、大抵は選ぶ必要がない。 ある程度書ける人は選ぶ処理をいかに無くすかを考える。 そうすればApplication.ScreenUpdating=False使っても 速度が変わらなくなる。 ちらつき防止のために使うのが有用なのは変わらないんだけど。 .Selectを使うのはユーザーに明示的に場所を示す場合と、 本当にどうしようもない場合がごくまれにあるだけだ。 オブジェクトブラウザでShapeRangeとかWrapFormatを 調べてそこに何が(型)期待されてるかを調べる。 後は合わせれば良いだけだ。
131 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 10:10:14.58 ID:M3mw+ZdH0.net] >>124 "OnAction" "全角"でググると結構出てくるね。 コメント以外で日本語使うこと無いから遭遇する事無かったわ。
132 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 11:46:20.87 ID:JvH46D6m0.net] >>125 >.Selectを使うのはユーザーに明示的に場所を示す場合と、 「ユーザーが明示的に選択したオブジェクトを処理する場合」も追加願います
133 名前:デフォルトの名無しさん [2017/11/19(日) 11:56:21.06 ID:aexN4+ic0.net] 追加願いますって何を言ってるんだ???
134 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 12:23:26.42 ID:JvH46D6m0.net] >>128 >>125 が >.Selectを使うのはユーザーに明示的に場所を示す場合と、 >本当にどうしようもない場合がごくまれにある 「だ け」 だ。 と言ってるから、もう一つのパターンもあるよ、と言ってるわけだが?
135 名前:デフォルトの名無しさん [2017/11/19(日) 12:30:59.55 ID:aexN4+ic0.net] select使わない理由は誤作動の原因になるからの方が多いんじゃないか もちろんパフォーマンスも大きく変わるけど、言うほど変わらない それよりもコード上、何のブック、シートがactivateになっているかを把握する方が遥かにめんどくさい
136 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 12:55:38.95 ID:YlgcavI50.net] 作ってるものが偏っているからActiveSheetやSelectionを使う機会がないだけで、 もっと操作補助的な面の強いマクロなら使う場面もあるかもしれない。
137 名前:デフォルトの名無しさん [2017/11/19(日) 12:57:36.65 ID:aexN4+ic0.net] 確かにコードの最後にcells(1,1).selectはよく書くけど、それ以外のselectは>>125 の通り「本当にどうしようもない場合」だけだな オートシェイプかなんかでsetできなかったような、忘れたけど
138 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 13:53:20.81 ID:wFQIPa4T0.net] IOと純粋関数部分を分けるようにと、Hな言語から学んだよ。
139 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 13:59:20.49 ID:ZK6mPT5SM.net] >>131 > もっと操作補助的な面の強いマクロなら使う場面もあるかもしれない。 まあそれが > .Selectを使うのはユーザーに明示的に場所を示す場合と、 > 「ユーザーが明示的に選択したオブジェクトを処理する場合」 なわけだが
140 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 16:16:58.30 ID:M3mw+ZdH0.net] >>130 誤動作とか以前に無駄なことをしたくないという自然な考えがある。 Cells(1,1).Select Cells(1,2).Select Cells(1,1).Select と書かれてたらなんじゃこれと思うだろ。 マクロの記録は操作を自然に記録してしまうけど、 やりたいことはそれじゃない。 それにコードも汚くなって読みたくないものになる。
141 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 16:18:58.83 ID:8D87jpDPa.net] ユーザーが明示的に選択したものに〜 ってのもぶっちゃけ運用の問題の気もするが マクロ化の範囲にもよるんだけども 可能な限り避けるべきってのは正しいでしょ
142 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 17:16:48.30 ID:JvH46D6m0.net] >>136 >可能な限り避けるべきってのは正しいでしょ そうなの? 実際それをやることは少ないけど、別に避けてるわけじゃないな。 「ボタンを押すと、選択しているセルの書式を〜する」なんて処理はたまにある。
143 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 17:30:54.95 ID:SAgRzZs9a.net] ユーザーが明示的に選択したものに処理を与えるってのはアリだとは思う。 でもそれはHoge.Selectでは無くてSelectionを使う場合だよね。
144 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 17:35:35.45 ID:JvH46D6m0.net] >>138 なるほど 最初のきっかけとなった>>125 の1行目が、 >まずさ、Selection使うの辞めようぜ。 だったからずっと Selection のことを語っていた
145 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 17:48:04.11 ID:lBNHVI9l0.net] >>136 優先順位の問題でしょ > ユーザーが明示的に選択したものに〜 って言う仕様の方が > 可能な限り避けるべき より優先されるのは当たり前
146 名前:デフォルトの名無しさん [2017/11/19(日) 17:50:02.84 ID:aexN4+ic0.net] >>138 あぁそれはアリ 会社によっては多用するだろう
147 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 20:49:12.88 ID:eK6D85VJ0.net] wordのマクロ組んでる人おらんのかな?
148 名前:デフォルトの名無しさん [2017/11/19(日) 21:18:16.41 ID:aexN4+ic0.net] >>122 >>142 そもそもwordを使わない あととりあえず動くコードを書いてくれ Selection..ShapeR ピリオドがニコあって邪魔 で、差し込んだ画像の文字列の折り返しってのが何がしたいのか良く分からん テキストボックスなら分かるしそれで通るけど
149 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 21:23:25.50 ID:eK6D85VJ0.net] >>143 画像のレイアウトで背面にしたいんですよ。 なんかしらんけど動いて、なぜか前面で貼りつけられました。 なんかEXCELと勝手が違いますぬ・・・。
150 名前:デフォルトの名無しさん [2017/11/19(日) 21:27:01.10 ID:aexN4+ic0.net] >>144 エクセルと勝手が違うんじゃなくて、ただただ猛烈に使いにくいだけ で、上手く行ったので質問は終了ってこと?
151 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 21:31:31.01 ID:eK6D85VJ0.net] >>145 とりあえずは。 また多分色々とお伺いすることになると思いますが、 なにとぞよろしくお願いいたします。
152 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 22:32:44.41 ID:Z3cAV0my0.net] wordはスレ違いだけどな あんまりvbaと親和性もないし あくまで文書ツールだからな
153 名前:デフォルトの名無しさん [2017/11/19(日) 22:50:31.56 ID:1/mWyqVE0.net] おいおいExcelかてただの文書ツールやぞw
154 名前:デフォルトの名無しさん [2017/11/19(日) 22:56:21.06 ID:aexN4+ic0.net] >>148 釣りはほどほどに
155 名前:デフォルトの名無しさん mailto:sage [2017/11/19(日) 23:23:51.19 ID:lBNHVI9l0.net] 文書ツールとしてExcel使う奴はたくさんいるけど w
156 名前:デフォルトの名無しさん mailto:sage [2017/11/20(月) 08:54:30.90 ID:6BLE5ZLY0.net] >>146 まず君が貼り付けたのは何かを考えよう。 マクロ記録が示すコードを見ればInlineShapeだろう。 InlineShapeを調べれば文字列の中の位置を指定した図形ということらしい。 要は10文字目に挿入とかさ。 InlineShapeにはWrapFormatプロパティは無い。 文字列の折り返しを背景にするというのは回り込み等を自動でやるわけでその結果文字が動くだろ。 それじゃ位置を指定したことにならない。 だから出来ない。 それじゃあどうするかというと、InlineShapeをShapeに変換するというのが1つ。 InlineShapeにはConvertToShapeというのがあるから、それをShapeで受けてやればShapeにはWrapFormatプロパティがある。 Dim iShp As InlineShape Dim Shp As Shape Set iShp=Document("hoge.doc").Characters(10).InlineShapes.AddPicture("C:¥fuga.jpg") Set Shp=iShp.ConvertToShape Shp.WrapText.Type=wdWrapThrough しかしそもそも最初からInlineShapeじゃなくてShapeを貼り付ければ問題にならない。 Set shp=Documents("hoge.doc").Shapes.AddPicture("C:¥fuga.jpg") shp.WrapText.Type wdWrapThrough Shapeは位置を指定出来ないといっても何文字目という意味で指定出来ないだけで、Left、Top、Width、Heightでの位置指定はできる。 今回の問題もSelectionだったな。 何のオブジェクトを触ってるのかはっきりさせずに組んでるからエラーの意味も分からない。
157 名前:デフォルトの名無しさん [2017/11/20(月) 12:21:51.39 ID:phW/Gatbr.net] >>150 そらそれが本来の使い方やもの なに勘違いしてニヤニヤしとんねんお前 気色悪い奴だな
158 名前:デフォルトの名無しさん mailto:sage [2017/11/20(月) 13:11:30.03 ID:tncAZsVja.net] >>152 Jカスこんなところでも下らねー釣りしてんじゃねえよ