痔になりやすい生活習慣とは?

いつもお世話になっております。

VisudalBasic6の開発環境で
Microsoft DataGrid Control(SP6)のDataGridコントロールを使用して、
Oracleデータベースから得られたテーブルのデータを表示させているのですが、
DataGridコントロールに表示されたすべてのデータをコピーし、エクセルなどにペーストすることはできないでしょうか?

方法をご存知の方おられましたらご教授願えないでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (5件)

DataGrid1の親オブジェクトをくっつけたので


実際に合わせて変更してください。親をForm1としています。
縦スクロールバーを動かしてデータを見えるようにしました。


Private Sub Command1_Click()
Dim h As Long
Dim i As Long
Dim j As Long
Dim exlApp As Workbook
Dim strFile As String
Dim lnRow As Long
Dim lnCol As Long

'パス
strFile = "C:\test\5\myAAA.xls"
Set exlApp = GetObject(strFile, "Excel.Sheet")

'ヘッダのコピペ
For h = 0 To Form1.DataGrid1.Columns.Count - 1
exlApp.Worksheets("sheet1").Cells(1, h + 1) = Form1.DataGrid1.Columns(h).Caption
Next h

'データのコピペ
j = 1
Do While Form1.DataGrid1.Row <= Form1.DataGrid1.VisibleRows - 1
For i = 0 To Form1.DataGrid1.Columns.Count - 1
Form1.DataGrid1.Col = i
exlApp.Worksheets("sheet1").Cells(j + 1, i + 1).Value = Form1.DataGrid1.Text
Next
j = j + 1
If Form1.DataGrid1.Row < Form1.DataGrid1.VisibleRows - 1 Then
Form1.DataGrid1.Row = Form1.DataGrid1.Row + 1
Else
Exit Do
End If
Loop

exlApp.Windows(1).Visible = True
exlApp.Save
exlApp.Application.Quit
Set exlApp = Nothing
End Sub
    • good
    • 0
この回答へのお礼

教えていただいたソースを元に
以下のソースを作りました。

Private Sub Command1_Click()

  Dim i As Long
  Dim j As Long
  Dim h As Long
  Dim strFile As String

  On Error Resume Next

  CommonDialog1.Filter = "CSVファイル(*.CSV)|*.CSV"
  CommonDialog1.ShowSave

  'ヘッダのコピペ
  For h = 1 To DataGrid1.Columns.Count - 1
    If strFile = vbNullString Then
      strFile = DataGrid1.Columns(h).Caption
    Else
      strFile = strFile + "," + DataGrid1.Columns(h).Caption
    End If
  Next h

  strFile = strFile + vbCrLf

  j = 1

  Do While Form1.DataGrid1.Row <= Form1.DataGrid1.VisibleRows - 1
    For i = 1 To Form1.DataGrid1.Columns.Count - 1
      Form1.DataGrid1.Col = i
      If i = 1 Then
        strFile = strFile + DataGrid1.Text
      Else
        strFile = strFile + "," + DataGrid1.Text
      End If
    Next

    j = j + 1

    strFile = strFile + vbCrLf
    If Form1.DataGrid1.Row < Form1.DataGrid1.VisibleRows - 1 Then
      Form1.DataGrid1.Row = Form1.DataGrid1.Row + 1
    Else
      Exit Do
    End If
  Loop

  Dim fileNo As Integer
  fileNo = FreeFile
  Open CommonDialog1.FileName For Output As #fileNo
  Print #fileNo, strFile;

End Sub

エクセルシートに書き込むと動作が重くなるため、CSV形式での出力にしました。
無事に表データをすべて出力することができ、本当に助かりました。
有難う御座いました。

お礼日時:2011/04/08 10:35

No4の変数宣言で、


Dim lnRow As Long
Dim lnCol As Long
の二つは使っていないので削除してください。
    • good
    • 0

No2です。

参照設定で
Microsoft Excel xx Object Library
にチェックを入れておいてください。

この回答への補足

回答有難う御座います。

教えていただいたソースコードを使い、実行しましたが、
ボタンを押した瞬間に、DataGridで表示されている範囲のデータしか正常に出力されず、それ以降のデータは、全て同じデータとなります。
具体的には、18行を表示させており、縦スクロールバーを使っています。
出力されるデータは、1~18行で19行目以降は18行目と同じデータになります。

補足日時:2011/04/07 18:22
    • good
    • 0

ADOとレコードセットを利用する方法も


ありますが、以下でどうですか。

Private Sub Command1_Click()

Dim h As Long
Dim i As Long
Dim j As Long
Dim exlApp As Workbook
Dim strFile As String

'パス
strFile = "C:\test\5\myAAA.xls"
Set exlApp = GetObject(strFile, "Excel.Sheet")


'ヘッダのコピペ
For h = 0 To DataGrid1.Columns.Count - 1
exlApp.Worksheets("sheet1").Cells(1, h + 1) = DataGrid1.Columns(h).Caption
Next h
'データのコピペ
For i = 0 To DataGrid1.ApproxCount - 1
DataGrid1.Row = i
For j = 0 To DataGrid1.Columns.Count - 1
exlApp.Worksheets("sheet1").Cells(i + 2, j + 1).Value = DataGrid1.Columns(j).Text
Next j
Next i

exlApp.Windows(1).Visible = True
exlApp.Save
exlApp.Application.Quit
Set exlApp = Nothing

End Sub
    • good
    • 0

Clipboard クラス


http://msdn.microsoft.com/ja-jp/library/system.w …
を使ってみるとか。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

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

QDataGridの列の数、行の数

いつもお世話になっております
VB6.0でDataGridをつかって
Accessのようにデータを表示しているのですが
表示しているデータの最大列数と最大行数を
求めたいのですが、やり方がわかりません
どうしたら最大列数と最大行数を求められるか
教えて下さい!お願いします

Aベストアンサー

こんばんは
最大列数は、DataGrid.Columns.Countで
最大行数は、表示してるレコードセットのRecordCountプロパティから得る。

でいかがでしょうか?

QVB6.0 DataGridでのfirstRowの設定について

VB6.0でデータベースの内容を更新するプログラムを作成しています。
1.データベースの内容をデータグリッドに読み込む
2.グリッドより1行を選択、レコードを新しくOpenしたダイアログに表示する。
3.ダイアログ内でレコードを修正・更新する。更新した内容をデータグリッドに反映させるため、グリッドのRefreshを行う。
4.ダイアログを閉じる。
とした場合、3のリフレッシュでブックマークの位置が変わってしまいます。

ブックマークを元通りに戻すため、2でブックマークの位置をバリアント型変数に退避し、4以降でブックマークを退避しておいた値に戻すようにしましたが、こうすると設定しなおしたブックマークの行がグリッドの先頭に表示されてしまい、ダイアログを開く前のグリッドとは違った表示になってしまいます。

FirstRowプロパティを使えば良いような気がしますが、FirstRowを単にストリング型変数を使って退避し、元に戻すわけではないようです。
(元に戻すときにエラーになります。)

FirstRowプロパティをうまく使われている方、ぜひご教示ください。
お願いいたします。


Public Sub Click_Mainte修正ボタン(Frm As Form, Dgd As DataGrid, AdoD As Adodc, NewFrm As Form)
Dim lngRow As Long
Dim strFirstRow As String
Dim varRow As Variant

On Error Resume Next
If Not Chk_Records(Dgd, Frm) Then GoTo Exit_
strFirstRow = Dgd.FirstRow
varRow = Dgd.Bookmark
Load NewFrm
NewFrm.Show vbModal
AdoD.Refresh
Dgd.Bookmark = varRow
Dgd.FirstRow = strFirstRow  '「ブックマークの値が不正です」エラーになってしまう。
Exit_:
On Error GoTo 0
End Sub

VB6.0でデータベースの内容を更新するプログラムを作成しています。
1.データベースの内容をデータグリッドに読み込む
2.グリッドより1行を選択、レコードを新しくOpenしたダイアログに表示する。
3.ダイアログ内でレコードを修正・更新する。更新した内容をデータグリッドに反映させるため、グリッドのRefreshを行う。
4.ダイアログを閉じる。
とした場合、3のリフレッシュでブックマークの位置が変わってしまいます。

ブックマークを元通りに戻すため、2でブックマークの位置をバリアント型...続きを読む

Aベストアンサー

Refresh後に Bookmark > FirstRowの順に処理するのではなく、FirstRow > BookMarkの順に処理すればいいようですよ

FirstRowの復元は FirstRowに代入するのではなく、Bookmarkに代入してやるようにしてみましょう
保存しておく FirstRowはVariant型のほうがよさそうです

AdoD.Refresh
Dgd.Bookmark = varFirstRow
Dgs.Bookmark = varRow

QDataGridViewの、選択されている行を取り出したい

いつもお世話になっております。

DataGridViewに関して、選択されているレコードをDataRow型で別フォームに渡してから、各項目をテキストボックスに表示したいのですがうまくいきません(DataRow型にこだわっているわけではないのですが、レコード1件丸ごと取得する型を他に知らないので例として挙げました)。

DataGridViewのCurrentRowプロパティや、SelectedRows(0)をDataRow型に代入する試みをしましたが、型変換できませんでした。

DataGridViewで選択されているレコード一件まるごと変数に渡す方法というのはあるのでしょうか?

ちなみに、SelectionModeはSelectFullRowに、MultiSelectはFalseにしてあります。

ご存知の方ご教授いただけると助かります。
よろしくお願いします。

Aベストアンサー

>おっしゃるとおりやってみたのですが、どうもやはり型変換ができませんでした。
>参照しているのはDataTable型なわけですから、DataRowも取り出せそうな気はするのですが。。。

えー・・・スイマセン
今度はコーディングして確認してみたところ、
なにやら、1ステップすっ飛ばしていました

下記の手順にて取得可能です

[C#]
System.Windows.Forms.DataGridViewRow dgr = this.DataGridView1.CurrentRow;
System.Data.DataRowView drv = (System.Data.DataRowView)dgr.DataBoundItem;
System.Data.DataRow dr = (System.Data.DataRow)drv.Row;

[VB2005]
Dim dgr As System.Windows.Forms.DataGridViewRow = Me.DataGridView1.CurrentRow
Dim drv As System.Data.DataRowView = CType(dgr.DataBoundItem, System.Data.DataRowView)
Dim dr As System.Data.DataRow = CType(drv.Row, System.Data.DataRow)

※最後のキャストを変更すれば、型付データセットにも対応可能のはずです

>おっしゃるとおりやってみたのですが、どうもやはり型変換ができませんでした。
>参照しているのはDataTable型なわけですから、DataRowも取り出せそうな気はするのですが。。。

えー・・・スイマセン
今度はコーディングして確認してみたところ、
なにやら、1ステップすっ飛ばしていました

下記の手順にて取得可能です

[C#]
System.Windows.Forms.DataGridViewRow dgr = this.DataGridView1.CurrentRow;
System.Data.DataRowView drv = (System.Data.DataRowView)dgr.DataBoundItem;
System.Data...続きを読む

QDataGridViewのデータの引渡しについて

VB2005の勉強をしている者です。
いろいろ調べたのですが、どうしてもわからないことがあるので、
教えてください。

現在行なおうとしているこは、
DataGridViewで選択されている行のデータ全てを、
他のフォームに渡すということです。

いろいろ考えた結果、選択された行のデータを配列に保持して、
その配列を別のフォームに渡せば
希望どおりの動きをすることはわかったのですが、
どうも無駄な処理をしてしまっている気がするんです。

例えば、選択した行のデータのみを、
新たに宣言したDataTableにコピーして、
そのDataTableを他のフォームに渡すというようなことは、
できないのでしょうか?

もしくは、
Form2.show(DataGridView1.CurrentRow)
のように、直接渡すことができれば、一番嬉しいのですが・・・

なにぶん、独学で勉強している初心者なので、
かなり的外れな質問になってしまっているかもしれませんが、
もしお分かりでしたら、アドバイスを下さい。

よろしくお願いします。

VB2005の勉強をしている者です。
いろいろ調べたのですが、どうしてもわからないことがあるので、
教えてください。

現在行なおうとしているこは、
DataGridViewで選択されている行のデータ全てを、
他のフォームに渡すということです。

いろいろ考えた結果、選択された行のデータを配列に保持して、
その配列を別のフォームに渡せば
希望どおりの動きをすることはわかったのですが、
どうも無駄な処理をしてしまっている気がするんです。

例えば、選択した行のデータのみを、
新たに宣言したDat...続きを読む

Aベストアンサー

元のデータテーブルのクローンを作る。
Dim dt2 As DataTable = 元のデータテーブル.Clone
クローンされたデータテーブルに、選択行のデータをインポートする。
dt2.ImportRow(元のデータテーブル.Rows(選択行のインデックス))

これで「選択した行のデータのみを、新たに宣言したDataTableにコピー」は出来ます。
直書きなので、コードに不備があるかもしれませんが、そこはご容赦下さい。

QVBのデータグリッドが表示されない!!!

こんにちはtmgmです。
データグリッドが表示されません。

状況としては
1.プログラムは正常に動いています。(「接続に成功しました」メッセージ、「レコード取得に成功しました」メッセージ、ともに表示されます。)

2.しかしデータグリッドには何一つ表示されません。(ツールボックスから貼り付けたままの状態です)

3.参照設定はMicrosoft ActiveX Data Objects 2.5 Library、コンポーネントはMicrosoft DataGrid Control6.0(SP5)(OLEDB)です。

どなたかお分かりになる方いらっしゃいますでしょうか?非常に困っています。
ご返答よろしくお願いします。

------------------------------------------------
Dim CONN As ADODB.Connection

'レコードセットの宣言
Dim RECO As ADODB.Recordset
'接続の宣言
Set CONN = New ADODB.Connection

'接続のプロパティ
With CONN
.ConnectionString=
    "provider=Microsoft.jet.oledb.4.0;" _
& "data source=C:\TESTMDB.mdb"
.Open
End With

MsgBox "データベース接続に成功しました"


  'レコードセットのプロパティ
Set RECO = New Recordset
With RECO
.ActiveConnection = CONN
.Source = "SELECT ~(省略)"
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Properties("IRowsetIdentity") = True
.Open
End With


  'レコードセットをデータグリッドに連結
Set D_GRID.DataSource = RECO

MsgBox "レコードセット取得に成功しました
------------------------------------------------

こんにちはtmgmです。
データグリッドが表示されません。

状況としては
1.プログラムは正常に動いています。(「接続に成功しました」メッセージ、「レコード取得に成功しました」メッセージ、ともに表示されます。)

2.しかしデータグリッドには何一つ表示されません。(ツールボックスから貼り付けたままの状態です)

3.参照設定はMicrosoft ActiveX Data Objects 2.5 Library、コンポーネントはMicrosoft DataGrid Control6.0(SP5)(OLEDB)です。

どなたかお分かりになる方いらっしゃいます...続きを読む

Aベストアンサー

#3の続き
SQL文のField名とグリッドのField名は一致していますか?括弧などあるとうまくいかない場合があります。
その場合は、SQL分でAS<別名>をつけグリットでも別名をfield名にするとうまきいきます。

これでだめならadodc経由でつないでみてはいかがでしょうか?

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

QVB6 配列を初期化したい

VB6でループさせて配列に値を入れて、計算させて最終的に求めたい値をRとします。そのときループで繰り返すためか同じ配列に値を入れてどんどん値がでかくなりRの値がおかしくなってしまいます;
おそらく問題は一回前に入れた配列がそのままのこってしまってるからなのだと思うのですが;
配列の中の値をクリアする方法はないものでしょうか?
一応、配列=0として初期化しようとしても値は変わらず前のが残ったままになってしまっています;
どなたかわかる方いらっしゃいましたらご回答宜しくお願いします

その他何かいい方法があればそれも教えていただけたらと思います

Aベストアンサー

Eraceステートメントを使用

  Dim a() as Long
  Dim s(100) as String
  Dim x() as Long

  Erase a     ’要素が0になる
  Erase s     ’要素が""になる

  Redim x(100) as Long

  Erase x      ’メモリを解放

注)VB2005の場合は動作が異なるので注意して下さい。

QMSFlexGridとDataGridの違いについて

VBの勉強をしております。
WindowsXP、VB6.0です。

標記の件について質問させてください。
MSFlexGridは、グリッドの結合や色を付けたりするのに適している。
DataGridはエクセルのように、直接グリッド内を編集できるが、結合は無理で、色付けの設定はグリッド単位では指定できない。

2つのグリッドのどちらを使えば良いのか分からず、自分で調べてみた所、以上のような違いがあるのでは、という所までは分かりました。

行いたい処理は、
・ファイルからデータを取り出し、グリッドへ表示。データの追加、修正、削除を行い、ファイルへ保存する。
機能として、検索とソートを行える。
また、データをクリックした際に、セルではなく、行全体の色を変更し、「行が選択されている」という見た目にしたい。

以上のような考えがあるのですが、実装が簡単なのはどちらのグリッドなのでしょうか?
また、他に上記のような処理が可能なコントロールがあれば教えていただけないでしょうか?

以上、初心者なもので、文章が理解しづらいかもしれないですが、よろしくお願いいたします。

VBの勉強をしております。
WindowsXP、VB6.0です。

標記の件について質問させてください。
MSFlexGridは、グリッドの結合や色を付けたりするのに適している。
DataGridはエクセルのように、直接グリッド内を編集できるが、結合は無理で、色付けの設定はグリッド単位では指定できない。

2つのグリッドのどちらを使えば良いのか分からず、自分で調べてみた所、以上のような違いがあるのでは、という所までは分かりました。

行いたい処理は、
・ファイルからデータを取り出し、グリッドへ表示。デー...続きを読む

Aベストアンサー

こういうコントロールは
(1)officeやVBなど言語に付属しているもの
MSFlexGrid、DataGridなど
(2)コントロールなど、開発者・プロ向けの部品を作っている専門業者が、市販しているもの
一例
http://www.componentsource.co.jp/features/spreadsheet/index.html
http://www.xlsoft.com/jp/products/SSG/product.html
とあります。一般には(2)はフリーは少なく、価格は高価と思います
の2つのタイプが有ることを念頭にGoogleででも照会してみて、読んだらどうですか。
ーー
また質問者の課題は、スプレッドシート型で有ると思います。
一例
「スプレッドシート コントロール」でGoogleで照会
ーー
(1)はWEBページ用には
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_100.html
の「ユーザーフォームにワークシートを表示させる」
などが有るようです。
エクセルを使うケースも有るのかもしれません。
ーー
>VBの勉強をしております。
もし始めて間もないのなら、複雑な課題を早くから良くやりますね。

こういうコントロールは
(1)officeやVBなど言語に付属しているもの
MSFlexGrid、DataGridなど
(2)コントロールなど、開発者・プロ向けの部品を作っている専門業者が、市販しているもの
一例
http://www.componentsource.co.jp/features/spreadsheet/index.html
http://www.xlsoft.com/jp/products/SSG/product.html
とあります。一般には(2)はフリーは少なく、価格は高価と思います
の2つのタイプが有ることを念頭にGoogleででも照会してみて、読んだらどうですか。
ーー
また質問者の課題は...続きを読む

QVB.NETのDataGridで、選択行の特定の列の内容を取得したい

タイトルにあるとおり、DataGridを使用している場合、実行時に選択された行の特定の列の内容を取得するにはどのようにすればよいのでしょうか?

DataGridは複雑で、まだよくわかっていません。
よろしくお願いします。

Aベストアンサー

選択している行番号は、dataGrid1.CurrentRowIndexでわかります。
行、列を指定して各セルにアクセスするには、
dataGrid1(行番号,列番号)でいいので
dataGrid1(dataGrid1.CurrentRowIndex,列番号)
で選択されている行の特定の列の内容を取得できます。
註:番号は、0始まり

Q【VB】コンボボックスにデータベースから取り出した値を入れたい

VB2005です。

表題の通りですがやり方がよくわかりません。
データベースに接続し、
SQLで重複しない値を取り出すところまではできています。

SQL=SELECT DISTINCT FieldName FROM TableName

VB6の時はこんなソースでした
Do Until rs.EOF
   Combo1.AddItem.Fields("FieldName")
   rs.MoveNext
Loop

VB2005ではどう書くのでしょう?
よろしくご教授ください。

Aベストアンサー

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}", dbFilePath)
  Dim sql As String = "SELECT DISTINCT FieldName FROM TableName"
  Dim conn As New OleDbConnection(connectionString)
  Dim query As New OleDbCommand(sql, conn)

  Try
    conn.Open()
    Dim reader As OleDbDataReader = query.ExecuteReader()
    While (reader.Read())
      Me.ComboBox1.Items.Add(reader.Item("FieldName"))
    End While
    reader.Close()
  Catch ex As Exception
    MessageBox.Show(ex.Message)
  Finally
    conn.Close()
  End Try

DataReaderを使用したサンプルです
※DBMSが記述されていないので、接続文字列はアクセスの場合です
※テキスト書きなので試験していません
※DataSetを使用する方法もありますが、コンボボックスに表示する程度ならDataReaderで大丈夫でしょう
※VB2005ならば、TableAdapterという便利なクラスがあるそうです
※VisualStudio2005 まださわってません orz

  Dim dbFilePath As String = "C:\testdb.mdb"
  Dim connectionString As String = String.Format("Provider=Microsoft.Jet.OLEDB.4.0; Data Sourc...続きを読む


人気Q&Aランキング