Экспорт из ячейки Excel в TextBox
В ячейку А1 поступают данные в режиме On-line по DDE. Не получается подключиться к данной ячейке из формы, чтобы данные отображались в TextBox1. Событие WorkSheet_Change не работает в этом случае. Надо как –то по другому. Кто сталкивался с данным вопросом подскажите.
С Уважением. Спасибо.
Если нет, то посмотрите в справке информацию, касательно метода SetLinkOnData об'екта Workbook, если да, то всё равно можно ознакомиться :)
P.S. В принципе, можно связать ячейку рабочего листа и TextBox1, посредством использования свойства ControlSource, однако необходимо учитывать, что эта связь двухсторонняя, т.е. не только изменение данных в ячейке будет отображаться в текстовом поле, но и наоборот.
Код с событием Worksheet_Calculate() я пытался написать, но не получается. Не то чтобы не работает, а именно не получается(не умею)
Уважаемый, pashulka, если Вы в этой теме разбираетесь, подскажите правильный выход.
Код:
Imports Microsoft.Office.Interop
Public Class Form1
Private WithEvents xlApp As Excel.Application
Private WithEvents xlSheet1 As Excel.Worksheet
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
xlApp = New Excel.Application
xlApp.Visible = True
' А дальше у меня беда
End Sub
Private Sub xlSheet1_Change(ByVal Target As Excel.Range)
Invoke(Sub()
...........................................................
.............................................................
End Sub)
End Class
Public Class Form1
Private WithEvents xlApp As Excel.Application
Private WithEvents xlSheet1 As Excel.Worksheet
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
xlApp = New Excel.Application
xlApp.Visible = True
' А дальше у меня беда
End Sub
Private Sub xlSheet1_Change(ByVal Target As Excel.Range)
Invoke(Sub()
...........................................................
.............................................................
End Sub)
End Class
Buba70, Сорри, тэг VB.Net не заметил, думал, что речь идёт о связке VBA + Excel
Step 1
Step 2
Step 3
Код:
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
Private Sub btnStart_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnStart.Click
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
xlApp = New Excel.ApplicationClass
xlWorkBook = xlApp.Workbooks.Open("x:mybook.xlsx")
xlWorkSheet = xlWorkBook.Worksheets("лист1")
'показать в MsgBox
' or так TexBox1.Text = str(xlWorkSheet.Cells(1, 1).value)
MsgBox(xlWorkSheet.Cells(1, 1).value)
'правка ячейки
xlWorkSheet.Cells(1, 1) = "http://codenet.ru"
xlWorkBook.Close()
xlApp.Quit()
releaseObject(xlApp)
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)
End Sub
Private Sub releaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
End Class
Public Class Form1
Private Sub btnStart_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnStart.Click
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
xlApp = New Excel.ApplicationClass
xlWorkBook = xlApp.Workbooks.Open("x:mybook.xlsx")
xlWorkSheet = xlWorkBook.Worksheets("лист1")
'показать в MsgBox
' or так TexBox1.Text = str(xlWorkSheet.Cells(1, 1).value)
MsgBox(xlWorkSheet.Cells(1, 1).value)
'правка ячейки
xlWorkSheet.Cells(1, 1) = "http://codenet.ru"
xlWorkBook.Close()
xlApp.Quit()
releaseObject(xlApp)
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)
End Sub
Private Sub releaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
End Class
Кто в теме помогайте, пожалуйста.
С Уважением.
Специально для Вас вбил свой код в VB2010
Что могу сказать были small errors. Исправил вот рабочий.
Код:
Imports Microsoft.Office.Interop.Excel
Imports Microsoft.Office.Interop
Public Class Form1
Private Sub btnStart_Click(sender As System.Object, e As System.EventArgs) Handles btnStart.Click
Dim xlApp As New Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
xlWorkBook = xlApp.Workbooks.Open("C:\mybook.xlsx")
xlWorkSheet = xlWorkBook.Worksheets("Лист1")
'показать в MsgBox
txtShowExcel.Text = xlWorkSheet.Cells(1, 1).value
MsgBox(xlWorkSheet.Cells(1, 1).value)
xlWorkBook.Close()
xlApp.Quit()
releaseObject(xlApp)
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)
End Sub
Private Sub releaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
End Class
Imports Microsoft.Office.Interop
Public Class Form1
Private Sub btnStart_Click(sender As System.Object, e As System.EventArgs) Handles btnStart.Click
Dim xlApp As New Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
xlWorkBook = xlApp.Workbooks.Open("C:\mybook.xlsx")
xlWorkSheet = xlWorkBook.Worksheets("Лист1")
'показать в MsgBox
txtShowExcel.Text = xlWorkSheet.Cells(1, 1).value
MsgBox(xlWorkSheet.Cells(1, 1).value)
xlWorkBook.Close()
xlApp.Quit()
releaseObject(xlApp)
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)
End Sub
Private Sub releaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
End Class
и у Вас в TextBox1 отображается n. Вводите m Enter - отображается m и т.д.
Вот то, что общими усилиями у меня получилось( работает!):
Imports Microsoft.Office.Interop
Public Class Form1
Private WithEvents xlApp As Excel.Application
Private WithEvents xlSheet1 As Excel.Worksheet
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
xlApp = New Excel.Application
xlApp.Visible = True
xlApp.Workbooks.Open("C:UsersDesktopКнига1.xlsm")
xlSheet1 = xlApp.ActiveWorkbook.ActiveSheet
AddHandler xlSheet1.Calculate, New Excel.DocEvents_CalculateEventHandler(AddressOf xlSheet1_Calculate)
End Sub
Public Sub xlSheet1_Calculate()
Invoke(Sub()
Me.TextBox1.Text = xlSheet1.Cells(1, 1).Value
End Sub)
End Sub
End Class
Код:
Me.TextBox1.Text = CStr(xlSheet1.Cells(1, 1).Value)
Код:
Me.TextBox1.Text = CStr(xlSheet1.Range("A1").Value)
Да, забыл один нюанс. Необходимо в любую ячейку Excel ввести формулу =Сегодня(). Это подсказали знающие люди. Тогда точно все работает.
без аргументов : =ТДАТА(), =СЛЧИС()
с аргументами : =ЯЧЕЙКА(), =СМЕЩ(), =ДВССЫЛ()