1 名前:既定のプロパティさん mailto:sage [2012/01/29(日) 00:05:13.16 ] 01 pc11.2ch.net/test/read.cgi/tech/1054356121/ 02 pc11.2ch.net/test/read.cgi/tech/1168308855/ 03 pc11.2ch.net/test/read.cgi/tech/1180192018/ 04 pc11.2ch.net/test/read.cgi/tech/1189814602/ 05 pc11.2ch.net/test/read.cgi/tech/1197448064/ 06 pc11.2ch.net/test/read.cgi/tech/1205231499/ 07 pc11.2ch.net/test/read.cgi/tech/1212587819/ 08 pc11.2ch.net/test/read.cgi/tech/1219673793/ 09 pc11.2ch.net/test/read.cgi/tech/1228372971/ 10 pc12.2ch.net/test/read.cgi/tech/1235332603/ 11 pc12.2ch.net/test/read.cgi/tech/1241885130/ 12 pc12.2ch.net/test/read.cgi/tech/1247566074/ 13 pc12.2ch.net/test/read.cgi/tech/1254281104/ 14 pc12.2ch.net/test/read.cgi/tech/1262748898/ 15 pc12.2ch.net/test/read.cgi/tech/1271261239/ 16 hibari.2ch.net/test/read.cgi/tech/1280045912/ 17 hibari.2ch.net/test/read.cgi/tech/1289182437/ 18 hibari.2ch.net/test/read.cgi/tech/1298240666/ 19 hibari.2ch.net/test/read.cgi/tech/1305754555/ 20 hibari.2ch.net/test/read.cgi/tech/1312435844/ 21 hibari.2ch.net/test/read.cgi/tech/1316931607/ 前スレ: Excel VBA 質問スレ Part22 toro.2ch.net/test/read.cgi/tech/1322400978/
775 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 01:09:11.73 ] >>771 Set c = Worksheets("a").Range(Worksheets("a").Cells(1, 1), Worksheets("a").Cells(1, 2)) 又は Set ws = Worksheets("a") Set c = ws.Range(ws.Cells(1, 1), ws.Cells(1, 2))
776 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 01:12:44.97 ] できますたwwwwありがとお
777 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 01:52:04.45 ] 右クリックの動作を処理に応じて変えることはできませんかね? 例えば最初は通常の動作(ショートカットメニューを表示)、あるコマンドボタンを押してから右クリックすると条件付き書式設定のダイアログボックスを表示、また別のコマンドボタンを押すと通常のショートカットメニューに戻す
778 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 05:31:19.87 ] できます
779 名前:デフォルトの名無しさん [2012/03/21(水) 11:58:38.03 ] activecell.address で"$"つきの番地が得られます。 $なしの番地はどうすれば取得できるのですか? そもそもなぜ$サインがつくのでしょうか?
780 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 12:03:18.85 ] >>779 replace関数で"$"を""に置き換えるといいです
781 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 12:58:56.00 ] >>779 ActiveCell.Address(False, False) ヘルプを読めよ 式.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)
782 名前:デフォルトの名無しさん [2012/03/21(水) 14:58:10.99 ] >>780 ,781 Thnx
783 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 18:54:20.16 ] ちょっと教えてほしいのだが 引数明示して書くとき、例えば下のケースだが Range(Cells(1, 1), Cells(1, 2)).Replace what:="111", replacement:="", MatchCase:=False これはすべて小文字で入力したんだがmatchcaseだけ修正されるのはなぜなんだ?
784 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 19:23:14.78 ] >>783 仕様だから、としか答えようがない
785 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 19:53:58.40 ] >>784 ありがとう 謎仕様なんだな
786 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 22:16:41.56 ] Microsoftだもの
787 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 22:20:20.58 ] >>783 ホントだ、気持ちわりーな
788 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 23:26:12.89 ] MatchCaseにカーソル置いてF1押すと、Sort.MatchCase プロパティ が表示できる whatやreplacementだとキーワードが見つかりません。になる MatchCaseってプロパティと勘違いして補正されてると思われ
789 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 23:38:35.97 ] >>788 あーなるほど 理解した、ありがとう しかしこれ気になるよな ただ、直すのも面倒なんだよな
790 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 08:04:17.83 ] directXから音を鳴らしているのですが 音量を変えるにはどうしたらいいでしょうか up1m.ko.gs/src/koups1393.zip
791 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 14:09:48.74 ] >>790 >>2
792 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 15:08:59.92 ] >>778 遅くなりましたが出来ました。 もう一つ質問なのですがCtrlキーを押しながら任意のセルを選択した時、そのアドレスを全て取得するにはどうすればよいのでしょうか 例えば、A1、A3、A7、B1、B2、B4、C3、C4、C5を選択した時にこの9個のアドレスを取得したいのです
793 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 15:16:28.75 ] >>792 Application.Selection
794 名前:792 mailto:sage [2012/03/23(金) 16:17:34.92 ] >>793 わかりませぬ、具体的に教えて下さい。
795 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 17:27:44.81 ] debug.print application.selection.address
796 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 18:07:16.00 ] 条件付き書式を設定したセルをアクティブにして これ以外のシートの内容を下のマクロで消すと表示がおかしくなるんだけど なぜなんだ?? sub test worksheets(2).cells.delete end sub 条件書式以外にもindirectを使ったセルでもおかしくなる
797 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 18:11:20.36 ] worksheets(2)を参照してたからじゃないの?
798 名前:792 mailto:sage [2012/03/23(金) 18:16:57.46 ] Dim Sel_Addr As String Sel_Addr = Application.Selection.Address としたら取得できました。
799 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 18:35:18.85 ] いちいちそんな報告いらん
800 名前:デフォルトの名無しさん mailto:sage [2012/03/23(金) 18:54:15.56 ] >>797 参照って =Sheet2!A1みたいに使ってるかってことか? なら使ってない 表示がおかしいって書いたが、アクティブセルの囲い線が残るような感じ
801 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 07:44:03.99 ] >>800 単なるバグじゃないの? ScreenUpdatingをFalseにしてからworksheets(2).cells.deleteしたらいい
802 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 15:01:00.18 ] >>801 やっぱりバグなのかー ありがとう
803 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 16:18:46.43 ] formの表示中に自由にセルを選べるように したいのですが・・・
804 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 16:21:04.88 ] >>803 モードレスで開けばいい
805 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 16:21:48.60 ] vbModeless
806 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 16:26:46.00 ] >>804 Thnx モードレスで、表示すればよいのでは? UserForm1.Show vbModeless とか UserForm1.Show 0
807 名前:デフォルトの名無しさん [2012/03/24(土) 16:38:43.39 ] A1とかセルの座量をべた書きするんじゃねーよ セルに名前を付けて名前経由で座標を指定しろよ ソース解析&改造しててやりにくくてしかたない
808 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 16:49:06.55 ] 複数のCSVファイルを1つにしたくて 調べたら 以下のサイトが参考になったので ttp://ziddy.japan.zdnet.com/qa3168255.html?order=DESC&by=datetime Sub CSV結合() Const CRFILE As String = "C:\My Documents\test2" Dim obj As Object Dim arg As String Set obj = CreateObject("Shell.Application") _ .BrowseForFolder(0, "SelectFolder", 0) If obj Is Nothing Then Exit Sub arg = obj.self.Path & "\*.csv " Set obj = Nothing Call Shell(Environ("ComSpec") & " /c copy /b " & arg & CRFILE) End Sub とやっているのですがうまくいきません。 フォルダ選択の画面はでてくるのですが C:\My Documents\test2 に結合されたCSVファイルができるはずですが、できなくて。 ソース間違ってますか? エクセル2007です。
809 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 17:01:15.46 ] 書き出すファイル指定が間違ってるかと思い Const CRFILE As String = "C:\test2" Cドライブ直下にtest2フォルダ作ってみてもだめでした
810 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 17:07:43.90 ] Shell関数に渡しているコマンドライン文字列を確認したら? とりあえず、空白を含むパスはダブルクォートで囲まないと駄目だ。
811 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 17:15:53.57 ] >>808 Const CRFILE As String = "C:\My Documents\test2.csv" で出来たけど?
812 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 17:20:05.20 ] >>808 >>2
813 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 17:37:21.02 ] >>807 こめんなさい。心当たりが沢山ありすぎてもう…
814 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 17:41:43.68 ] >>810 コマンドライン文字列とはなんですか? 他にCSVファイルを2個作ってみたけどだめでした。 >>811 拡張子つけたけどだめでした。 >>812 XPでエクセル2007です ソースをステップ実行させても 全部の行を実行してるのに なんだろうこれは・・・
815 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 17:50:40.99 ] Const CRFILE As String = """C:\My Documents\test2.csv"""
816 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 17:54:23.10 ] > XPでエクセル2007です そう来るかw
817 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 18:38:25.29 ] >>814 >>2
818 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 19:20:45.41 ] >>775 これで指定したレンジ範囲の数値を、小さい順に並べた場合の各々の差が、x以上であるとかx以下であるといった判定をするにはどう書けばよいですか!
819 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 20:30:24.96 ] >>818 IsNumeric関数とIfステートメントを使う 詳細はヘルプを読めばわかる
820 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 22:05:47.67 ] isnumericじゃできなくね?
821 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 22:08:14.94 ] 数値かどうかの判定に必要だと思ったんだけど、不必要だと思ったなら使わなくても何ら問題ない 強制力なんかないからね
822 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 22:55:40.15 ] if a1>a2+x>a3+x thenが上手く動かないのだが、なぜか?
823 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 22:59:30.43 ] >>822 if a1>a2+x and a2+x>a3+x then
824 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 23:02:42.68 ] これがa3までじゃなくa100まである場合、どうすればいい?
825 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 23:04:33.81 ] 誤り if a1>a2+x>a3+x then 訂正 if a1>a2+x>a3+2x then
826 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 23:07:17.88 ] そうか全組み合わせの差の絶対値の最小値がx以上ならいいわけか しかしx以下の場合を求めたいときはどうすればいい?
827 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 23:08:16.93 ] 何だVBA力のおっさんか
828 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 23:13:47.11 ] >>824 VBAを使うしかないだろうな
829 名前:デフォルトの名無しさん mailto:sage [2012/03/24(土) 23:23:17.89 ] >>824 アンダースコアを使えばステートメントを複数行に分けて記述することができる 例えばこんな感じ If 条件式1 And _ 条件式2 And _ 条件式3 And _ 条件式4 And _ 既にスレチなので>>2 をよく読んでくれ
830 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 02:53:38.96 ] 例えば処理したい「実行1」というプロシージャがありあまして。 call 実行1 で普通に処理されるのですが。 Dim moji As string moji = "実行1" call moji は当然ですが実行されません。ですが、何かプロシージャそのものを変数化させて 状況に応じて呼び出せるようにする方法があるでしょうか? ユーザーフォームのリストボックスに何十種類ものプロシージャがあるのですが、それらを 効率的に場合わけして処理するのに、それが出来ると便利なのですが。 方法はないのでしょうか?
831 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 03:35:34.73 ] >>830 Application.Run ThisWorkbook.Name & "!" & moji 普通は Call ほにゃらら(moji) ってやって、ほにゃららの中でmojiによって分岐するようなプログラムを書くもんだけど
832 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 03:37:32.62 ] ifとかselectでそれらを場分けしてcallする処理を1個用意すりゃ良いじゃん つか普通そうする プログラミングの手法とかそういう話だから後はそういうスレで聞いてくれ
833 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 03:38:56.85 ] あ、リロードしないのが自分の悪いクセだな…
834 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 06:28:18.30 ] >>831 ありがとうございます。 >>832 実はそのように、select で、分岐していたんですが、数が多くなりすぎて。 ただ、selectの分岐がいくら多くなっても、速度とかに影響するという わけでもないので、良いといえば、良いのですが、スマートにできないかと 気になってしまいまして。
835 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 12:59:29.22 ] for i=1 to n if a(i-1) - a(i) <= x then y= false next I
836 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 15:22:52.17 ] a列とb列の相関を調べたい
837 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 15:31:17.78 ] VBA使う必要ないけど
838 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 17:04:00.73 ] 複数のCSVファイルをひとつのXLSファイルへまとめるにはどのようにしたら効率がよいですか? 20120201.csv 20120202.csv ・・・ 20120228.csv というファイルを201202.xlsファイルにまとめたいと考えています。 (シート名を01,02,・・・,28にして、1bookに28シートが出来上がるイメージ)
839 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 18:13:25.03 ] >>838 ご自身のコーディング速度と手作業での速度を比較してみればどちらが効率がよいか一目瞭然です 1回限りの作業であれば手作業でやるのが一番効率がよいでしょう ExcelVBAに関係がない話題なのでこのへんで終了
840 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 19:06:52.20 ] 配布物にExcelを利用したいのですが 配布物の中の別のファイルの情報を取得する場合 ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_140.html で相対パスだと危険があるとあったのですが ThisWorkbook.Path & "\..\date\ファイル名" のようなやり方だと階層をまたいでも中をいじられない限り どんな環境の人が使っても問題ないと思っていいのでしょうか それと、相対パスで一つ上の階層に行くやり方で Dim mPath As String mPath = ThisWorkbook.Path i = Len(mPath) - Len(Replace(mPath, "\", "")) If i > 1 Then mPath = Mid(mPath, 1, InStrRev(mPath, "\") - 1) End If というやり方が紹介されていたのですが これは..に対して上に階層があるのか調べる機能が付いただけ という認識でいいのでしょうか
841 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 19:18:37.85 ] >>840 お前の認識間違えてるぞ アホ ちゃんと読め
842 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 19:18:46.91 ] >>840 すべてにおいて見当違い 手始めに「相対パス」がなんなのか理解してきた方がいい
843 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 20:40:54.08 ] >>839 一回限りの作業ではなく、毎月発生する作業です。 現在は 新しいブックに開く→シートの移動 を繰り返すコードにしてるのですが、 見るからに効率が悪くなっています。
844 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 20:51:07.07 ] >>842 相対パスって基準から見た位置ですよね URLのは基準を指定しないとカレントフォルダからになるから危なくて ThisWorkbook.Pathで基準をブックのある位置を指定すれば問題ないのかなと思ったんですが
845 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 20:57:55.20 ] >>843 検索すれば、参考になるコードいくらでも出てくるだろ。 Dir 関数使えばいいんじゃない。
846 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 21:37:10.43 ] >>843 見るからに効率が悪いことに気づいてるんだったら改善すればいい
847 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 21:37:33.36 ] >>844 「危ない」とか「問題」ってのは具体的にどういうことなの? 具体的に説明してくれないと誰もわからないよ
848 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 21:55:49.31 ] >>843 QueryTables.Add使え
849 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 22:44:15.07 ] >>847 「絶対的基準に基づいてないから危ない」とか言い出すぞw
850 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 22:54:44.01 ] >>844 もう一回お前のリンク先読み直してから来いよ 音読な
851 名前:デフォルトの名無しさん mailto:sage [2012/03/26(月) 01:01:30.47 ] >>838 ,840 Excelどうこうよりも、まず日本語の読み書きを勉強した方がいいと思う 社会人になってから苦労するよ?
852 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 16:27:18.20 ] EXCEL VBAは基本的にはオブジェクト指向言語。 だからJAVA, C++と同様にクラス間の継承もあるが、EXCELで予め定義された 既存のクラスのみでその関係があり、↓ここを見るとプログラマが定義する マクロのクラスで、継承関係にあるものを作ることはできないみたい。 members3.jcom.home.ne.jp/daruma_kyo/aboutooa/vba_limit.html 既存のクラスの継承関係。例えば、collection WorkSheets,Chartsは、 collection Sheetsを継承している。 ActiveWorksheetでその時にカーソル(focus)を当てているものを示す、 property Selection。 その時にカーソルを何に当てているかによって、Selectionのクラスが、 Range, Shape, ChartAreaなどに変化しているみたい。 このproperty Selectionを定義しているクラスは、多分、あらゆるクラス の継承元になっているclass "Object"でないかと思っていますが、 どうなんでしょうか。
853 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 16:48:39.95 ] >>852 オブジェクトブラウザというものがある
854 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 17:19:20.10 ] 複数の行の挿入が面倒くさかったのでVBAを学んでみようと思ったのですが試しに作ったマクロが Sub 行の挿入() Dim i As Integer i = 1 Rows("i:2").Insert Shift:=xlDown End Sub 型が違うと出てきます iの定義が間違ってるのかと思うのですが LongやVariantなども試したもののだめで、整数値で型が違うといわれるのもなぜかわかりません 初歩的で申し訳ないですが教えてください
855 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 17:40:07.26 ] >>854 “Rows”の上にカーソルを置いて[F1]キーでヘルプを開いて読め
856 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 17:58:53.56 ] >>855 できました ありがとうございます
857 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 21:51:31.61 ] >>852 >EXCEL VBAは基本的にはオブジェクト指向言語。 VBAはもともとオブジェクト指向ではない言語をオブジェクト指向に拡張した言語(の派生) オブジェクト指向言語だと言いきるには不備が多い >既存のクラスの継承関係 基本的に継承関係は保障されているわけではない(と思う。保障されてるならソース教えてくれ) つまり(Setによる代入で)キャスト出来るかどうかは実行してみないと解らない >ActiveWorksheetでその時にカーソル(focus)を当てているものを示す、property Selection。 ActiveWorksheetなんてクラス(型)はない。WorksheetにはSelectionなんてプロパティはない >Selectionのクラスが、(略)変化しているみたい。 Selectionなんていうクラスも無いのは理解できてるのか? (Windowクラスの)Selectionの戻り値の型について、Object型で実際はいろんな型が戻されるんだぞ >このproperty Selectionを定義しているクラスは、 Selectionなんてクラスはないし、Selectionプロパティを実装(定義)してるクラスはどんな型だろうと関係ない 問題はSelectionプロパティ(の戻り値)の型 >あらゆるクラスの継承元になっているclass "Object"でないかと思っています VBAにはObjectという型はあるが、Objectクラスというクラスはない(はず) Object型にはあらゆるクラスが格納できるが、それは全てのクラスがObjectから派生してることを意味しない なぜならVBAは純粋なオブジェクト指向言語ではないから
858 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 11:52:43.27 ] >>857 > 基本的に継承関係は保障されているわけではない(と思う。保障されてるならソース教えてくれ) > つまり(Setによる代入で)キャスト出来るかどうかは実行してみないと解らない できない例は?
859 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 14:59:45.96 ] >>>857 class, object, collection, propertyの概念の区別がきっちりできていな いです。 >>Selectionなんてクラスはないし、Selectionプロパティを実装(定義)してるクラスはどんな型だろうと関係ない object browserで見ると、Selectionはobject Applicationとobject Windows のmember(property)になっているみたいです。 これのヘルプを見る。 >>Property Selection As Object 読み取り専用 >>Selection プロパティ >>Application オブジェクトでは、アクティブウィンドウで現在選択されて >>いるオブジェクトを返します。 >>Windows オブジェクトでは、指定されたウィンドウで現在選択されている >>オブジェクトを返します。 >>オブジェクト指向言語だと言いきるには不備が多い ↓参考 sites.google.com/site/compositiosystemae/home/vbaworld/upper/exp3/polymorphi VBAのclass moduleでクラスを定義するとき クラスの構築子(constructor)に当たるもの Class_Initialize() クラスの消滅子(destructor)に当たるもの Class_Terminate() 構築子の引数はサポートされていない。
860 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 16:13:38.21 ] >>859 > class, object, collection, propertyの概念の区別がきっちりできていな > いです。 できてないのはお前だけじゃないの?
861 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 16:32:30.71 ] なんかVBAがオブジェクト指向的に駄目だ駄目だって言う奴多いけど、 適切なところでclassモジュールを使って、VBAで使える範囲の機能を 使えばいいのにっていつも思う。 とか言うと、VBAじゃ適切なところなんてない的な話になりがちな気がするが。
862 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 16:36:41.16 ] この手の話を質問スレでしないで欲しい 自分の中で答え持っててそれを主張するだけなんだから
863 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 16:57:49.74 ] VBAスレはここだけしかないんだから、ここでいいだろ
864 名前:862 mailto:sage [2012/03/28(水) 17:07:48.32 ] あ、これ質問だったのか ごめんよく読んでなかったは
865 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 17:23:26.77 ] ガキはすっこんでろ。
866 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 23:12:36.94 ] >861 はげどう。 継承だって工夫すればできるし、 コンストラクタの引数がないのも特別不便ではない。
867 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 23:31:02.19 ] オブジェクト指向厨は市ね。 VBAごときの小規模アプリに オブジェクト指向など無用だ。
868 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 23:33:47.05 ] 工夫した継承はコード量が多く、結局オブジェクト不志向(データ志向っての?)に落ちついてしまう って事があったなーと、ふと思い出したっす。
869 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 23:45:10.16 ] ツールバー追加のマクロを組んだのですが、ブックを閉じるときに ツールバーを削除しようとするとエラーが出ます。 原因をご教示下さい。 コードは長くなるので分けて書き込みます。
870 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 23:48:22.21 ] Private Sub Auto_Open() Dim xlAPP As Application Dim objBar As CommandBar Dim objCont As CommandBarControl Dim objBtn As CommandBarButton Dim vntCaption As Variant , vntTipText As Variant , vntOnAction As Variant Dim IX As Integer Dim blnTRUE As Boolean Set xlAPP = Application vntCaption = Array("登録(&A)", "更新(&U)", "削除(&X)") vntTipText = Array("登録を行ないます", "更新を行ないます", "削除を行ないます") vntOnAction = Array("BTN_TOUROKU", "BTN_KOUSHIN", "BTN_SAKUJO") Set objBar = xlAPP.CommandBars.Add(Name:=g_cnsTITLE, Position:=msoBarTop) blnTRUE = False For IX = 0 To 2 Set objCont = objBar.Controls.Add(Type:=msoControlButton) objCont.BeginGroup = blnTRUE ' CommandBarButtonオブジェクトの参照を取得 Set objBtn = objCont objBtn.Style = msoButtonCaption objBtn.Caption = vntCaption(IX) objBtn.TooltipText = vntTipText(IX) objBtn.OnAction = vntOnAction(IX) blnTRUE = True Next IX objBar.Visible = True objBar.Protection = msoBarNoChangeVisible ActiveWindow.ScrollRow = 1 Set objBtn = Nothing Set objCont = Nothing Set objBar = Nothing End Sub
871 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 23:50:44.42 ] ' 閉じる時の自動実行処理 Private Sub Auto_Close() Dim xlAPP As Application Dim objBar As CommandBar Set xlAPP = Application ★Set objBar = xlAPP.CommandBars(g_cnsTITLE) objBar.Delete Set objBar = Nothing End Sub ★の部分で 実行時エラー'5': プロシージャの呼び出し、または引数が不正です。 となります。原因と対策をご教示下さい。
872 名前:デフォルトの名無しさん mailto:sage [2012/03/29(木) 00:07:11.46 ] >>871 g_cnsTITLEに該当するツールバーがないんじゃない?
873 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/29(木) 00:17:48.05 ] >872 直接ツールバー名を指定したら無事動きました。 ありがとうございました。
874 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/29(木) 10:35:16.91 ] >>868 Strategy Patternとか超便利なんですけど。
875 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/02(月) 20:03:26.77 ] 動的に作成したCommandButtonにクリックイベントを 登録するにはどうすればいいの?