VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 コマンドボタン関係のメニュー
1.テキストボックスにフォーカスが移動した時にカーソルを指定位置に設定
2.テキストボックスに数値しか入力出来ないように制限する
3.フォーカスのあるテキストボックスを視覚化する
4.テキストファイル読み込み表示及びテキストボックスのデータを保存
5.テキストボックスの総行数・現在行・現在桁の取得
6.複数行テキストボックスの指定行の文字列を取得する
7.SendInputV6.dll を使っての Enter キーでのフォーカス移動
8.テキストボックスへの貼り付け防止(DLLを使用しての簡単なサブクラス化)
9.テキストボックスで縦方向中央揃え・下揃え・上揃えをする
10.エクセルファイル(.xls)をテキストボックスに表示及び編集保存する
11.2つのテキストボックスのスクロールの同期を取る改良版
12.
13.
14.
15.
16.
17.
18.
19.
20.その他、当サイト内に掲載しているテキストボックスに関するサンプル


10.エクセルファイル(.xls)をテキストボックスに表示及び編集保存する
1.エクセルファイル(.xls)をテキストボックスに表示
2.エクセルファイル(.xls)の指定行又は指定のセルデータをテキストボックスに表示
3.エクセルファイル(.xls)の指定行又は指定のセルデータを書き換え保存
4. 
5. 
6. 

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:Microsoft ActiveX Data Objects 2.8 Library 参照設定方法参照
使用 API:
その他 :
    :
このページのトップへ移動します。 1.エクセルファイル(.xls)をテキストボックスに表示
基本的な設定や使用データは、4.xls (エクセル)ファイルを ADO を使って、 MSHFlexGrid へ表示 と同様です。
別途、Text1 のプロパティの設定で、MultiLine = True ScrollBars = vbBoth FontName = "MS ゴシック" FontSize = 12 等に設定しておいて下さい。(以下のサンプルも同様です。)

Private Sub Command1_Click()
  Dim CN     As New ADODB.Connection
  Dim RS     As New ADODB.Recordset
  Dim strSQL   As String
  Dim FolderName As String
  Dim DataFile  As String
  Dim SheetNeme  As String
  Dim myData   As String
  Dim i      As Long
  Dim myWork   As String

  FolderName = App.Path
  DataFile = FolderName & "\dbtest.xls"
  SheetNeme = "dbtest"
  CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DataFile & _
             ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2"""
  CN.Open
  strSQL = "Select * From [" & SheetNeme & "$]"
  RS.Open strSQL, CN, adOpenKeyset, adLockOptimistic

  '末尾レコードまでのデータを読込
  Do Until RS.EOF
    With RS
      For i = 0 To .Fields.Count - 1
        '各列のデータを取得
        Select Case i
          Case 0
            myWork = fPadLeft(.Fields(i), 4, " ") & " "
          Case 1, 3
            myWork = fStrCut(.Fields(i), 11)
          Case 2
            myWork = fStrCut(.Fields(i), 6)
          Case 4
            myWork = fStrCut(.Fields(i), 10)
          Case 5, 6
            myWork = fPadLeft(Format$(.Fields(i), "#,###"), 8, " ")
          Case 7
            myWork = fPadLeft(Format$(.Fields(i), "###.0"), 6, " ") & vbCrLf
        End Select
        myData = myData & myWork
      Next i
      .MoveNext     '次のレコードに移動
    End With
  Loop
  '取得したデータをテキストボックスに表示
  Text1.Text = myData
  RS.Close
  CN.Close
  Set RS = Nothing
  Set CN = Nothing
End Sub

Private Function fPadLeft(ByVal myData As String, ByVal CutLen As Long, ByVal CutStr As String) As String
'文字を右寄せし、指定した文字列の文字数になるまで左側に指定した文字(0 や " " 等)を埋め込みます。
  Dim tmp As String
  tmp = Right$(String$(CutLen, CutStr) & myData, CutLen)
  fPadLeft = tmp
End Function

Private Function fStrCut(ByRef CutTxt As String, ByVal CutLen As Long) As String
'半角・全角の混在する文字列を半角換算文字長で取り出し
  Dim myLen As Long, SysCodeTxt As String
  SysCodeTxt = StrConv(CutTxt, vbFromUnicode)       '文字列を変換
  myLen = LenB(SysCodeTxt)                '半角換算のバイト数を取得
  If myLen <= CutLen Then                 '指定の長さより短い場合
    fStrCut = CutTxt & Space$(CutLen - myLen)      '足りない分はスペースで
  Else  '文字列の方が長い場合、指定のバイトでカットする
    fStrCut = StrConv(LeftB$(SysCodeTxt, CutLen), vbUnicode)
    If InStr(fStrCut, vbNullChar) > 0 Then
      '漢字1バイト目で分断された場合の処理
      fStrCut = Left$(fStrCut, InStr(fStrCut, vbNullChar) - 1) & " "
    End If
  End If
End Function

  上記実行結果
 

べた書きのままなら、もう少しコードは簡単になるのですが、あまりにも味気ないので、MSHFlexGrid の印刷設定のところで使っていた自作の文字列関数を使ってレイアウトしてみました。
これを利用して、エクセルファイルに保存してあるデータの必要な部分をテキストボックス上に書きだしする等すれば、結構使用範囲も広がるかと思います。

このページのトップへ移動します。 2.エクセルファイル(.xls)の指定行又は指定のセルデータをテキストボックスに表示
基本的な設定等は、1.のサンプルと同様です。

Private Sub Command2_Click()
  Dim CN     As New ADODB.Connection
  Dim RS     As New ADODB.Recordset
  Dim strSQL   As String
  Dim FolderName As String
  Dim DataFile  As String
  Dim SheetNeme  As String
  FolderName = App.Path          'データのあるフォルダーを取得
  DataFile = FolderName & "\dbtest.xls"  'データファイル名を取得(通常で)
  SheetNeme = "dbtest"          'Excelファイルのシート名
  CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DataFile & _
      ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2"""
  CN.Open
  strSQL = "Select * From [" & SheetNeme & "$]"
  RS.Open strSQL, CN, adOpenKeyset, adLockOptimistic
  With RS
    .MoveFirst               '最初のレコードに移動
    .Move CLng(3)              '3行目に移動
    Text1.Text = .Fields(1)         ' 1 列を取得
  End With
  RS.Close
  CN.Close
  Set RS = Nothing
  Set CN = Nothing
End Sub

上記では、単純に4行目の2列目(実)データを取得しておりますが、どのようなデータ範囲でも取得する事が可能です。
これを利用して指定行のデータを取得するとか色々な事に使えるかと思います。

このページのトップへ移動します。 3.エクセルファイル(.xls)の指定行又は指定のセルデータを書き換え保存
基本的な設定等は、1.のサンプルと同様です。

Private Sub Command3_Click()
  Dim CN     As New ADODB.Connection
  Dim RS     As New ADODB.Recordset
  Dim strSQL   As String
  Dim FolderName As String
  Dim DataFile  As String
  Dim SheetNeme  As String
  FolderName = App.Path            'データのあるフォルダーを取得
  DataFile = FolderName & "\dbtest.xls"    'データファイル名を取得(通常で)
  SheetNeme = "dbtest"            'Excelファイルのシート名
   'データベースに接続するための情報を設定する
  CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DataFile & _
      ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2"""
  CN.Open   'コネクションをオープン
  'Recordsetオブジェクトのオープン
  strSQL = "Select * From [" & SheetNeme & "$]"
  RS.Open strSQL, CN, adOpenKeyset, adLockOptimistic
  Do Until RS.EOF
    With RS
      '氏名="木内 美子" の場合 "井上 美子" に書き換える
      If .Fields(1) = "木内 美子" Then
        .Fields(1) = "井上 美子"
        .Update
      End If
      .MoveNext     '次のレコードに移動
    End With
  Loop
  RS.Close
  CN.Close
  Set RS = Nothing
  Set CN = Nothing
End Sub

上記では、氏名="木内 美子" の場合 "井上 美子" に書き換えて保存しております。
エクセルがインストールされていない環境でも単純な編集ならこれででもできますし、今まで VBA で処理していた事が VB6.0 から直接できたり、アイデア次第では結構使えるのではないでしょうか。

このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
Excel を使用せずに Excel ファイルを編集する エクセルファイル Excel ファイル / テキストボックス TextBox  xls ファイル 編集  表示 保存
Excel ファイルをテキストボックスに表示 Excel ファイルを TextBox に表示


このページのトップへ移動します。