1 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:05:30 ] Excelの「VBA」に関する質問スレです 前スレ pc12.2ch.net/test/read.cgi/tech/1235332603/ ★1 質問をするときはOSとExcelのバージョンを必ず書きましょう ★2 わからなければとりあえず「マクロの記録」をしてみましょう ★3 丸投げのプログラム作成依頼は受け付けていません ★4 VBAを使わない、Excelの使い方に関する質問はスレ違いです Excel総合相談所 82 pc11.2ch.net/test/read.cgi/bsoft/1241825062/
2 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:06:41 ] 過去スレ 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/
3 名前:デフォルトの名無しさん [2009/05/10(日) 02:30:44 ] 卒研でVBAを使用することになったんですがお勧めの初心者向けのテキスト(教科書)教えてくれませんか? 当方一年授業で学んでオセロつくったくらいです
4 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 05:12:26 ] ★5 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Application』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。 ★6 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★7 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
5 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 05:27:12 ] >>4 は同意されたものではないので、無視してかまいません。
6 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 07:23:15 ] >>4 に同意する
7 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 08:46:57 ] ★7は必須だろ
8 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 09:03:06 ] >>4 ExcelVBAからADOを使ってmdbのデータを読む、なんてのは含まないんだね
9 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 09:20:46 ] APIの話も、Excelから呼び出すなら良いと思うけどな。 具体的なAPI詳細とかなら、専用スレに誘導すりゃ良いし。
10 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 19:54:55 ] EXCEL2003とXPを使用しています デバッグのステップインでF8を押して進めるとすべて問題なく処理が完了するのですが マクロの実行でやると 実行時エラー424オブジェクトが必要です という物が表示されてしまいます 何処の変数がオブジェクトにしないといけないとか判断する方法はないでしょうか?
11 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 22:15:31 ] 「実行時エラー424オブジェクトが必要です」 って表示された時に処理止まっているんじゃないの?
12 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 23:04:45 ] デバッグのF8連打のステップインの時は全く問題なく終了(ループ)するんですよ、、、、 実行でもたまに上手くいくんですが大半がエラー424になって なんでデバックだと上手くいくのに実際だとエラーが出るんだろ、、、、と思いまして
13 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 23:27:43 ] ブレイクポイント入れてないのに勝手に止まったりすることあるよ こまかいことは(ry
14 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 23:44:49 ] スクリプトうpれ
15 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 03:27:13 ] 通信に関係あるプログラムじゃね?WEBとかデータベース鯖とか。 相手の準備が出来たかどうか、データの取得が完了したかどうか ちゃんとステータスチェックせずに次に進むと成功したり失敗したりするし、 F8連打だとそれだけで時間稼ぎになるから失敗しにくくなる。
16 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 04:58:31 ] 処理が止まった行の xxx.Value = yyy または yyy = xxx.Value のxxxに問題あり?
17 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 07:31:15 ] >>10 あるねぇ >>15 の通り、相手の準備が出来てないっての。通信に限らずオブジェクトの描画か何かでも起こった気がする ループ使ってるならloopやnextの上の行辺りに Sleep 100 とか入れて見ると解決した気がする ループじゃなければちとわからん
18 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 10:23:34 ] 初心者丸出しのコードでもいいでしょうか?
19 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 10:46:03 ] Sleep 100とか入れちゃう初心者じゃなければいいよw
20 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 10:46:06 ] 友人の持って来たノートPC、XP,Office2000だと 実行を40回ループさせても実行時エラー424オブジェクトが必要です って表示されない、、、、 OFFICE2003が何か悪さしてるのかな、、、、
21 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 10:46:22 ] >>18 = >>10 か? どんな行で止まったかだけでも分からないと推測で答えるしかない
22 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 11:13:53 ] >>21 はい昨日424エラーが出ると言った者です 皆さんの予想通りWEBにアクセスしてデータを持ってくるという物を作ろうとしています エラーが出るところは行はランダムなのですが Set IE = CreateObject("InternetExplorer.Application") 'ココ IE.Visible = False 'ココ If CODE = "" Then MsgBox "コードがありません" Exit Function Else TARGETURL = "stocks.finance.yahoo.co.jp/stocks/detail/?code= " & CODE IE.Navigate TARGETURL While IE.busy = True Or IE.readyState <> 4: DoEvents: Wend 'ココ Set objTableItem = IE.document.GetElementsByTagName("TABLE") CLOSEPRICE = objTableItem.Item(0).innertext AccessYahoo = GetCloseData(CLOSEPRICE) 'Debug.Print CLOSEPRICE End If 'ココと書いてある IEオブジェクトを触ろうとすると出るということがわかりました
23 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 11:24:34 ] あー自分も同じような事をしてるよ!w うちはXPでOffice2000なんだけど・・・ Officeのバージョンとかは特に関係なくてIEが立ち上がりきっていない場合にそういうエラーでますよ。 自分はエラーハンドラで回避しているけどね。
24 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 12:40:48 ] OfficeよりもIEのバージョンのほうが問題か? IE7だと重くて起動遅いとか
25 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 16:47:43 ] IE7というより自マシンの環境によるんじゃないのか?
26 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 17:02:44 ] >>23 ありがとうございます エラーハンドラーっていうのがあるんですね ちょっと調べてみようと思います 512MBのメモリのとき妙に424エラーとメモリ不足ですというのがでて 友人の2GBでは何もエラーをはかずに処理が終わる 1GB借りて512MB→1GBにしてみるとなぜか424エラーは出なくなった、、、、 気持ち悪いけどメモリ増やすと問題なく動くみたいです
27 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 17:13:16 ] >512MBのメモリのとき妙に424エラーとメモリ不足ですというのがでて 424はよく分からんがメモリ不足は後始末がちゃんとできてないと起こりやすいな Set XXX = ○○と書いたらSet XXX = Nothing で開放しとかないとだめ 同じ変数にSetしなおしても上書きはされずにメモリを掴んだままになるらしい やってるよな?
28 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:05:50 ] Set XXX = Nothingって処理が終了すれば自動解放されるからなくても大丈夫だけどね
29 名前:デフォルトの名無しさん [2009/05/11(月) 18:10:04 ] 起動時に全シートの固定行数(SpritRowプロパティ)を求めているのですが、 グラフ等がアクティブになっているとプロパティ無しエラーになります。 On Error 以外で シートがアクティブになっているかどうかを判定する方法が ありますでしょうか?
30 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:14:19 ] >>28 そう思って書かないことが癖になると危ないと思うんだがw っていうかあの時はマジでやばかった(謎
31 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:18:25 ] >>29 TypeName(Selection) でどうかな?
32 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:28:39 ] >>31 素早い対応、有難うございます。
33 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 18:59:21 ] >>27 確かに Set IE = CreateObject("InternetExplorer.Application") のあとに解放せずに 何十回もAccessYahoo(コード番号)で呼びまくってました よくない癖は早めに直さないといけないですねありがとうございます
34 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 20:46:02 ] IEをCreateObjectしてURLを開くのと Workbook.Open Filename:=URLで開くのは どこが違うんだろうか
35 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:40:54 ] IEはQuitしてやらんと、終了しないだろ 非表示のIEがいっぱい残ってるんだろ ttp://www.forest.impress.co.jp/article/2006/02/06/okiniiri.html これで一覧してみな
36 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:52:38 ] >>35 XP,Office2003で確認してみたのですが 2003はIE.quitをしなくても 自動的に消えてくれるようです 2000でも使う可能性があるのででIE.quitをAccessYahoo(コード番号)の最後に追加しました ありがとうございます IE.Quitはvisible をFalseにしたら不必要だと思ってました
37 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:12:19 ] >>36 ウィンドウを閉じる(終了する)のと見えなくするのは違うぞ。 プロセスはちゃんと終わらせなきゃいけない。
38 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:24:47 ] >>36 解放で自動的に消えてくれるかどうかは、officeやosのverより、 むしろieのverによると思うけど、うちのie8では消えないみたいよ 消えたかどうか何で確認してるの? >>37 ieはプロセスに同居するから、インスタンス
39 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:57:57 ] >>38 >>35 さんが教えてくれたMenuBar.HTAで確認してみました
40 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 12:55:01 ] VBAでフォームだけ入力することは可能でしょうか? やりたいと思っていることは ログイン、画面推移までは自分でIEを立ち上げて手入力でして チェックボックスやテキストボックスにはVBAの入力ボタンを押すと自動的に 入力されてsubmitし最終確認画面が出るようにしたいと思っています 現在IEで表示している画面の要素をIEオブジェクトに取り込むということはできるものでしょうか?
41 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:30:20 ] >>40 SendKeysとか使うくらいしか思いつかんな
42 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:30:46 ] 再読込するから無理だった気がする
43 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 14:07:50 ] ありがとうございます なさそうですか、、、 最初からVBAでIE立ち上げて ログインする際にID、PASSを入力待ちで手入力にして最終確認画面でmsgboxだして投稿するような方法の方が簡単そうですね
44 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 17:03:24 ] VBAじゃなくてVBScriptでIDとPWが入力された状態で表示させることもできるけどね
45 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 17:17:07 ] IDとパスワードはフォームに入力して、それをSendKeysで送ればいいと思う
46 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 17:43:25 ] ごめん 42 です。 できるかも! 参考までにソース挙げます。 Yahooページ立ち上げておいて・・・こんな感じで・・・ Dim objIE As Object 'IEオブジェクト参照用 Dim objShell As Object Dim strURL As String 'URLの文字列 'IEのオブジェクトを作る Set objIE = CreateObject("InternetExplorer.application") Set objShell = CreateObject("Shell.Application") For Each objWindow In objShell.Windows If objWindow.LocationURL = "www.yahoo.co.jp/ " Then objWindow.document.sf1.p.Value = "VBA" End If Next Set objIE = Nothing Set objWindow = Nothing
47 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 17:55:25 ] もうちょっと推敲しろよ
48 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 21:28:22 ] 質問です。 shell関数でIEを全画面サイズで開く処理を行うと、 会社のPCだと、どうしても全画面で開けません。 最小化でも開けず、ただ適当なサイズで開いてしまうんですが、 何かサイズ指定が不可能になる条件ってPC側にあるんでしょうか? OSはXP、MSは2002です。
49 名前:デフォルトの名無しさん [2009/05/12(火) 21:57:36 ] 教えてください Excel2003で、セルを右クリックして出るポップアップメニューに 独自メニューを加えたいのですが、最初のシートには 追加できたのですが(下参照)、2枚目以降のシートのセル+右クリックでは 追加メニューが表示されません すべてのシートのセルの右クリックポップアップメニューに独自メニューを 追加する方法またはある特定のシートのセルの右クリックポップアップメニューに 追加する方法はありますでしょうか? よろしくお願いいたします Public Sub CreatePopUp() Dim fBar As CommandBar Dim fBtn As CommandBarButton Set fBar = CommandBars("Worksheet Menu bar").CommandBars("Cell") fBar.Reset '初期化 Set fBtn = fBar.Controls.Add(msoControlButton, Temporary:=True) fBtn.BeginGroup = True '新しいグループにする fBtn.Caption = "変更" fBtn.OnAction = "Modify" Set fBtn = Nothing Set fBar = Nothing End Sub
50 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:22:39 ] 適当だけど 標準モジュールの一番上に記述 Public Declare Function GetAsyncKeyState Lib "User32.dll" ( _ ByVal vKey As Long _ ) As Long Public Const VK_RBUTTON = &H2 '[RightClick] Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 適応したいシートに記述 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If GetAsyncKeyState(VK_RBUTTON) Then Dim fBar As CommandBar Dim fBtn As CommandBarButton Set fBar = CommandBars("Worksheet Menu bar").CommandBars("Cell") fBar.Reset '初期化 Set fBtn = fBar.Controls.Add(msoControlButton, Temporary:=True) fBtn.BeginGroup = True '新しいグループにする fBtn.Caption = "変更" fBtn.OnAction = "Modify" Set fBtn = Nothing Set fBar = Nothing End If End Sub
51 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:36:02 ] >>48 ie側の問題だと思う iexplore -nohome だと効くみたいだけど
52 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 22:50:59 ] >>51 そうなんですか。。。 ありがとうございます。
53 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 12:54:29 ] msgboxのYES,NOをすべての最前面に出す方法はないでしょうか? VbMsgBoxSetForegroundが最前面表示とあるので MsgBox("確認", vbYesNo, vbMsgBoxSetForeground) としてみたのですが VBA実行→IEが立ち上がる→確認がIEの後ろに隠れてしまう (奥からエクセル、確認msgbox、IEの順になってしまう) VBA実行→IEが立ち上がる→確認がIEの手前で 奥からエクセル、IE、確認msgboxの順になるようにしたいと思っています
54 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:12:06 ] + vbSystemModal
55 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:31:48 ] >>53 APIでエクセルをアクティブにしてからメッセージボックスを出すとか
56 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 15:55:24 ] ★5 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Application』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
57 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 16:08:53 ] MsgBoxについての話はスレ違いか? vbSystemModal使うと「メッセージ ボックスに応答するまで、すべてのアプリケーションが中断されます。」 だから都合悪いかもしれないと思ってAPI使うってアクティブにする案を出したんだが・・・ APIの使い方がわからないって言ってきたらググレカスとでも言っておくがなw
58 名前:57 mailto:sage [2009/05/13(水) 16:10:07 ] 訂正 × API使うってアクティブにする ○ API使ってアクティブにする
59 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 16:36:25 ] 要件満たさんだろ
60 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 19:39:10 ] そもそもアクティブにするのと最前面にするのは違うし。 おかげでボタンが押せなくて操作不能になるアプリがたまにある。
61 名前:デフォルトの名無しさん [2009/05/13(水) 21:37:14 ] >50 お返事ありがとう その方法でもメニューが追加されるのは一枚目のシートだけ見たいです 具具っても見当たらないんですよね
62 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:07:23 ] >>49 いま手元にExcelが無いのであれだが ' Set fBar = CommandBars("Worksheet Menu bar").CommandBars("Cell") Set fBar = Application.CommandBars("Cell") で どうかな?
63 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:13:16 ] セルに色が設定されていない状態のcolorIndexは何でしょうか? If Worksheets("Sheet1").Cells(1, 1).Font.ColorIndex <> 2 Then MsgBox "color" End If みたいに書いているんですが、bookを作った最初の状態は、白ではなく、色が未設定の状態だと思うんですが。。。
64 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:16:58 ] xlColorIndexNone ですかね。
65 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:19:21 ] Interior.Colorindex= 0 fontではなくInteriorです!
66 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:23:50 ] ありがとうございます! 0でもxlColorIndexNoneでも同じって事ですか? fontとInteriorはコピーする箇所を間違えました;
67 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 23:49:08 ] 例えば、 Range("A1").Activate Activecell.Interior.Colorindex=0 Msgbox Activecell.Interior.Colorindex Activecell.Interior.Colorindex=xlNone Msgbox Activecell.Interior.Colorindex Activecell.Interior.Colorindex=xlColorIndexNone Msgbox Activecell.Interior.Colorindex Activecell.Interior.Colorindex=xlColorIndexAutomatic Msgbox Activecell.Interior.Colorindex とかすると面白い?
68 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 01:13:52 ] xlNoneは-4142だから0とは違う
69 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 12:35:39 ] -4142 -4142 -4142 -4105 になったぞ by Excel97
70 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 19:53:45 ] スイマセン、ローカルにコピーしたロータスノーツのファイルにアクセスする方法について教えていただきたいのですが・・・ あと、VBAの設定で参照可能なライブラリファイルにチェックを入れとけばいいんですよね?
71 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 19:47:16 ] オブジェクト型変数には、オブジェクト自身ではなく、オブジェクトの情報を呼び出す為の番号(参照)が入る。 って、要するにポインタのことですか?
72 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 20:27:27 ] 参照です。
73 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 20:34:09 ] 大まかには合ってるんじゃない? とりあえず、他の変数に代入してもオブジェクトそのものは 複製されない事だけ把握しとけばOK。
74 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 20:46:14 ] 実態をコピーせずに何らかの番号で区別するって意味では合ってるかもしれないけど やっぱり参照とポインタは微妙に違う 狭い意味だとポインタはアドレスのことだったりもするし あとは実装次第だ
75 名前:71 mailto:sage [2009/05/16(土) 21:09:11 ] >>72-74 ありがとうございます。
76 名前: ◆aAB/3SgCFU mailto:sage [2009/05/17(日) 13:44:16 ] 自分が使っているテキストでは、下のプログラムを実行すると、 シートの行と列全てがアトランダムに塗りつぶされるはずなのですが、 実際にやってみても、全列の1行目しか塗りつぶされません。 どこかおかしいのか、教えていただけませんか? Option Explicit Sub 画面更新() Dim i As Integer Application.ScreenUpdating = False Rows.ColumnWidth = 1.75 For i = 1 To 6000 Cells(i).Interior.ColorIndex = Int(Rnd * 56) + 1 Next i MsgBox "これから更新します。" Application.ScreenUpdating = True MsgBox "更新終わりました。" End Sub
77 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:13:56 ] >>76 Office2007で利用可能な桁数が大幅に増えた(16384?)のが理由。 桁数が最大256桁とか決めうちしていると、こういうことになる。
78 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 14:14:38 ] Cells(i). が原因だね。 cells(row,column) で指定しないと。
79 名前: ◆aAB/3SgCFU mailto:sage [2009/05/17(日) 19:32:56 ] >>77-78 どうもありがとう
80 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 07:30:50 ] 質問です VBAで他のアプリケーションを開くまでは色々ググって出来たんですが そのアプリが閉じられたら、再びVBAに処理を戻したいんです。 今はファイル名のリストがフォーム上に有ってその名前で検索したファイルを開くという作業で一太郎やワード等を ShellExecuteで開くというの作ったんですが 開いたファイルが閉じられたら更新日時を調べて変化が有れば書類の板番号を更新したいんですが いつ閉じられたかも解らないし、ファイルを開いて処理が中断し閉じて再開すると言った事は不可能でしょうか?
81 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 09:09:25 ] >>80 それはアプリの終了よりもファイルの更新を調べた方がいいのでは。 VBAで1秒間隔のタイマーをセットして、ファィルのタイムスタンプを1秒おきに調べるみたいな方法なら すぐに思い付くけど。
82 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 12:00:46 ] >>81 わかりました それで行きます
83 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 13:17:19 ] えっ、それでいっちゃうの?
84 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 13:20:12 ] 行くって言ってるだろ
85 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 14:53:02 ] だって 思い付かないんだもん
86 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 16:03:24 ] OpenProcess()してWaitForSingleObject()するのは駄目なのか?
87 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 16:06:00 ] dirname/filea.ext dirname/fileb.ext があったときに、".ext"に関連づけられているsomeapp.exeを起動したとき、 fileb.extもsomeapp.exeで更新している可能性があるので、 プロセスの終了を待ち合わせて、dirname/*を全検索して情報を更新するのが一番。
88 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 17:00:13 ] ファイルを閉じて、アプリは閉じないかもしれない
89 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 17:19:47 ] ROTにファイルがあるかチェックすればよい
90 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 19:17:48 ] line input 命令で chr(&h0) の入ったレコードを読み込むと強制的に chr(&h20)に置き換えられるのでしょうか? もしそうでしたら、何らかの回避方法を教えていただきたいのですが・・・
91 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 20:21:34 ] バイナリで読め
92 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 11:12:20 ] >>86 試して見ましたが ファイルが開き終わるとwaitが終了し次の処理に移ってしまうようで上手くいきませんで filepath="sample.txt" CreateObject("WScript.Shell").Run FilePath, vbNormalFocus, True MsgBox FilePath & "が閉じられました。", vbInformation Or vbSystemModal これで済ませました お騒がせしました
93 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 12:11:15 ] ワークシートのmodと異なり、VBAのmodは小数点下が切り捨てられてしまいます。 小数点下を含む剰余を返すようにしたいのですが、ワークシートのmodは演算子だから application.mod()とは出来ない。 良い方法はありますでしょうか?
94 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 14:33:35 ] 小数点下は元の数と同じな気がする
95 名前:93 mailto:sage [2009/05/19(火) 15:32:48 ] >>94 分母が整数なら・・・。 x mod yの場合、x - Int(x / y) * yで良いのかなぁ。
96 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:18:52 ] x - (x \ y) * y だとどうだろう
97 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:45:17 ] 顔文字かと思った
98 名前:デフォルトの名無しさん mailto:sage [2009/05/19(火) 22:52:54 ] >>96 たばこを吸うバルタン星人ですよね???
99 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 15:37:42 ] すいません、WindowsXP SP3、Excel2003での質問なんですが、 VBAを使って罫線ツールバーの「罫線を作成」機能(セルの枠線にそってクリック・ドラッグで罫線を引く) と同じことをするのは可能でしょうか?
100 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 17:04:50 ] >>99 罫線を引きたいセルを選んでVBA実行して罫線が引かれるっていうのならできるんじゃね