VB6.0でコーディングをしています。
OPEN命令でテキストファイル等を開く時にファイル番号を指定しますが、
現在空いているファイル番号を取得する方法があったはずなのですが、
命令を忘れてしまいました。
もう5年以上前にVB4.0でコーディングをした記憶があるのですが
どなたかご存知の方のHELPをお待ちしています。

例 Open FileName As Input #1 ←これ

A 回答 (2件)

FreeFile 関数を使って、以下のようにすればできます。



fn = FreeFile
Open FileName For Input As fn

詳細は、VB6 のヘルプをご覧下さい。
    • good
    • 0
この回答へのお礼

そうそう!
その通りです!
あ~!胸のつかえが取れました。
有難うございます!!!

お礼日時:2001/07/30 17:47

蛇足です。


Open FileName For Input As #fn
って書いてもいいっす。

個人的には、こっちの方がちょっとしっくりとします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QVB6「コピー中のファイルをオープンしてinput #はするか?

VB6 WinXP等 ですが、(おそらくOSが)コピーしているファイルに対して(コピー先のファイル)をOPENしてinput #はするか(しないか)どうか疑問なのですが。当然、コピー先のファイルはコピー中なら不完全なので、OPENしてinput してしまうと不都合が生じるので。別のプロセスで開かれている場合はエラーが出るというですが・・・。大きなテキストファイルを作って自力でテストする必要があるでしょうか?OSの仕様に詳しいかたよろしくおねがいいたします。

Aベストアンサー

オープン時にロックかければよい。
コピー中のファイルはロックできずオープンエラーになる。

QVB4.0の「LSet」と同等の機能をVB2008で実行するには?

VB2008の練習のために、VB4.0のコードをVB2008にコンバージョンしています。
VB4.0の「LSet」がどうしてもコンバージョンできません。
LSet 以外はVB2008で機能がありました。
なにか方法はないでしょうか。
リストをコピーします。
(投稿したらインデントが消えました)

Public Type Tpstndef
equip As Integer
stn_no As Integer
stn_class As Integer
line_no As Integer
stn_kind As Integer
End Type

Dim kdata As Tpkyokudef
Dim rbuf As buf1K
   ・
  省略
   ・
Get #fno, seeksize, rbuf
LSet kdata = rbuf

Aベストアンサー

IntPtrを経由して行えばいいように思います

dim objPtr as IntPtr = Marshal.AllocHGlobal( Len(rbuf) )
として ファイルから読み込んだデータを格納できる IntPtr型の変数を準備します

' VB6ではファイルより大きな受け取りバッファでもエラーになりません
' VB.NETではその点融通が利かないようです
' LOFなどで読み込み量を調べて あらかじめ Redimであわせましょう
FileGet( fno, rbuf.実際のバッファ )
FileClose()

' rbufの読み込み実体がByte配列ならいいのですが …
Marshal.Copy( rbuf.実際のバッファ, 0, objPtr, rbuf.実際のバッファ.Length )
kdata = marshal.PtrToStructure( objPtr, GetType(Tpstndef))
' 使いおわったら開放しましょう
marshal.FreeHGlobal( objPtr )

といった具合です

IntPtrを経由して行えばいいように思います

dim objPtr as IntPtr = Marshal.AllocHGlobal( Len(rbuf) )
として ファイルから読み込んだデータを格納できる IntPtr型の変数を準備します

' VB6ではファイルより大きな受け取りバッファでもエラーになりません
' VB.NETではその点融通が利かないようです
' LOFなどで読み込み量を調べて あらかじめ Redimであわせましょう
FileGet( fno, rbuf.実際のバッファ )
FileClose()

' rbufの読み込み実体がByte配列ならいいのですが …
Marshal.Copy( rbuf.実...続きを読む

Q「VB4.0の「LSet」と同等の機能をVB2008で実行するには?」のリストを修正します

「VB4.0の「LSet」と同等の機能をVB2008で実行するには?」の質問で
リストに間違いがあったので訂正します。
Public Type TpstndefをPublic Type Tpkyokudef

VB2008の練習のために、VB4.0のコードをVB2008にコンバージョンしています。
VB4.0の「LSet」がどうしてもコンバージョンできません。
LSet 以外はVB2008で機能がありました。
なにか方法はないでしょうか。
リストをコピーします。

Public Type Tpkyokudef
equip As Integer
stn_no As Integer
stn_class As Integer
line_no As Integer
stn_kind As Integer
End Type

Dim kdata As Tpkyokudef
Dim rbuf As buf1K
   ・
  省略
   ・
Get #fno, seeksize, rbuf
LSet kdata = rbuf

「VB4.0の「LSet」と同等の機能をVB2008で実行するには?」の質問で
リストに間違いがあったので訂正します。
Public Type TpstndefをPublic Type Tpkyokudef

VB2008の練習のために、VB4.0のコードをVB2008にコンバージョンしています。
VB4.0の「LSet」がどうしてもコンバージョンできません。
LSet 以外はVB2008で機能がありました。
なにか方法はないでしょうか。
リストをコピーします。

Public Type Tpkyokudef
equip As Integer
stn_no As Integer
stn_class As ...続きを読む

Aベストアンサー

buf1kの構造体の中身は ・・・
ファイルはレコード単位を設定しているのですか

当方のテストでは 自動変換で変換されたコードを使ってます
VB4/6コード
Private Type buf1k
  buf(1023) as Byte
End Type

VB2005コード
  Private Structure buf1k
    <VBFixedArray(1023)> Dim buf() As Byte
    Public Sub Initialize()
      ReDim buf(1023)
    End Sub
  End Structure
といった具合ですが ・・・

2005側の使用時に
dim myBuf as buf1k
dim kdata as Tpkyokudef
myBuf.Initialize()

FileGet( #fno, myBuf )
Dim objPtr As IntPtr = Marshal.AllocHGlobal(Len(MyBuf))
Marshal.Copy(MyBuf.buf, 0, objPtr, MyBuf.buf.Length)
kdata = Marshal.PtrToStructure(objPtr, GetType(Tpkyokudef))
Marshal.FreeHGlobal(objPtr)
といった具合ですが ・・・

構造体Tpkyokudef には
<StructLayout(LayoutKind.Sequential)> _
といったような属性を付けたほうがいいかもしれません

buf1kの構造体の中身は ・・・
ファイルはレコード単位を設定しているのですか

当方のテストでは 自動変換で変換されたコードを使ってます
VB4/6コード
Private Type buf1k
  buf(1023) as Byte
End Type

VB2005コード
  Private Structure buf1k
    <VBFixedArray(1023)> Dim buf() As Byte
    Public Sub Initialize()
      ReDim buf(1023)
    End Sub
  End Structure
といった具合ですが ・・・

2005側の使用時に
dim myBuf as buf1k
dim kdata as Tpkyo...続きを読む

QVB6.0でTextファイルをExcel出力

お世話になります。

VB6.0でTextファイル(カンマ区切りのデータが入っているもの)をExcelに出力するものを作成しました。

基本的に読込んだファイルをArrayで型を指定してExcelに出力する形です。

ですが、印刷するときにA4横に収まらない長さになってしまったので、

Textファイルの1行のデータをExcelには2行にして出力させることは可能ですか?

Textファイルのデータはこんなのです。
XXXX,SS,SS,AA,DD,WW,Fed,fk,aaa,aqee
このような形で数百件入っています。



何か参考になりそうなものがあったら教えてください。

よろしくお願いします。

Aベストアンサー

>基本的に読込んだファイルをArrayで型を指定してExcelに出力する形です。
の意味がよくわから無いが
カンマ区切りのテキストの1レコード分が出来ているなら、Split関数で(区切り文字を当然、カンマにして)Array?変数に入るから、全部で7項目あり、4項目、3項目に分ける例で説明するならば
(kはそれまでの処理で決るもの。初めは初期値k=2など)
s=Split(カンマ区切り文字列,",")
Cells(k、”A")=s(0)
Cells(k、”B")=s(1)
Cells(k、”C")=s(2)
Cells(k、”D")=s(3)
K=k+1 'シートで次は1行下へ書き出す意味
Cells(k、”E")=s(4)
Cells(k、”F")=s(5)
Cells(k、”G")=s(6)
k=k+1
この後、次のレコードを読むか、次のレコードを作り、繰返す。
各列の表示形式は設定しておくか、VBAでやる。

QVB6.0でVB上にExcel

VB上にExcelオブジェクトを貼り付け、特定の条件に当てはまったとき既存のExcelファイルのSheet1を乗せたいという場合は、どうすればいいのでしょうか?

Aベストアンサー

条件に該当する場合に
オブジェクトではなくピクチャーコントロールとしてクリップボードにSheet1をコピーしてピクチャーコントロールにClipboard.GetData()で貼り付ける。
または
Sheet1を1行づつ読み込みテキストに書き出す。


このカテゴリの人気Q&Aランキング

おすすめ情報