• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:COMExceptionはハンドルされませんでしたとは?)

COMExceptionはハンドルされませんでしたとは?

このQ&Aのポイント
  • PC内のドライブとシリアルナンバーを取得するツールを作成していますが、「COMExceptionはハンドルされませんでした。」というエラーが出て止まってしまいます。
  • VisualBasic2008EE初心者でエラーの内容がわかりません。
  • どなたかお分かりの方おりましたらご教授のほどよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#259269
noname#259269
回答No.2

前回、これがらみで回答しましたが >System.Runtime.InteropServices.Marshal.ReleaseComObject(FSO) この行通りませんね(直前の行で Return している為)。FileSystemObjectのインスタンスがリークします。 また、前回回答では修正版を載せてますので、そっちを参照ください。

icevain
質問者

お礼

edp3142さん、こんにちは またしても助けていただきありがとうございました。 おかげさまで解決できました。 今後ともよろしくお願い致します。 'こんな感じにできあがりました。 Private Function Get_Sir(ByVal Drv As String) Dim FSO = CreateObject("Scripting.FileSystemObject") Dim DriveObject = FSO.GetDrive(Drv) Try Return DriveObject.SerialNumber System.Runtime.InteropServices.Marshal.ReleaseComObject(DriveObject) System.Runtime.InteropServices.Marshal.ReleaseComObject(FSO) Catch ex As Exception Return "(・・?" End Try End Function

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

Drvの値に問題があってGetDriveでエラーになってるんじゃないでしょうか? tyy~catchしていないのでそのままエラーが垂れ流されているのでしょう。

参考URL:
http://officetanaka.net/excel/vba/filesystemobject/filesystemobject.htm#GetDrive
icevain
質問者

お礼

ProKaseifuさん こんにちは vb.netにはtry~catchなる 便利な機能があるのですね。 勉強になりました。 これからもよろしくお願い致します(*^^)v。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ボタンをクリックしても空白をリストに追加しないようにしたい

    初心者ですのでよろしくお願いいたします。 以下のようなコードでボタンを押すとテキストボックスに入力してあるテキストをリストに登録したいのですが、空白の場合は追加したくありません。どのように書けばいいでしょうか? よろしくお願いいたします。 (ちなみにLabel3にはリストに登録された数が出ます) Public Class Form1 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListBox1.Items.Add(TextBox1.Text) TextBox1.Clear() Label3.Text = ListBox1.Items.Count End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Remove(ListBox1.SelectedItem) Label3.Text = ListBox1.Items.Count End Sub End Class

  • 標準モジュールからフォームをコントロールしたい

    こんにちは。 標準モジュールからフォームのリストボックスに文字を追加したいんですが、うまくいきません。 まず、button1をクリックすると、共通モジュールのサブルーチンを呼び出します。そして引数"0"を渡すと、Form1のListBox1に"hello"を追加したいのです。 実行させると、エラーはでないのですが、追加されるはずの"hello"がListBox1に追加されません。 たぶん     frm1.ListBox1.Items.Add("hello") あるいは    Dim frm1 As New Form1() あたりの宣言の仕方がまずいのだと思うんですが... どなたか、ご教授よろしくお願いします。 ■共通モジュール Module Module1 Dim frm1 As New Form1() Sub PC(ByVal PCrecieve As String) If PCrecieve = "0" Then frm1.ListBox1.Items.Add("hello") End If End Sub End Module ■フォーム Public Class Form1 Inherits System.Windows.Forms.Form Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call PC("0") End Sub End Class

  • リストボックスにファイル名のみを表示するには?

    いつもお世話になっています。 今、VisualStudio.NETのVB.NETを使用して勉強しているものです。 現在、特定のフォルダからその中に入っているファイルを リストボックスに表示させたいと思っています。 フルパスを表示させることはできたのですが、ファイル名のみの表示がうまくいきません。 どなたか教えていただけないでしょうか。 以下のようにコードを書いております。 一度、TextBox1にフォルダのパスをコピーする仕組みになっています。 GetFileName関数を使用すればいいのかもしれませんが、 うまく組み合わせることができません。 どうぞよろしくお願いいたします。 Private Sub GetAllFiles(ByVal folder As String, _ ByVal searchPattern As String, ByRef files As ArrayList) 'folderにあるファイルを取得する Dim fs As String() = _ System.IO.Directory.GetFiles(Me.TextBox1.Text, searchPattern) 'ArrayListに追加する files.AddRange(fs) End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim subFolders As New ArrayList() Dim files As New ArrayList() 'TextBox1以下のファイルをすべて取得 GetAllFiles(Me.TextBox1.Text, "*.*", files) 'ListBox1に結果を表示する Me.ListBox1.Items.Clear() Me.ListBox1.Items.AddRange(files.ToArray()) End Sub

  • Visual Basic でスクリーンショット

    学生で、visual basic を勉強しているものです Button1をクリックするとスクリーンショットを1秒ごとに撮り、 "c:\iMonitoring"に保存するというプログラムを書いています (Button2をクリックすると止まる) 写真の名前を撮った時刻にしたいのですがエラーが出てうまくいきません どうしていいか分からばいので教えてください (コードです) ********************************************************************************* Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Enabled = False System.IO.Directory.CreateDirectory("C:\iMonitoring") End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Timer1.Enabled = True End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Timer1.Enabled = False End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim x As String = Now().ToString() Dim a As String = "C:\iMonitoring\" Dim b As String = ".bmp" Dim y As String = (a & x & b) 'Imports System.Drawing 'Imports System.Windows.Forms 'Bitmapの作成 Dim bmp As New Bitmap(Screen.PrimaryScreen.Bounds.Width, _ Screen.PrimaryScreen.Bounds.Height) 'Graphicsの作成 Dim g As Graphics = Graphics.FromImage(bmp) '画面全体をコピーする g.CopyFromScreen(New Point(0, 0), New Point(0, 0), bmp.Size) '解放 g.Dispose() '保存 bmp.Save(y) End Sub End Class

  • リストボックスのアイテムをマウスで並べ替えたいです

    リストボックスのアイテムをマウスのドラッグドロップで並べ替えたいのですが、 下のような感じで書いてみたのですが、 この状態だと、4番目のものを一番上に持ってくるという動作だけするのですが、 4番目から3番目に移動する場合や、1番目から3番目に移動する場合など 追加していくとIFが重なってきてすごくややこしくなってしまいます。 もっと分かりやすくて合理的な方法がありましたら、 大体でも良いですので、教えて頂けたら助かります。 よろしくおねがいいたします。 Private Sub Form1_Load(...略 ListBox1.Items.Add("AAA") ListBox1.Items.Add("BBB") ListBox1.Items.Add("CCC") ListBox1.Items.Add("EEE") End Sub Private Sub ListBox1_MouseDown(...略 SelectedSortFrom = ListBox1.SelectedIndex End Sub Private Sub ListBox1_MouseUp(...略 SelectedSortTo = ListBox1.SelectedIndex ListBox1Sort(SelectedSortFrom, SelectedSortTo) End Sub Private Function ListBox1Sort(ByVal From As Integer, ByVal Too As Integer) If From = -1 Then Exit Function If Too = -1 Then Exit Function Dim A(ListBox1.Items.Count) As String Dim B As Boolean For i As Integer = 0 To ListBox1.Items.Count - 1 A(i) = ListBox1.Items(i) Next For i As Integer = 0 To ListBox1.Items.Count - 1 If i = Too Then ListBox1.Items(i) = A(From) B = True Else ListBox1.Items(i) = A(i - 1) End If Next End Function

  • VB TEXT読み取りについて

    このコードでのデバックは成功したのですが、TEXTBOX1にファイルネーム C:\Users\???\Documents\???と入力しても’パスが拒否されました’と出てしまいます。 どう解決したらよいのでしょうか、宜しくお願いします。 Public Class Form1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim sr As System.IO.StreamReader = Nothing Try Dim file As String = TextBox1.Text sr = New System.IO.StreamReader(file, System.Text.Encoding.GetEncoding("shift_jis")) Dim doc As String = "" Do Until sr.EndOfStream doc &= sr.ReadLine & vdcrlf() Loop TextBox2.Text = doc Catch ex As Exception MessageBox.Show(ex.Message, "read") Finally If sr IsNot Nothing Then sr.Close() sr.Dispose() End If End Try End Sub Private Function vdcrlf() As String Throw New NotImplementedException End Function End Class

  • VBで倍数を出したい

    VBで倍数を出したい よろしくお願いします。 おそらく基本なんだと思うのですが、さっぱりわかりません。 TextBox Label Buttonと並んでいて、 TextBoxに入った整数に対し、 Buttonを1度押すたびに、 Labelに倍数が表記されていく、 という趣旨なのですが。 まず、前段階として下記を作らされました。 Public Class Form1 Dim i As Integer Dim m As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click i = TextBox1.Text lblmessage.Text = i + m m = lblmessage.Text End Sub End Class このように、labelの数字がどんどん変わっていくのはできたのですが、問題は、 Text…10 Label…10    20    30    40    50    60    70    80    90    100 となり、しかも一度に出るのではなく、Buttonひと押しにつき一つの解が出ね 次の一押しで改行され解が出る。 かつ、100で打ち止めにすること…だそうです。 いちおうめちゃくちゃですが、みんな風に作りました。 Public Class Form1 Dim a As Integer Dim b As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim b As Integer = 10 a = TextBox1.Text lblMessage.Text = a & ControlChars.CrLf & a + b End Sub End Class どうかヒントだけでもお願いします。

  • ”ListBoxへのAddでエラー”

    タイトルの通りです。 DoubleからStringの型変換が不可なんでしょうか? ”.ToString” によってエラーになってるようです。 For~Eachでの3行で処理するとOKなのですが1行で なんとかならないものかと調べていましたが、いきずまっています。 Items.AddではなくItems.AddRangeを使う場合、どういうふうに 書くんでしょうか?。ちなみに、配列がString型の場合にはエラー にならないことは知っています。(.ToStringも不要) ’--------サンプル---------- Public Class Form1 Private Sub Button1_Click() Handles Button1.Click Dim Test_arr() As Double = {1.4, 1.2, 1.9, 1.7, 1.4, 2.8, 1.2, 3.2, 1.99, 4.2} ListBox1.Items.AddRange(Test_arr.ToString) '←この行でエラー For Each x As Double In Test_arr '←これはOK ListBox1.Items.Add(x.ToString) ' Next ' End Sub End Class エラー内容は、↓ ------------------------------------------------------------------ エラー 1 これらの引数で呼び出される、アクセス可能な 'AddRange' が ないため、オーバーロードの解決に失敗しました: 'Public Sub AddRange(items() As Object)': 型 'String' の値を 'Object の 1 次元配列' に変換できません。 'Public Sub AddRange(value As System.Windows.Forms.ListBox.ObjectCollection)': 型 'String' の 値を 'System.Windows.Forms.ListBox.ObjectCollection' に変換できません。 ------------------------------------------------------------------ どなたかご教授願えれば幸いです。環境はVisualBasic2010+WindowsXPです。

  • VB.netでパスワード変更

    下記のようなパスワードを変更するフォームをVB.netで作成したのですが、 実行すると、いつも異なるretValの値がかえってきて変更できません。 retValの値もよくわからない大きな数値がかえってくるのでどのようなエラーかも 判断つかず。 どこが間違っているかお分かりになる方いらっしゃいますでしょうか。 Public Class Form1 Private Declare Function NetUserChangePassword Lib "netapi32.dll" (ByVal Domain As String, ByVal User As String, ByVal OldPass As String, ByVal NewPass As String) As Long Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim retVal As Long Dim sDomain As String Dim sUser As String Dim sOldPass As String Dim sNewPass As String sDomain = "xxxxxxx" ←ここはサーバのIPアドレス sUser = TextBox1.Text sOldPass = TextBox2.Text sNewPass = TextBox3.Text retVal = NetUserChangePassword(sDomain, sUser, sOldPass, sNewPass) MsgBox(retVal) End Sub End Class

  • VBのテキスト書き込み読み出し

    VB初心者です。 VBのテキスト書き込み読み出しについて質問させていただきます。 ~使用オブジェクト~ textbox1 textbox2 button1 button2 現在下記の通りtextbox1とtextbox2に書いた文字(length 10まで)をbutton1 clickで C:\test.txtに書き出し、 button2 clickでtextbox1 と textbox2に戻すプログラムを書いてみました。 読み込みのところが現在は2個ですが、実用的には膨大な数にしたいと思っています。 単純に沢山書けばいいのでしょうが現実的ではないのでスッキリと書く書き方はないでしょうか? さらに、例としてtextbox1にAさんの名前textbox2にAさんの年齢をいれたとします。 その際、Bさん以降を登録したいのですがその場合テキストへの書き込みを次行に書き込み 次行を読み込むにはどのように書けばよろしいでしょうか? ご教授お願い致します。 Public Class Form1 '##################################################### '"C:\test.txt"へ書き込み '##################################################### Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim write_data As New System.IO.StreamWriter("C:\test.txt", False, _ System.Text.Encoding.Default) Dim str As String Dim str1 As String str = String.Format("{0, -10}", TextBox1.Text) str1 = String.Format("{0, -10}", TextBox2.Text) write_data.Write(str & str1) write_data.Close() End Sub '##################################################### '"C:\test.txt"の読み込み '##################################################### Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim Reader As New IO.StreamReader("C:\test.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) While Reader.Peek() > -1 '10文字取得 Dim c(9) As Char Dim d(9) As Char Reader.ReadBlock(c, 0, c.Length) Reader.ReadBlock(d, 0, d.Length) TextBox1.Text = c TextBox2.Text = d End While Reader.Close() End Sub End Class