• 締切済み

リストボックスの保存2

リストボックスの全ての項目をテキストファイルに保存する方法を、先程教えて頂きスレッドを締めてしまったのですが、新たに問題が発生したのでこちらで質問させて頂きます。 先程教えて頂いた構文でリストボックスの項目をファイルに保存する事はできたのですが、追加保存されてしまい、繰り返して実行すると同じ内容のデータが増えてしまいます。追加保存ではなく全て内容を入れ替えるにはどうしたらよいでしょうか? ----------教えて頂いた構文----------- Dim hFile As Integer hFile = FreeFile() '<< 書き込むファイルをオープン Open "C:\Text.txt" For Append As #hFile Dim nCnt As Integer nCnt = 0 Do Until (nCnt >= List1.ListCount) '<< 書き込み Print #hFile, List1.List(nCnt) nCnt = nCnt + 1 '<< カウントアップ Loop Close #hFile '<< ファイルクローズ ----------------ここまで-------------- これですと、リストボックスに 東京 大阪 名古屋 上のように3つの項目があるとして、上記のコマンドを複数回行うと 東京 大阪 名古屋 東京 大阪 名古屋 東京 大阪 名古屋 とデータが重複してしまいます。 これを回避する方法を教えて下さい。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

>For Append は今あるファイルのレコードはそのままにして、その後にレコードを追加していくOPENステートメントの一部(アクセス方法指定という)です。ですから質問のようになります。 Appendは「付加する」の意味。Appendix付録、付加物。a(p)+pend(ぶら下がる、ペンダント、振り子Pendulumなどと同根?) 同じ(指定した)ファイルの最初から、前のレコード内容を無視して、初めから上書きして書き出していく(前のはきえる)のは、FOR OUTPUTです。 回答に見慣れない語句がある場合、WEB照会などして、調べる習慣をつけてください。実行して結果OKだけでなく。 回答を実行もしないで、「やってみます、ありがとう」で締め切っている質問者も多いが。 ついでに、FreeFileなども調べましたか。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

VBのリファレンスは、お持ちじゃないですか? 質問する前に、調べる習慣をつけてください。 For Append を For output にしてください。

参考URL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_k04.htm

関連するQ&A

  • リストボックスの内容を テキストファイルに出力

    エクセル vba初心者です。 (1)ini fileからデータを取得 (2)その内容のリストボックスに表示 (3)リストボックス内容をテキストボックスに出力 (2)、(3)がわかりません。 なんとなくやってたら余計にわからなくなりました。助けてください。 Private Sub CommandButton1_Click() '読込み(1)を押した時の処理 Dim listbox As String Dim strL_Data As String '取得した値 Dim n As Integer n = FreeFile    ListBox1.Clear   Open "C:\filepath.ini" For Input As #n Do While Not EOF(n) Line Input #n, listbox ListBox1.AddItem listbox Loop Close #n End Sub Private Sub CommandButton2_Click() '書込み(1)を押した時の処理  Dim listbox As String Dim strL_Data As String '取得した値 Dim n As Integer n = FreeFile    Open "c:\example.txt" For Output As #n Print #n, strL_Data Close #n End Sub よろしくお願いいたします。

  • リストボックスの保存

    ■VB6.0 リストボックスの全ての項目をテキストファイルに保存する方法を教えて下さい。 色々試してみたのですが出来ませんでした;; よろしくお願い致します。

  • リストボックスの内容をテキストに書き込むには?

    似たような質問が前に出ていて恐縮なのですが、そちらと多少の違いがあって解決できなかったため、質問させていただきます。 Visual Basic6.0で、リストボックスに表示している内容をテキストボックスに書き込むにはどうすればよいのでしょうか? 一応、下記のようなプログラムを自分で組んでみたのですが、なぜかリストボックスの一行目にある項目だけが複数回書き込まれてしまいます。 (Print~の位置をNext~の次にすると、一行目が一度だけ書き込まれて終了、になってしまいました。) Open filename For Output As #1 Dim lngIdx As Long Dim strData() As String ReDim strData(List.ListCount - 1) For lngIdx = 0 To List.ListCount - 1 strData(lngIdx) = List.List(lngIdx) Print #1, strData(IngIdx) Next lngIdx Close #1 Do UntilとLoopを入れるべきなのだと思いますが、どうも入れ方が悪いようで必ずプログラムが動かなくなってしまいました。 初めてまだ2ヶ月の初心者なのでかなり初歩的なことを質問しているとおもいますが、回答よろしくお願いします。

  • リストボックスの保存方法を教えてください

    初心者です。VB.NET(VBのケースでもいいです)で、リストボックスにファイルからデーターを読み込み、項目を一覧表示し、その項目を追加、削除し、更新した内容をファイルに保存したいのですが、 データーの読み込み、追加、削除、まではできたのですが、ファイルに保存する方法がわかりません。 リストの項目すべてを取得して保存する方法を教えてください。 よろしくお願い致します。

  • VBA リストボックスの値をセルに転記

    よろしくお願いします。 したいことは、 ユーザーフォームのリストボックスで複数の値を選んで複数セルに転記する。 ActiveCell.offset(10, 5) ⇐ リストボックスで選んだ1つ目 ActiveCell.offset(11, 5) ⇐ リストボックスで選んだ2つ目 ActiveCell.offset(12, 5) ⇐ リストボックスで選んだ3つ目 下の構文では1つしか転記できません。 Dim n As Integer, s As String For n = 0 To ListBox3.ListCount - 1 If ListBox3.Selected(n) Then s = s & ListBox3.List(n) & vbCrLf ActiveCell.offset(10, 5).Value = s End If Next

  • リストボックス内の配列を保存・呼び出し

    お世話になります。 VB2005ユーザーです。 リストボックスに格納した配列をファイルへ保存・呼び出しをするにはどうすればいいのでしょうか? リストボックスにはTextbox1,2,3の内容を格納し、オーバーライドによりリストボックスにはTextbox1が表示されるようにすることはできたのですが、 SaveFileDialogを使って配列をファイルに保存する方法がわかりません。 http://dobon.net/vb/dotnet/file/xmlserializer.html こちらなどを参照させていただいたりしたのですが、よく理解できませんでした。 リストボックスに格納するコードは下記のようなものです。 Public Structure MyStruct Private _a As String Private _b As String Private _c As String Public Property a() As String Get Return _a End Get Set(ByVal Value As String) _a = Value End Set End Property Public Property b() As String Get Return _b End Get Set(ByVal Value As String) _b = Value End Set End Property Public Property c() As String Get Return _c End Get Set(ByVal Value As String) _c = Value End Set End Property ' ToStringメソッドをオーバーライドする Public Overrides Function ToString() As String Return Me._a End Function End Structure Private Sub リストに追加_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim myStruct As New MyStruct myStruct.a = Textbox1.Text myStruct.b = Textbox2.Text myStruct.c = Textbox3.Text ' アイテム追加 ListBox1.Items.Add(myStruct) ListBox1.SelectedIndex = 0 End Sub 望む結果としては、リストボックスに格納した複数の配列をファイルに保存、呼び出し時には保存した内容を基にリストボックスに復元、という動作をして欲しいのです。 ご教示のほう、宜しくお願いいたします!!

  • VB6.0 リストボックス

    VB6.0で3つのリストボックスに関連性を持たせたいと思っています。 Private Sub lstBox_Click() Dim intLstIndex As Integer intLstIndex = lstA.ListIndex If (lstA.Selected(intLstIndex)) Then lstB.Selected(intLstIndex) = True lstC.Selected(intLstIndex) = True Else lstB.Selected(intLstIndex) = False lstC.Selected(intLstIndex) = False End If End Sub 以上のように、どれか一つのリストボックスがクリックされたら他のリストボックスの同じ行がtrueになるようにしています。 しかしこれでは件数が増えた場合、選択された行が揃わなくなる場合があり非常に見栄えが悪くなります。 リストボックスでなくともかまわないのですが、このように三つの項目に関連性をもたせることはできませんでしょうか。

  • リストボックスから削除、「いいえ」でも削除される

    Windows7 Excel2007でマクロ作成中の初心者です。 リストボックスから、シート(顧客名)を選んで削除するマクロです。 削除がうまくいくのですが、「いいえボタン」を押しても シートが削除されてしまいます。どう修正したらよろしいでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、 " & name & " さんを削除していいですか?", _ vbYesNo, "削除の確認") End If Next i Application.DisplayAlerts = False Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete Application.DisplayAlerts = True '顧客リスト.RemoveItem (顧客リスト.ListIndex) '顧客リスト.ListIndex = -1 リストボックスの項目削除 Worksheets(1).Activate End With If btn = vbYesNo Then Exit Sub End If ActiveWorkbook.Save End Sub ----------------------------------------------- Sub リストボックスの項目削除() Dim i As Integer For i = 顧客リスト.ListCount - 1 To 0 Step -1 If 顧客リスト.Selected(i) Then 顧客リスト.RemoveItem (i) Exit For End If Next i End Sub

  • vb.bet リストボックスの2項目の表示

    vb.net始めて3ヶ月の超初心者ですのでよろしくお願いいたします。 リストボックスにYearと売り上げ高の2項目をIndexにもとづいて表示します。Variable、Indexなどはできているものとします。 このようなイメージです。 YEAR SALES 2007  1000 2008  2000 2009  2500 2010  3000 Dim strYear as string Dim intSales as integer Dim intFill as integer Dim strDisplay as String For intFill = 0 To 3 Me.lstBoxTotalYear.Items.Add(strYear(intFill)) これをつかうと、YearしかMe.lstBoxTotal...に入れられませんでした。2個いれたらErrorになりました。一方では、strDisplayをつくってYearとSalesをつなげて strDisplay = strYear & intSales.ToStringをつくったのですがこれもはねられました。 YearとSalesを2個いれるにはどうしたらいいでしょうか。或いは、他のCommandなどがありますでしょうか。Internetや他の本をみてもみつかりませんでした。 よろしくお願いいたします。

  • リストボックスからシート削除のマクロを合体したい

    Windows7 Excel2007でマクロ作成中の初心者です。 やりたいことは、リストボックスからシートを選択し、そのシートを削除する。 削除したら、リストボックスの中の、シート選択状態を解除し、その項目だけを 削除することです。 以下のコードで出来たのですが、これを統合して一個のコードにしたいです。 どうしたらよろしいでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、 " & name & " さんを削除していいですか?", _ vbYesNo, "削除の確認") If btn = vbYes Then Application.DisplayAlerts = False Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete Application.DisplayAlerts = True リストボックスの項目削除 End If End If Next i Worksheets(1).Activate End With ActiveWorkbook.Save Application.ScreenUpdating = True End Sub ----------------------------- Sub リストボックスの項目削除() Dim i As Integer For i = 顧客リスト.ListCount - 1 To 0 Step -1 If 顧客リスト.Selected(i) Then 顧客リスト.RemoveItem (i) Exit For End If Next i End Sub

専門家に質問してみよう