Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9059 / 13644 ツリー ←次へ | 前へ→

【29571】フォームのテキストボックス 若葉 05/10/7(金) 23:41 質問[未読]
【29575】Re:フォームのテキストボックス ichinose 05/10/8(土) 7:48 発言[未読]
【29581】Re:フォームのテキストボックス ichinose 05/10/8(土) 15:21 発言[未読]
【29577】Re:フォームのテキストボックス awu 05/10/8(土) 12:21 回答[未読]
【29579】Re:フォームのテキストボックス だるま 05/10/8(土) 14:04 回答[未読]

【29571】フォームのテキストボックス
質問  若葉  - 05/10/7(金) 23:41 -

引用なし
パスワード
   教えてください。

  textbox1 に商品コードを入力すると、
  
  textbox2 に商品名が自動的に表示
  textbox3 に型番が自動的に表示
  textbox4 にカラーが自動的に表示

されるようにしたいのですが。

基になる別ファイルは、c: にテキストファイルにて別ファイル名で存在します。

  商品コード 商品名   型番  カラー
   123   aaaa     dddd  gggg
   456   bbbb     eeee  hhhh
   789   cccc     ffff  iiii

何卒、よろしくお願いいたします。

【29575】Re:フォームのテキストボックス
発言  ichinose  - 05/10/8(土) 7:48 -

引用なし
パスワード
   ▼若葉 さん:
おはようございます。


>  textbox1 に商品コードを入力すると、
>  
>  textbox2 に商品名が自動的に表示
>  textbox3 に型番が自動的に表示
>  textbox4 にカラーが自動的に表示
>
>されるようにしたいのですが。

このテキストボックスは、どこに貼り付けたのですか?
ユーザーフォームにですか?
それともシートにせすか?

こういうプログラムの仕様にあたる記述は
正確且つ、詳細に記述しなければこの投稿をみている方には
わかりませんよね??
それによって、コード記述も当然違ってきます。

また、少しでも出来ているのなら、コードの記述も必要です。
これは、「自分でも努力はしています」というアピールのためでも
ありますが、コードの記述が質問の記述漏れを補うことがあるからです。


>
>基になる別ファイルは、c: にテキストファイルにて別ファイル名で存在します。
>
>  商品コード 商品名   型番  カラー
>   123   aaaa     dddd  gggg
>   456   bbbb     eeee  hhhh
>   789   cccc     ffff  iiii
>
>何卒、よろしくお願いいたします。


これに関しては、まず、以下のコードでテキストファイルが
正常にオープン出来るか否かの確認です。

新規ブックの標準モジュールに

'=========================================================
Sub test()
  Dim bk As Workbook
  Set bk = open_text("c:\My Documents\testarea\sm.txt")
'              ↑ここに実際のファイル名を記述してください
  MsgBox bk.Name & ":::" & bk.ActiveSheet.Name
End Sub
'========================================================
Function open_text(flnm As String) As Workbook
  On Error Resume Next
  Dim bk As Workbook
  Workbooks.OpenText Filename:=flnm, StartRow:=1 _
       , DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
       , ConsecutiveDelimiter:=True, Tab:=True _
       , Semicolon:=False, Comma:=False _
       , Space:=True, Other:=False _
       , FieldInfo:=Array(Array(1, 1), Array(2, 1) _
             , Array(3, 1), Array(4, 1))
  If Err.Number <> 0 Then
    MsgBox Err.Number & " : " & Err.Description
    Set open_text = Nothing
  Else
    Set open_text = ActiveWorkbook
    End If
End Function

上記のtestを実行して正常にテキストファイルが読み込まれていますか?


以上の2点について
記述して下さい。

【29577】Re:フォームのテキストボックス
回答  awu  - 05/10/8(土) 12:21 -

引用なし
パスワード
   質問内容に曖昧な部分がありますが、ユーザーフォームに配置した
テキストボックスのことだとして、テキストファイルの区切り文字が、
スペースか、または、TABの場合は、こんな感じで如何でしょうか。

この内容からは、多分、テキストファイルから直接読込みたいのでは・・・?

条件が違う場合は、適当にイジッテくださいね。

Private Sub TextBox1_AfterUpdate()
Dim Fnum As Integer
Const Fname = "C:\Data\ファイル名.txt"
Dim LineData As String
Dim Ary
Fnum = FreeFile
Open Fname For Input As Fnum
Do Until EOF(Fnum)
  Input #Fnum, LineData
  Ary = Split(LineData, " ") ' TAB区切りの場合は、 vbTab
  If Ary(0) = Me.TextBox1.Value Then
    Me.TextBox2.Value = Ary(1)
    Me.TextBox3.Value = Ary(2)
    Me.TextBox4.Value = Ary(3)
    Exit Do
  End If
  Me.TextBox2.Value = ""
  Me.TextBox3.Value = ""
  Me.TextBox4.Value = ""
Loop
Close #Fnum
End Sub

【29579】Re:フォームのテキストボックス
回答  だるま WEB  - 05/10/8(土) 14:04 -

引用なし
パスワード
   こんにちは

テキストファイルは「テーブル.txt」という名前でマクロブックと同じフォルダ。
項目間の区切りはタブ。
表示のタイミングはCommandButton1をクリックした時。

として作ってみました。^d^

===== UserForm1モジュール =====
Option Explicit

Private Dic As Object

Private Sub UserForm_Initialize()
  Dim myPath As String
  Dim N As Integer
  Dim D As String
  Dim Itm As Variant
  
  Set Dic = CreateObject("Scripting.Dictionary")
  
  myPath = ThisWorkbook.Path & "\テーブル.txt"
  N = FreeFile
  Open myPath For Input As #N
  Do Until EOF(N)
    Line Input #N, D
    Itm = Split(D, vbTab)
    Dic.Item(CStr(Itm(0))) = Itm
  Loop
  Close #N
End Sub

Private Sub CommandButton1_Click()
  Dim V As Variant
  With Me
    If Dic.Exists(.TextBox1.Value) Then
      V = Dic.Item(.TextBox1.Value)
      .TextBox2.Value = V(1)
      .TextBox3.Value = V(2)
      .TextBox4.Value = V(3)
    Else
      .TextBox2.Value = ""
      .TextBox3.Value = ""
      .TextBox4.Value = ""
    End If
  End With
End Sub

Private Sub UserForm_Terminate()
  Set Dic = Nothing
End Sub

【29581】Re:フォームのテキストボックス
発言  ichinose  - 05/10/8(土) 15:21 -

引用なし
パスワード
   >▼若葉 さん:
表題にフォームとありましたね!!
失礼しました。
下記のコードで読込みが成功すれば、

後は、読み込んだデータのあるセル範囲に対して


Application.matchを使用すれば

マスターデータの読込み・更新が可能かと思います。
Excelでのマスターデータの管理としては
一般的な方法だと思いますが、検討してみて下さい


>
>'=========================================================
>Sub test()
>  Dim bk As Workbook
>  Set bk = open_text("c:\My Documents\testarea\sm.txt")
>'              ↑ここに実際のファイル名を記述してください
>  MsgBox bk.Name & ":::" & bk.ActiveSheet.Name
>End Sub
>'========================================================
>Function open_text(flnm As String) As Workbook
>  On Error Resume Next
>  Dim bk As Workbook
>  Workbooks.OpenText Filename:=flnm, StartRow:=1 _
>       , DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
>       , ConsecutiveDelimiter:=True, Tab:=True _
>       , Semicolon:=False, Comma:=False _
>       , Space:=True, Other:=False _
>       , FieldInfo:=Array(Array(1, 1), Array(2, 1) _
>             , Array(3, 1), Array(4, 1))
>  If Err.Number <> 0 Then
>    MsgBox Err.Number & " : " & Err.Description
>    Set open_text = Nothing
>  Else
>    Set open_text = ActiveWorkbook
>    End If
>End Function

9059 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free