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)
2017/11/13(月) 17:08:14.63ID:GJIgK8HXa
ここでも前に書いたけど、配列のラッパークラスとか、一度作ると便利よ
コレクションだと微妙に取り回し悪かったりするからね
これ以上はスレチかな
70デフォルトの名無しさん (スップ Sd9f-Lcj1)
垢版 |
2017/11/13(月) 17:09:30.17ID:4dN82Cnsd
>>68
そうだよね

ただ、いちいちクラスモジュールを追加しなきゃならないから、使い捨てクラスをほいほい定義しづらい
2017/11/13(月) 17:20:46.73ID:78YzXPYPa
FileSystemObjectのファイル一覧取得が遅いのなんて結構有名な話だと思うんだが。
ハードディスクにあるファイル名全部取ってくるとかすれば分かる。

昔、どっかに比較してる所が有ったんだが見つからないな。
Win32APIが一番速かったがDirでもそんなに大きな違いは出なかった。
が、FileSystemObjectは糞遅い結果になってた。
そもそも自分で組んだら遅くてネットで調べたらやっぱり遅かったという。
2017/11/13(月) 17:23:43.47ID:78YzXPYPa
クラスは凄く便利だが、無理に使う必要は無いと思う。
個人的には仕様を考えた段階でクラス使うのがぴったりと感覚で分かる。
そういう時以外は使わない。
2017/11/13(月) 17:47:02.85ID:GJIgK8HXa
>>71
そうなんか
まあ、今んとこそんな大量のファイルのやり取りしたことないから体感したことなかったわ
まあ、その辺使うにしても生で扱うよりクラスでまとめちゃった方が取り回し良さそうだがね
その辺は好みなんだろうけどね
2017/11/13(月) 18:55:14.32ID:IBZYfbeXM
>>64
まともな言語ならクラスを使うデメリットはないけどVBAのクラスは制限が多すぎて使う意味がない
75デフォルトの名無しさん (ワッチョイ ffe9-ySnM)
垢版 |
2017/11/13(月) 19:08:08.64ID:wM5leOdq0
>>59
bit数の関係で安定しなくなったことはある

>>61
多分、ない
class使ったほうが見通しがよくなる場合はあるけど、
正直そんなに変わらんというか、めんどくさくなるだけの場合が多い気がする
2017/11/13(月) 21:36:08.79ID:S878v5EG0
この流れで突然クソみたいな質問するの恐縮なのですが…
共有で使っている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
2017/11/13(月) 21:42:36.96ID:zsNLMe3/0
シート保護かけてみるとか
78デフォルトの名無しさん (ワッチョイ ffe9-Ai73)
垢版 |
2017/11/13(月) 21:45:59.98ID:wM5leOdq0
>>76
ウィルスに感染していて、セキュリティをsageているためにウィルスが実行されているというパターンなら考えられるが
其れ以前の問題として
・オートフィルタをかける
・全体をコピー
・ペースト(値として貼り付けなど)
で行が減っている可能性のほうが高いと思う
この仕様
、意外と知られていないんじゃないかなぁ
2017/11/13(月) 22:24:58.44ID:S878v5EG0
>>78
それって別のシートやブックに貼り付けるときに可視セルだけ貼り付けられているという意味ですか?
別のブックやシートにコピーする事は無いと思うので可能性としては低い気がします…
試しにオートフィルタしながら同じシートに貼り付けようとしたら「コピー領域と貼り付け領域が違うため貼付できません」となりました
2017/11/13(月) 22:25:14.14ID:GJIgK8HXa
>>76
まあ、自作マクロでウィルスどうこうはあり得ないわ
コード見る限りでも、フィルターかけてるだけで値の操作はしてないしな
まあ、フィルターかけっぱなしにならないようにブッククローズ時にフィルター解除すれば?
81デフォルトの名無しさん (ワッチョイ ffe9-Ai73)
垢版 |
2017/11/13(月) 22:28:52.42ID:wM5leOdq0
>>79
>それって別のシートやブックに貼り付けるときに可視セルだけ貼り付けられているという意味ですか?
そう
>別のブックやシートにコピーする事は無いと思うので可能性としては低い気がします…
そか

オートフィルタならまずこれかなーと思ったけど、コピーペーストしてないなら違うかな
2017/11/13(月) 22:30:45.38ID:GJIgK8HXa
フィルターで謎のデータ消失なら質問者の疑念通りフィルターかけたまんま範囲削除じゃねーかな
83デフォルトの名無しさん (ワッチョイ ffe9-Ai73)
垢版 |
2017/11/13(月) 22:32:36.92ID:wM5leOdq0
実際のコード上げたほうがいいかもねぇ
2017/11/13(月) 22:46:30.32ID:S878v5EG0
ありがとうございます
コードがおかしいわけじゃないなら良かったです
一応ここに貼ったコードはAAの部分に別の単語が入ってるだけで他は全て実際に使っているものと同じです
クローズ時にフィルター解除するようにはしてなかったのでやってみます
2017/11/14(火) 09:16:46.87ID:8wZuibTmp
インターネットが壊れた!みたいなのはやめてください!
2017/11/14(火) 09:53:14.55ID:tqdP1JBma
エクセルの特定の行だけ消すウイルスとか笑えるわ
まあ、バグ満載のマクロとかある意味ウイルスだけど
2017/11/14(火) 11:29:31.52ID:G7+v7Fl70
ウィルスは簡単に作れるだろ。
リテラシー無い奴が増えたからウィルスとは何ぞ?という議論が必要かも知れんが。
ただ、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アドインに移行中。
2017/11/14(火) 11:36:59.15ID:JNyIRsqMM
隙あらば自分語り
2017/11/14(火) 12:24:48.16ID:vavtQv330
長文はスルーで
2017/11/14(火) 12:38:00.31ID:Tcgv7xMn0
コンピュータウィルスって「操作している人間の意に沿わない動きをするプログラム」だったと思ったんだけど、
いつの間にか定義が変わったのか。

CDトレー開いたりマウスをランダムに動かすジョーク系もウィルスだったはずだから>>76のもウィルスと言っていいと思ったんだが。
91デフォルトの名無しさん (ササクッテロラ Sp33-hKlY)
垢版 |
2017/11/14(火) 12:42:08.62ID:dN7NjwRxp
>>90
その定義だと世の中のあらゆるソフトはウイルスになるんじゃね

バグはあるからな
AndroidやiOSもウイルスになる
2017/11/14(火) 13:07:49.89ID:5gpUPtII0
>>90
その定義だとワームやトロイの木馬とウィルスが区別できないわけだが
いくら今だとより広義に使われるとはいえ
>>いつの間にか定義が変わったのか
はそのままお前に返してやるよ
2017/11/14(火) 13:09:39.12ID:Tcgv7xMn0
>>91
バグは確か「論理的に正しくない結果をもたらす何か」みたいな定義だったと思う。
マシン内に虫が侵入して電気的にショートするのが語源だしね。

同じ定義で使い続けるとバグとウィルスがあやふやになるというのは時代の流れだなぁ。
2017/11/14(火) 13:16:31.95ID:Tcgv7xMn0
>>92
ワームもトロイの木馬も、元々はコンピュータウィルスを感染させるテクニックというか、
媒介手順だったはずがいつの間にか独立してウィルスの親戚みたいな扱いになってるよなぁ。
2017/11/14(火) 14:03:33.75ID:5gpUPtII0
>>94
もともと、「感染」しないものはウィルスじゃない
いつのまにか独立したんじゃなくて、初めからちゃんと別物でちゃんと区別されていたんだが
いつのまにかまとめてウィルスと呼ばれるようになったんだ
今じゃマルウェア全般が広義にウィルスって言われる始末

バグは語源は諸説あるが、作成者の意図にそわない動作
ウィルスは作成者の意図にそった動作するプログラム
いくらなんでもそれを混同しないでくれ
2017/11/14(火) 17:57:06.04ID:Tcgv7xMn0
>>95
だからトロイの木馬もワームも単体ではウィルスじゃなかったんだよ。
言うなればコンテナみたいなものなんで、トロイの木馬型のパッチプログラムとかも可能だし。

たぶん想像している「定義づけられた時期」が違うせいで食い違ってるだけだな。
2017/11/14(火) 17:58:22.04ID:MC75ktwb0
もうやめよう
2017/11/15(水) 10:46:14.78ID:PQCfnSyv0
>>96
???
自己増殖しなきゃウィルスじゃない。
トロイもワームもウィルスじゃねーだろ。
99デフォルトの名無しさん (スップ Sd9f-Lcj1)
垢版 |
2017/11/15(水) 12:15:18.42ID:l7NNgtZ+d
プログラミングによる業務自動化絶対阻止マンがいて、ウィルスだろうがワームだろうが
題目はなんでもいいから邪魔しようとしている

という妄想をした...
...疲れているようだ
2017/11/15(水) 12:24:36.36ID:CIMTn4iP0
vbaが駄目なら関数でやればいいじゃない
2017/11/15(水) 12:41:18.42ID:PQCfnSyv0
いや、だからApplication.VBE系の実行を拒否する設定にしておけばOK。
普通はそうなってる。
マイクロソフトも散々懲りたということだろう。

Accessはそうなってないから危険だけど、どっちにしろアンチウィルスソフト入れたり、それなりに敏感ならまあ大丈夫だろう。
メールに添付されたファイルを何も考えずに開くようなバカのいる所はそもそもコンピュ−タ使うなって話。
2017/11/15(水) 15:25:25.16ID:PmECE2vTd
Excel2010からExcel2013にしたら「ライブラリが見つかりません」というが発生しました。
他のPCで作成したExcelファイルを開こうとしたら上記のようなエラーが発生したのです。
Excel2010の時も参照設定は参照不可になっておりましたがExcelに記載されているデータを
参照するだけでVBSは動かさないのでExcel2010ではエラーになりませんでしたが、Excel2013
ではファイルを開いた際に「ライブラリが見つかりません」というエラーになります。
これはExcelに開いた際に参照設定のチェックをしないみたいな設定があるのでしょうか?
103デフォルトの名無しさん (ワッチョイ dfc3-/WXw)
垢版 |
2017/11/15(水) 17:08:22.00ID:MYmTne2b0
>>102
説明がひどいなw
104デフォルトの名無しさん (ワッチョイ 5fb3-ZbMi)
垢版 |
2017/11/15(水) 20:25:36.13ID:m2725R1N0
vbeのツールのライブラリファイルって実体はなになんですか?参照不可になったりしますが
オブジェクトエクスプローラのライブラリともちがうし
2017/11/15(水) 21:27:06.93ID:BuHcCqTIx
>>102
VBSとオブジェクトライブラリに何の関係があるんだ?
106デフォルトの名無しさん (ワッチョイ 7fd2-Kfl6)
垢版 |
2017/11/15(水) 23:13:12.29ID:gnIues9e0
メモリリークはVBAでどう対処すればいい?
巨大なファイルクローズ後にまるまんまリークするのですが
107デフォルトの名無しさん (ワッチョイ ffe9-JS46)
垢版 |
2017/11/15(水) 23:18:44.71ID:R7mLmomD0
巨大なファイルは
・作らない
・分割する
・変換する
・開かずに読み取る
・csvならテキストとして読み込む
この辺

メモリリークはある意味どうしようもないので前提からどうにかしないと解決しない
2017/11/15(水) 23:25:33.43ID:gnIues9e0
>>107
ありがとう。思い当たるのもあります。
・開かずに読み取る
 これ、できるんですね。調べてみます
2017/11/16(木) 02:14:21.20ID:Og9f/0gn0
俺なら読み取り専用で一部だけ読んで閉じる
110デフォルトの名無しさん (オッペケ Srd1-FHhe)
垢版 |
2017/11/16(木) 12:25:39.51ID:NqwHUE6Zr
>>106
それはメモリリークではないので気にする必要はありません
2017/11/17(金) 11:56:05.53ID:8RvIbz6z0
巨大なファイルをSSDのHDDに移すと速いんじゃね
2017/11/17(金) 11:57:22.13ID:8RvIbz6z0
HDDってかいたけどHDDじゃないけどな
2017/11/17(金) 12:27:16.57ID:OabwNEEsd
SSDのHHDのFFD
2017/11/17(金) 17:41:51.06ID:1LBcgp5Vd
VBAで原価計算してる人いる?
2017/11/17(金) 20:16:29.56ID:Iig4V4n+H
Dir関数で末尾$のフォルダを確認するとエラーになる。
(配下のフォルダはエラーにならない)
これ、どんな理由でしょうか?
2017/11/18(土) 00:56:48.74ID:lwdaQlHz0
>>115
なぜエラーの内容を書かないのか

軽く試した範囲ではエラーにならないな
環境とエラー内容と、実際にエラーになるコード晒せ
2017/11/18(土) 12:07:28.26ID:+9+JGsY3H
>>116
ですよね。すんません。
'Case NG
?Dir("¥¥Svr¥Share$", vbDirectory)

'Case OK
?Dir("¥¥Svr¥Share$¥Sub", vbDirectory)

アクセス権は親フォルダから継承していますので双方UNCアクセス可能な状態です。Domain Admins権限で実行しています。
GetAttrの戻りは双方 16 です。
共有名に$をつけない場合は発生しないように見受けられます、、、
と、思ったのですが、$の有無ではなくて、共有フォルダ自体を指定すると発生するようです。
エラーは、52: ファイル名または番号が不正です。となります。

ご教示お願いします。
2017/11/18(土) 12:11:55.49ID:+9+JGsY3H
>>116
環境は、
2008Server
Win7Pro/Excel 2010@vmware 5.4.0
です。
2017/11/18(土) 13:20:32.42ID:+9+JGsY3H
>>116
末尾を"¥"で終わらせるとエラーにならないことがわかりました。でも戻りが "." になります。わからなくもないですが "Share$" を期待していたので、、
どう解釈すればいいのでしょうか。
(Dir を使う際は末尾 "¥" を励行したほうがいい?)
2017/11/18(土) 17:21:41.22ID:lwdaQlHz0
UNCパスでそこは共有名であってフォルダ名じゃない気がするが
2017/11/18(土) 17:56:31.65ID:HVgorTjE0
すいません wordのVBAです。 画像貼りつけて文字列の折り返しを背景にするのに下記では2行目で
描画の対象とならないオブジェクトが選ばれているためにtypeメソッドまたはプロパティは使用できません。
となりますが、どうしたらよいですか?

Selection.InlineShapes.AddPicture FileName:="a.jpg", SaveWithDocument:=True
Selection..ShapeRange.WrapFormat.Type=wdWrapBehind
2017/11/18(土) 19:38:08.85ID:+9+JGsY3H
>>120
なんかややこしいですね。
共有名に "¥" をつけて初めて共有フォルダのルートフォルダとして認識される、と覚えておくことにします。
2017/11/18(土) 22:21:46.28ID:+9+JGsY3H
立て続けにすんません。
onAction の引数について、全角英数記号が半角に解釈されて実行されてしまうのは既知の仕様でしょうか?
ひらがなカタカナは被害を受けないようです。
CommandBars.ActiveControl.Caption
CommandBars.ActiveControl.OnAction
あたりで変換前の文字列を救出できるようですが、、根本的対応はないのでしょうか。
上記で躓いてしまい、公式で情報をみつけられなかったもので、、
2017/11/19(日) 10:05:19.39ID:M3mw+ZdH0
>>121
まずさ、Selection使うの辞めようぜ。
Hoge.Select
Selection.Fuga
という形が有ったらたいてい
Hoge.Fuga
という形にできる。

つまりね、大抵は選ぶ必要がない。
ある程度書ける人は選ぶ処理をいかに無くすかを考える。
そうすればApplication.ScreenUpdating=False使っても
速度が変わらなくなる。
ちらつき防止のために使うのが有用なのは変わらないんだけど。
.Selectを使うのはユーザーに明示的に場所を示す場合と、
本当にどうしようもない場合がごくまれにあるだけだ。

オブジェクトブラウザでShapeRangeとかWrapFormatを
調べてそこに何が(型)期待されてるかを調べる。
後は合わせれば良いだけだ。
2017/11/19(日) 10:10:14.58ID:M3mw+ZdH0
>>123
"OnAction" "全角"でググると結構出てくるね。
コメント以外で日本語使うこと無いから遭遇する事無かったわ。
2017/11/19(日) 11:46:20.87ID:JvH46D6m0
>>124
>.Selectを使うのはユーザーに明示的に場所を示す場合と、

「ユーザーが明示的に選択したオブジェクトを処理する場合」も追加願います
127デフォルトの名無しさん (ワッチョイ 46e9-e7SK)
垢版 |
2017/11/19(日) 11:56:21.06ID:aexN4+ic0
追加願いますって何を言ってるんだ???
2017/11/19(日) 12:23:26.42ID:JvH46D6m0
>>127

>>124
>.Selectを使うのはユーザーに明示的に場所を示す場合と、
>本当にどうしようもない場合がごくまれにある 「だ け」 だ。

と言ってるから、もう一つのパターンもあるよ、と言ってるわけだが?
129デフォルトの名無しさん (ワッチョイ 46e9-e7SK)
垢版 |
2017/11/19(日) 12:30:59.55ID:aexN4+ic0
select使わない理由は誤作動の原因になるからの方が多いんじゃないか
もちろんパフォーマンスも大きく変わるけど、言うほど変わらない
それよりもコード上、何のブック、シートがactivateになっているかを把握する方が遥かにめんどくさい
2017/11/19(日) 12:55:38.95ID:YlgcavI50
作ってるものが偏っているからActiveSheetやSelectionを使う機会がないだけで、
もっと操作補助的な面の強いマクロなら使う場面もあるかもしれない。
131デフォルトの名無しさん (ワッチョイ 46e9-e7SK)
垢版 |
2017/11/19(日) 12:57:36.65ID:aexN4+ic0
確かにコードの最後にcells(1,1).selectはよく書くけど、それ以外のselectは>>124の通り「本当にどうしようもない場合」だけだな
オートシェイプかなんかでsetできなかったような、忘れたけど
2017/11/19(日) 13:53:20.81ID:wFQIPa4T0
IOと純粋関数部分を分けるようにと、Hな言語から学んだよ。
2017/11/19(日) 13:59:20.49ID:ZK6mPT5SM
>>130
> もっと操作補助的な面の強いマクロなら使う場面もあるかもしれない。
まあそれが
> .Selectを使うのはユーザーに明示的に場所を示す場合と、
> 「ユーザーが明示的に選択したオブジェクトを処理する場合」
なわけだが
2017/11/19(日) 16:16:58.30ID:M3mw+ZdH0
>>129
誤動作とか以前に無駄なことをしたくないという自然な考えがある。
Cells(1,1).Select
Cells(1,2).Select
Cells(1,1).Select
と書かれてたらなんじゃこれと思うだろ。

マクロの記録は操作を自然に記録してしまうけど、
やりたいことはそれじゃない。
それにコードも汚くなって読みたくないものになる。
2017/11/19(日) 16:18:58.83ID:8D87jpDPa
ユーザーが明示的に選択したものに〜
ってのもぶっちゃけ運用の問題の気もするが
マクロ化の範囲にもよるんだけども
可能な限り避けるべきってのは正しいでしょ
2017/11/19(日) 17:16:48.30ID:JvH46D6m0
>>135
>可能な限り避けるべきってのは正しいでしょ

そうなの?
実際それをやることは少ないけど、別に避けてるわけじゃないな。
「ボタンを押すと、選択しているセルの書式を〜する」なんて処理はたまにある。
2017/11/19(日) 17:30:54.95ID:SAgRzZs9a
ユーザーが明示的に選択したものに処理を与えるってのはアリだとは思う。
でもそれはHoge.Selectでは無くてSelectionを使う場合だよね。
2017/11/19(日) 17:35:35.45ID:JvH46D6m0
>>137
なるほど

最初のきっかけとなった>>124の1行目が、
>まずさ、Selection使うの辞めようぜ。

だったからずっと Selection のことを語っていた
2017/11/19(日) 17:48:04.11ID:lBNHVI9l0
>>135
優先順位の問題でしょ
> ユーザーが明示的に選択したものに〜
って言う仕様の方が
> 可能な限り避けるべき
より優先されるのは当たり前
140デフォルトの名無しさん (ワッチョイ 46e9-e7SK)
垢版 |
2017/11/19(日) 17:50:02.84ID:aexN4+ic0
>>137
あぁそれはアリ
会社によっては多用するだろう
2017/11/19(日) 20:49:12.88ID:eK6D85VJ0
wordのマクロ組んでる人おらんのかな?
142デフォルトの名無しさん (ワッチョイ 46e9-3zcL)
垢版 |
2017/11/19(日) 21:18:16.41ID:aexN4+ic0
>>121>>141
そもそもwordを使わない

あととりあえず動くコードを書いてくれ
Selection..ShapeR
ピリオドがニコあって邪魔

で、差し込んだ画像の文字列の折り返しってのが何がしたいのか良く分からん
テキストボックスなら分かるしそれで通るけど
2017/11/19(日) 21:23:25.50ID:eK6D85VJ0
>>142 画像のレイアウトで背面にしたいんですよ。 なんかしらんけど動いて、なぜか前面で貼りつけられました。
なんかEXCELと勝手が違いますぬ・・・。
144デフォルトの名無しさん (ワッチョイ 46e9-3zcL)
垢版 |
2017/11/19(日) 21:27:01.10ID:aexN4+ic0
>>143
エクセルと勝手が違うんじゃなくて、ただただ猛烈に使いにくいだけ
で、上手く行ったので質問は終了ってこと?
2017/11/19(日) 21:31:31.01ID:eK6D85VJ0
>>144 とりあえずは。 また多分色々とお伺いすることになると思いますが、

なにとぞよろしくお願いいたします。
2017/11/19(日) 22:32:44.41ID:Z3cAV0my0
wordはスレ違いだけどな
あんまりvbaと親和性もないし
あくまで文書ツールだからな
147デフォルトの名無しさん (ワッチョイ 1d03-FHhe)
垢版 |
2017/11/19(日) 22:50:31.56ID:1/mWyqVE0
おいおいExcelかてただの文書ツールやぞw
148デフォルトの名無しさん (ワッチョイ 46e9-3zcL)
垢版 |
2017/11/19(日) 22:56:21.06ID:aexN4+ic0
>>147
釣りはほどほどに
2017/11/19(日) 23:23:51.19ID:lBNHVI9l0
文書ツールとしてExcel使う奴はたくさんいるけど w
2017/11/20(月) 08:54:30.90ID:6BLE5ZLY0
>>145
まず君が貼り付けたのは何かを考えよう。
マクロ記録が示すコードを見れば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だったな。
何のオブジェクトを触ってるのかはっきりさせずに組んでるからエラーの意味も分からない。
151デフォルトの名無しさん (オッペケ Srd1-FHhe)
垢版 |
2017/11/20(月) 12:21:51.39ID:phW/Gatbr
>>149
そらそれが本来の使い方やもの
なに勘違いしてニヤニヤしとんねんお前
気色悪い奴だな
2017/11/20(月) 13:11:30.03ID:tncAZsVja
>>151
Jカスこんなところでも下らねー釣りしてんじゃねえよ
2017/11/20(月) 15:08:27.78ID:6BLE5ZLY0
WordVBAで使いにくいのは記録出来ても良さそうなものが記録出来ない所。
ただ、これはこっちが出来ても良さそうと勝手に思ってるだけでMS的にはまずい何かが有るのかもしれない。

それよりも困るのは
Debug.Print Typename(hoge)
とやってSelectionが帰ってくる所。

型を知りたいのにSelectionは無いだろう。
2017/11/20(月) 17:44:20.81ID:PC8rzjhFa
>>153
型名調べる関数もうひとつあったよね
あんま使わんから忘れたけど
155デフォルトの名無しさん (ワッチョイ 46e9-jGnz)
垢版 |
2017/11/20(月) 19:16:12.47ID:3EUEsxu/0
>>153
笑ったw
156デフォルトの名無しさん (ワッチョイ a961-RjUU)
垢版 |
2017/11/20(月) 19:56:44.52ID:HiJj2X0L0
>>153
? typename(hoge)とやったら
Emptyと出てきたぞ。
あなた↓の頭と同じでカラッポ。
2017/11/20(月) 21:46:53.19ID:dynAF7sP0
>>150 ありがとうございます。 じつはそれで解決しました。
マクロで記録したらinlineshapeで、なんやねんこれ?と理解していなかったことが原因でした。
158デフォルトの名無しさん (ワッチョイ a960-IKRN)
垢版 |
2017/11/20(月) 22:35:57.11ID:bUEYENj70
前スレ943様の下記ファイル、もう一度upしていただく訳にはいきませんでしょうか。
DLしようと思いながら、失念していて、先ほどしようとしたところ消えてしまっていました。
943様、お手数をおかけしますが何卒よろしくお願いいたします。

943デフォルトの名無しさん (ワッチョイ 06e9-FqSh)2017/11/05(日) 15:01:02.75ID:2uRc+T650>>944>>958
>>942
写真は辞めてくれ。見るのめんどくさい

出てきたからあげるわ
大体やりたいことはこれだと思う
・設定シートのB列に表示したいもの。C列は入力する文字を入れる
・入力シートのA1に「う」と入れて決定。リストが現れて「東京」「北海道」が現れるので選択する
もちろん「う」じゃなくても「東」なんかでもいい。場合によってはB列に「渋谷」とかいれてもいいかもしれない
https://dotup.org/uploda/dotup.org1380568.zip.html

自分で言うのも何だがこれ超便利。かなりオススメ
159デフォルトの名無しさん (ワッチョイ 46e9-jGnz)
垢版 |
2017/11/20(月) 23:57:02.00ID:3EUEsxu/0
こういう時はせめてエクセルアップロードできるアップローダーぐらい探してくると良いぞ
2017/11/21(火) 02:44:24.85ID:eIBN2cFq0
>>156
www
hogeをなんだと思ってる?
そりゃそのまま打てばEmptyが帰ってくるだろう。
hogeで察してくれんかね。

カラッポなのは誰の頭だよ。
2017/11/21(火) 13:03:45.67ID:OSkNtsZi0
途中経過はどうでもいいから結果を教えろ って人間がどんどん増えてんだな 経営者かよ
2017/11/21(火) 16:28:44.72ID:7aGtp6cN0
結果はいいから途中経過を教えろ、なんて頭おかしいだろ何言ってんだか
2017/11/21(火) 17:41:32.87ID:rp//GM45a
>>162
普通は結果教えてもらうなら過程も学ぶんだよ
まあ、別に学びの場じゃないけどね
ただ、腐ってもプログラムだからな
結果だけ知ってもその場しのぎ以上にはならんだろ
164デフォルトの名無しさん (スップ Sd22-A9yG)
垢版 |
2017/11/21(火) 18:15:13.21ID:22dwRLVAd
世の中は論理的にできているのに>>162が論理的でないのはなぜなのか
165デフォルトの名無しさん (ワッチョイ 46e9-IwP8)
垢版 |
2017/11/21(火) 19:38:11.84ID:49Yzjg710
>>164
単に逆裏待遇を理解していないだけかと
2017/11/21(火) 21:45:55.72ID:vcSymdG+d
vbaを勉強中の者です。
市販で売られている本など調べても載っていないのですが、for文で使われる変数名が「i」ですが、なぜ「i」なのですか?
「i」の意味を教えて頂けませんか?

既出でしたらすみません
167デフォルトの名無しさん (ワッチョイ 02eb-Ti+n)
垢版 |
2017/11/21(火) 21:52:07.73ID:x41b941k0
>>166
iterationのiって事でいいじゃん
168デフォルトの名無しさん (ワッチョイ 46e9-IwP8)
垢版 |
2017/11/21(火) 21:58:13.94ID:49Yzjg710
>>166
>167の通りだけど、もう完全に形骸化している
「i」でもいいし「ページ番号」など日本語表記でもいい
ちなみに俺は「k」から「m」「l」「n」と続ける
単に見間違いにくいように
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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