VB.NET質問スレ(Part30)at TECH
VB.NET質問スレ(Part30) - 暇つぶし2ch607:デフォルトの名無しさん
09/07/25 11:08:32
Office がインストールされてないんじゃね?

608:606
09/07/25 12:26:01
>>607
ありがとうございます。
Officeはインストールされています。

上記のような現象が起きている方はいませんか?

609:デフォルトの名無しさん
09/07/25 12:40:21
あとは、PIA がインストールされてないとか?

610:デフォルトの名無しさん
09/07/25 13:59:09
OfficeのPIAは、.NET1.1以降が予めインストール済みの環境で
Officeのインストールを実行しないと入らないからなあ。

611:デフォルトの名無しさん
09/07/25 14:18:40
>>606
Microsoft Excel 11.0 Object Libraryへの参照をプロジェクトに追加したときに
VSが自動的に生成するCOMラッパークラスの入ったdll(生成されるファイルのファイル名は忘れた)
が実行環境にインストールされてないんでしょ。

プロジェクトエクスプローラを「全てのファイルを表示」にしてる?
っていうか、こんな初歩的なことも知らないとしたら相当ヤバいな。

612:デフォルトの名無しさん
09/07/25 14:30:29
>>611
Interop.Excel.dll
Interop.Office.dll
あたり?

613:デフォルトの名無しさん
09/07/25 18:25:49
>>589
だからコネクションは自分で明示的に開けばいいの。
なんのためにConnectionプロパティが生成されると思ってんだ。
TableAdapterだからって接続したままに出来ない理由はない。


614:デフォルトの名無しさん
09/07/25 18:27:05
>>589じゃなくて>>593だった。
自分に突っ込んでどうする…

615:606
09/07/25 19:13:53
>>609-612
ありがとうございます。
Interop.Excel.dll
Interop.Microsoft.Office.Core.dll
は存在して、参照設定から見えていたと思います。

>OfficeのPIA
他の人もアセンブリの問題で色々苦労していたようなので、これが原因なのかもしれません。

Dim app As Object
Dim book As Object
Dim sheet As Object
app = CreateObject("Excel.Application")
こんな感じだと正常に動作するようなんですが…

616:デフォルトの名無しさん
09/07/25 19:35:52
>>615
ところでそれってソース開いたときにエラーとかじゃ無くって
実行するときにエラーってことだよね?
念のため

617:デフォルトの名無しさん
09/07/25 20:08:07
>>615
人の話ちゃんと聞こうよ。
参照設定は大丈夫か?なんていってないでしょ。

実行環境の話をしてるんだよ。
その2つがユーザーのマシンにもちゃんと入ってるの?
いやまず間違いなく入ってないんだってば・・・

618:デフォルトの名無しさん
09/07/25 21:06:43
開発環境 VS 2008

アプリケーション固有のメッセージを外部ファイルとして保存して、
プログラム側で起動時に読み込むようなものを作成しています。

上記のプログラムを作成するための定石、または、.NET Framework標準の
クラスなどが存在していますか?
ご存知の方がいれば、教えてください。

現在は外部ファイルをXMLにして、
DataTableのReadXMLで読み込む手法をとっています。

619:デフォルトの名無しさん
09/07/25 21:08:51
ResourceManager とかだな。

プロジェクトのプロパティから追加すれば、簡単に扱えるよ。

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

621:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/25 21:24:44
思いっきりCOM使ってるよそれ
vb.net excel プロセス でググるといろいろ出てくる
ちゃんと作るのは非常に面倒だからそこだけWSHのVBSなんかで書いてもいいよ

623:デフォルトの名無しさん
09/07/25 21:42:22
>>619
情報ありがとうございます。
試してみます。

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

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

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

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

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

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

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

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

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

630:606
09/07/25 23:26:56
>>629
ありがとうございます。

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

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

632:606
09/07/26 00:15:33
>>631
どうもです。

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

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

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

まさかとは思うけど、

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

なんてことはないよね?

634:デフォルトの名無しさん
09/07/26 00:34:48
>>633
ありがとうございます。

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

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

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

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

637:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/26 01:43:08
>>636
普通app.configに書かない?

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

640:デフォルトの名無しさん
09/07/26 02:01:26
>>639
当初の質問と関係なくなってるなw

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

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


643:デフォルトの名無しさん
09/07/26 20:24:27
その方法がわからないからだろハゲ

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

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

646:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/27 07:40:11
&で文字列連結すんな

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

649:デフォルトの名無しさん
09/07/27 08:06:19
&& だと環境変数は引き継がれないみたいだね

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

651:デフォルトの名無しさん
09/07/27 08:36:24
少しヒント
cmd /c"set AAA=XXX && echo %AAA%"
%AAA%
cmd /V:ON /c"set AAA=XXX && echo !AAA!"
XXX


652:デフォルトの名無しさん
09/07/27 23:07:00
複数のBMPの画像をAVI動画に変換する方法を大まかにおしえて

653:646
09/07/28 00:10:18
みなさんありがとうございます。
週末に試してみようと思います。

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

655:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/28 22:26:57
DataTable には値が入ってるの?

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

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

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


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

659:デフォルトの名無しさん
09/07/28 22:37:50
もう少し、ちゃんとしたコード出してみ。

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

660:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/28 22:48:35
Disposeしてどうするあほかよ


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

663:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/07/30 11:45:45
セクション区切り記号 ;
を使えば正負でそれぞれに書式指定できる
使い方はカスタム数値書式指定文字列のページ見れ

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

666:663
09/07/30 13:03:44
ありがとうございます。
おかげさまで出来ました!
もっと勉強します。


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

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

668:デフォルトの名無しさん
09/07/30 14:00:15
KB番号ググりゃ見つかるだろ

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

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

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

672:デフォルトの名無しさん
09/07/30 17:25:13
URLリンク(www.microsoft.com)

249MBワロタ

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

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

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

674:デフォルトの名無しさん
09/07/30 17:49:22
>>672
ありがとうございます


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch