|
分類:[.NET 全般]
大変お世話になっております。 Excelのセル範囲コピーをしたいのですが、うまくタイミングがとれないようなので教えて下さい。 Excelであらかじめ、セル範囲を指定しておいて、Button4をクリックした時に、クリップボードに入れて、 その内容を処理するものです。 Private Sub Button4_Clickを起動すると、取得出来たり、出来なかったりします。タイマーとか、MsgBoxとか 入れて色々試しましたが、ダメでした。インスタンス??良くわかりませんです。 excel_copyのサブを別ボタンで起動して、Private Sub Button4_Clickの中の’★★★以下を別ボタンで起動すると うまく取得出来ます。どうすれば一度の処理(Private Sub Button4_Click内とか)で可能でしょうか?
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
excel_copy() 'Excelから現在選択されているセルの内容をコピーする。 ’★★★
'クリップボードのデータを取得する Dim data As IDataObject = Clipboard.GetDataObject() Dim ms As System.IO.MemoryStream = _ DirectCast(data.GetData(DataFormats.CommaSeparatedValue), System.IO.MemoryStream) If Not ms Is Nothing Then Dim sr As New System.IO.StreamReader(ms, System.Text.Encoding.Default) 'エンコードして、文字列に変換する Dim str As String = sr.ReadToEnd() Lb_cb1.Text = str Dim sw As New System.IO.StreamWriter(Application.StartupPath & "\1.csv", _ False, _ System.Text.Encoding.GetEncoding("shift_jis")) sw.Write(str) sw.Close() End If End Sub
Sub excel_copy() 'Excelから現在選択されているセルの内容をコピーする。 CC_ac() 'Excelアクティブ SendKeys.Send("{ESC}") SendKeys.Send("^c") 'Excelの現在範囲をコピーする End Sub
Sub CC_ac() 'Excelをアクティブにする。 On Error Resume Next Dim p As System.Diagnostics.Process For Each p In System.Diagnostics.Process.GetProcesses() If Not IntPtr.Zero.Equals(p.MainWindowHandle) Then If p.ProcessName = "EXCEL" Then ActivateWindow(p.MainWindowTitle)'Excelをアクティブにする。 End If End If Next End Sub
|