[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 07/26 10:23 / Filesize : 199 KB / Number-of Response : 675
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

VB.NET質問スレ(Part30)



1 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 10:00:19 ]
前スレ

VB.NET質問スレ(Part29)
pc12.2ch.net/test/read.cgi/tech/1235206416/l50

テンプレは>>2

620 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:11:39 ]
その固有のメッセージってのはアプリのインストール後にテキストエディタとかで修正したりするモンなの?

621 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:15:49 ]
VB2008EEでExcelにデータを書き出すソフトを作っています。
使う人によってExcelのバージョンがまちまちなのでCOMは使わず以下のような感じです。

Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object

xlApp = CreateObject("Excel.Application")
xlBook = xlApp.Workbooks.open(パス)
xlSheet = xlBook.Worksheets(1)

xlSheet.Cells(1, 1).Value = "あああ"    '※1
xlSheet.Cells(1, 2).Value = "いいい"    '※2

xlApp.DisplayAlerts = False
xlBook.Save()

xlBook.Close()
xlApp.Quit()
xlSheet = Nothing
xlBook = Nothing
xlApp = Nothing
GC.Collect()

データを入力する部分で、※1だけなら問題ないですが※2を追加するとプロセスが残ってしまいます。
何が原因なのでしょうか。
開発環境のExcelは2000です。

622 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:24:44 ]
思いっきりCOM使ってるよそれ
vb.net excel プロセス でググるといろいろ出てくる
ちゃんと作るのは非常に面倒だからそこだけWSHのVBSなんかで書いてもいいよ

623 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:42:22 ]
>>619
情報ありがとうございます。
試してみます。

>>620
テキストファイルで修正できることを前提にしています。
開発終了後にそんな日が来るとは思いませんが、
どっかのエロいアーキテクトが書いたらしい規約に従う必要があるので……

624 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:45:48 ]
>>622
レスありがとうございます。
COM参照を先にするかあとにするかだけで処理は一緒って認識で合ってますか?オブジェクト使う度に解放が必要と。
WSHは使ったこと無いので調べてみます。

625 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:49:39 ]
いやGCに頼るのは不確実だからMarshal.ReleaseComObjectを使って
必ず逐一全て手動で解放する必要がある

626 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:07:25 ]
>>616
ソリューションファイルを開いたときに、New Excel.ApplicationやExcel.Workbooksの所に波線が引かれ、コンパイルができないのです。

>>617
dllが存在しないと、参照設定のExcelとかInterop.Microsoft.Office.Coreのところに三角のマークが出るような気がしました。
確かに全てのファイルを表示にはしていなかった可能性があるので、obj配下にdllが存在しなかったのかもしれません。

627 名前:606,626 mailto:sage [2009/07/25(土) 23:12:27 ]
参照設定のExcel等の所に三角マークが出ていなかったので、Interop.Excel.dll等は存在するものと思ったのです。

628 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:17:26 ]
>>625
できました。ありがとうございました。
ちなみに>>621はMSのサンプルを真似たものなんですが、結局全然違うコードになりました。
あのサンプルは一体何だったんでしょうか…。



629 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:22:08 ]
>>626
それ一番最初に書くところ
みんな実行時だと思ってたんだから

でね、それは単に参照が無いだけだから

630 名前:606 mailto:sage [2009/07/25(土) 23:26:56 ]
>>629
ありがとうございます。

プロジェクトのディレクトリごとコピーしているので、obj配下にdllはあるのではないかと思います。
参照設定でも三角マークは出ていませんし。
全く同じコードをプロジェクトごとコピーしたのに、端末によってコンパイルができない理由がわからないのです。

631 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:00:18 ]
>>630
あーもう
じゃ「参照が有効になってない」って言えばいい?
一度参照削除してもう一度登録しなおしてみ?

632 名前:606 mailto:sage [2009/07/26(日) 00:15:33 ]
>>631
どうもです。

一度参照設定のExcel等を削除して登録し直したのですが、それでも駄目でした。
どうも端末依存でアセンブリの問題があるらしいので、それが原因のような気もしているのです。

他の人も逆に私がコンパイルできない端末でないとコンパイルできないようなことを言っていたし、
端末固有の設定がおかしいのかもしれません。

633 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:25:12 ]
2003時代にエクセルを参照したプロジェクトを複数の開発環境に持ってくことを
何度かやったことがあるけどそんな問題は起こった記憶がないな。

まさかとは思うけど、

(1) 環境ごとにエクセルのバージョンが違う
(2) エクセルそのものがインストールされてない

なんてことはないよね?

634 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:34:48 ]
>>633
ありがとうございます。

エクセルはインストールされていて、両方2003だったと思います。
コンパイルできない端末には確かFlex Gridがインストールされているなど、特殊な設定がなされているのです。
自宅では問題なくコンパイルできていますし、やはり端末依存の問題なのかもしれません。

Marshal.ReleaseComObjectを使っても逆に不安定になったりするし、.NETからエクセルを動かすのは難しいなぁ。

635 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:48:31 ]
あー
それは複数のassenblyファイルがある場合だわ
消したらいいよ。

636 名前:550 mailto:sage [2009/07/26(日) 01:14:25 ]
>>598
それよさそうですね。
ちょっと試してみようと思います。
ただ問題は、ロックファイルの出力先が固定になっている部分です。
mdbファイルの場所を移動しても探せるように、Connectionstringをいじれる仕様なので、
ロックファイルの出力先アドレスをxmlファイルに保存しなきゃいけないかも知れません。
納期が近い為、そこまで手が回りませんが参考になりました。
どうもありがとうございました。

637 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:17:10 ]
>>635
AssemblyInfo.vbではなく、確かWindowsディレクトリ配下にアセンブリファイルがあり、それが端末によって異なっているせいで
端末によってコンパイルできたりできなかったりするような話は聞きました。

Dim app As Object
Dim book As Object
Dim sheet As Object
app = CreateObject("Excel.Application")

こんな感じに書くとコンパイルできるようなので、もうコードを書き直すしかないのかなと思っています。

638 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:43:08 ]
>>636
普通app.configに書かない?



639 名前:550 mailto:sage [2009/07/26(日) 01:44:08 ]
>>598
ただいま、試験的にプログラムを作って動かしたんですが、完璧ですね。
streamwriterをcloseしない限りは、そのアプリが専有で開いてるから
他からのアクセスが出来ないってことですね。
プログラムが異常終了しても自動的にlockfileへの専有が外れるから
他からのアクセスが可能になるということですね。
これかなりいいと思います。
ありがとうございました。

640 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 02:01:26 ]
>>639
当初の質問と関係なくなってるなw

641 名前:550 mailto:sage [2009/07/26(日) 02:33:32 ]
lockfileを隠しファイルにしたかったんですが、隠しファイルにすると
VBから見えてないのか、Streamwriterで例外エラー拾いますね。
たいした問題じゃないので我慢するしかないですねこれは・・・

642 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:18:52 ]
排他Openできるんならコネクションを開いたままにしとけばいいって何度も言ってるのに
なんでわざわざ独自に作りこむのかね。


643 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:24:27 ]
その方法がわからないからだろハゲ

644 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:58:34 ]
全コードで TableAdapter の Connection 書き換えれば
排他で開きっ放しに出来るだろうけど手間考えたら
>>598 みたいな方法が一番簡単だな

645 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 21:09:33 ]
そもそもその排他オープンが安全なのかが怪しいんだよね
それなら別次元の排他処理をしてしまうのもあり
だいたいちゃんとするならDBサーバーを入れるべきだし。

646 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 06:22:32 ]
Dim psi As New System.Diagnostics.ProcessStartInfo
Dim p As System.Diagnostics.Process
Dim ssPath As String = "C:\Program Files\Microsoft Visual Studio\VSS\win32\ss.exe"
Dim ssDir As String = "C:\Program Files\Microsoft Visual Studio\VSS\win32"
Dim ssUser = "user"
Dim ssPwd = "user"
Dim GetPath = "D:\work"

If ssPath.IndexOf(" ") > 0 AndAlso ssPath.Substring(0, 1) <> """" Then
ssPath = String.Format("""{0}""", ssPath)
End If

'ComSpecのパスを取得する
psi.FileName = System.Environment.GetEnvironmentVariable("ComSpec")
'出力を読み取れるようにする
psi.RedirectStandardInput = False
psi.RedirectStandardOutput = True
psi.UseShellExecute = False
'ウィンドウを表示しないようにする
psi.CreateNoWindow = True

'コマンドラインを指定("/c"は実行後閉じるために必要)
psi.Arguments = "/c " & ssPath & " get -gtm " & sName & " -GL" & GetPath & " -Y" & ssUser & "," & ssPwd
'起動
p = System.Diagnostics.Process.Start(psi)
result = p.StandardOutput.ReadToEnd
こんな感じでVSSから最新バージョンを取得しているのですが、データベースのパスを指定したいと思い、
psi.Arguments = "/c set SSDIR=" & ssDir & " && " & ssPath & " get -gtm " & sName & " -GL" & GetPath & " -Y" & ssUser & "," & ssPwd
のようにset SSDIRを追加すると取得できなくなってしまいます。
どこが間違っているのでしょうか?

647 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 07:40:11 ]
&で文字列連結すんな

648 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 08:02:57 ]
>>647
ildasmで見ると、String.Concatで連結されているのが確認できるよ。
こういう一連の連結に使う分には何ら問題は無い。



649 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 08:06:19 ]
&& だと環境変数は引き継がれないみたいだね

650 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 08:22:00 ]
連結後に更に連結するなら、せめてString.Formatを…。
読みにくくてかなわん。

651 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 08:36:24 ]
少しヒント
cmd /c"set AAA=XXX && echo %AAA%"
%AAA%
cmd /V:ON /c"set AAA=XXX && echo !AAA!"
XXX


652 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 23:07:00 ]
複数のBMPの画像をAVI動画に変換する方法を大まかにおしえて

653 名前:646 mailto:SAGE [2009/07/28(火) 00:10:18 ]
みなさんありがとうございます。
週末に試してみようと思います。

654 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 01:10:35 ]
>>652
1.Windows ムービー メーカー を起動する
2.対象の画像を読み込む
3.ムービーの発行でDV-AVIを選んで実行
4.AVI動画が完成\(^o^)/

655 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:21:11 ]
ODP.NETを使用し、パッケージをコールしてDataSetを取得し、
コンボボックスのDataSourceにDataTableを入れたのですが、
中身が表示されません。
DisplayMemberとValueMemberプロパティにも項目名を設定しています。
セットした後に、SelectedValueとSelectedTextの値を見ると、
SelectedValueには値が入っていますが、SelectedTextには値がありません。

パッケージをコールすると、
表示する用の文字列と裏で持つ用の文字列を複数レコード取得します。

調べても、問題ないと思うのですが何が悪いのでしょうか?

combo1.DataSource = DataTable
combo1.ValueMember = "AAA"
combo1.DisplayMember = "BBB"

試しに、AAAとBBBを逆にセットしてみたのですが、やはりSelectedValueの方しか値が入っていません。

よろしくお願いします。

656 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:26:57 ]
DataTable には値が入ってるの?

657 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:27:00 ]
SelectedTextはコンボボックスのテキスト入力部の、コピーとかのために「選択」してる文字列だから

658 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:32:58 ]
>>656
DataTableには値がちゃんと入っています。
デバッグでも確認しましたし、DataGridViewに突っ込んで確認しています。

>>657
そこは調べ不足でした。SelectedItemで確認するのが正しいですね。


最悪、ループでAddしていくしかないですかね…



659 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:37:50 ]
もう少し、ちゃんとしたコード出してみ。

DataTable の指定とかおかしそうな気がする。

660 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:43:14 ]
>>659
ソースが手元にないので、覚えている範囲で書きます。

Using ds As DataSet = (オラクルパッケージをFillメソッドで実行)
Using dt As DataTable = ds.Tables(0)

combo1.DataSource = dt ←このdtをDataGridViewに入れ、値が入っていることを確認
combo1.ValueMember = "AAA"
combo1.DisplayMember = "BBB"

End Using
End Using

こんな感じです。

661 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 22:48:35 ]
Disposeしてどうするあほかよ


662 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 23:31:00 ]
>>661
うわっ、すいません。初歩的な所で…
なぜ、DataGridViewは表示されたままだったのでしょうか?

663 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 11:41:38 ]
String.Formatの書式について教えて下さい。

String.Format("合 計 {0,12:\\###,###,##0}", dTotal) → 合 計 -\9,000

String.Format("合 計 \{0,12:###,###,##0}", dTotal) → 合 計 \ -9,000

String.Format("合 計 {0,12:\\-###,###,##0}", dTotal) → 合 計 -\-9,000

dTotalがマイナスの場合は-1をかけて、
String.Format("合 計 {0,12:\\-###,###,##0}", dTotal)とすれば
合 計 \-9,000になるのですが、それ以外の方法で
表示させるにはどうしたらいいでしょうか?

664 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 11:45:45 ]
セクション区切り記号 ;
を使えば正負でそれぞれに書式指定できる
使い方はカスタム数値書式指定文字列のページ見れ

665 名前:デフォルトの名無しさん [2009/07/30(木) 13:01:18 ]
VBNETの入門書2冊読破したんだけどどうすればいい?

666 名前:663 mailto:sage [2009/07/30(木) 13:03:44 ]
ありがとうございます。
おかげさまで出来ました!
もっと勉強します。


667 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 13:53:02 ]
自動更新で下のやつがきたんだけど手動でダウンロードできないんでしょうか?
できるのであれば方法を教えてください

Visual Studio 2005 Service Pack 1 セキュリティ更新プログラム(KB971090)

668 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 14:00:15 ]
KB番号ググりゃ見つかるだろ



669 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 14:08:44 ]
>>667
それクソ時間かかるよな。SP1 のときも思ったけど。

670 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 14:51:40 ]
なんか、やってることはほぼ再インストールと同じなんだそうだ。
だから、DLしてもどっちみち時間かかる

671 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 17:10:06 ]
>>669
そうそう
だから手動でダウンロードしたいわけなのよ

672 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 17:25:13 ]
www.microsoft.com/downloads/details.aspx?familyid=7c8729dc-06a2-4538-a90d-ff9464dc0197&displaylang=ja

249MBワロタ

673 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 17:33:05 ]
.NETからEXCEL使ってなんかやるとき、STAThreadじゃなくてMTAthreadだと、
なんか問題あったりするんでしょうか?

EXCELのオブジェクトを作成したスレッド以外から使ったりはしない前提です。

なんかイマイチこの辺を理解してないんです。

674 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 17:49:22 ]
>>672
ありがとうございます






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<199KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef