Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11697
Последний выпуск: 19.06.2015

Экспорт из ячейки Excel в TextBox

88K
20 февраля 2014 года
Buba70
5 / / 20.02.2014
Доброго Всем дня!
В ячейку А1 поступают данные в режиме On-line по DDE. Не получается подключиться к данной ячейке из формы, чтобы данные отображались в TextBox1. Событие WorkSheet_Change не работает в этом случае. Надо как –то по другому. Кто сталкивался с данным вопросом подскажите.
С Уважением. Спасибо.
240
20 февраля 2014 года
pashulka
979 / / 19.09.2004
Проверьте не выполняется ли событие Worksheet_Calculate()
Если нет, то посмотрите в справке информацию, касательно метода SetLinkOnData об'екта Workbook, если да, то всё равно можно ознакомиться :)

P.S. В принципе, можно связать ячейку рабочего листа и TextBox1, посредством использования свойства ControlSource, однако необходимо учитывать, что эта связь двухсторонняя, т.е. не только изменение данных в ячейке будет отображаться в текстовом поле, но и наоборот.
88K
20 февраля 2014 года
Buba70
5 / / 20.02.2014
Код пишу в VS2010 на VB.Net. В свойствах TexBox св-ва ControlSouce просто нет. Это в VBA, т.к. он интегрирован в Excel. Поэтому и возникла проблема.
Код с событием 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
240
21 февраля 2014 года
pashulka
979 / / 19.09.2004
Buba70, Сорри, тэг VB.Net не заметил, думал, что речь идёт о связке VBA + Excel
319
22 февраля 2014 года
UserNet2008
695 / / 03.04.2010
Давно я не работал с COM
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
Примерно так or вот на скорую руку.
88K
23 февраля 2014 года
Buba70
5 / / 20.02.2014
На скорую руку не всегда OK! К сожалению у меня не работает. Правильный ход мысли у PUSHULKI, методом Worksheet_Calculate(), но что-то не стыкуется.
Кто в теме помогайте, пожалуйста.
С Уважением.
319
23 февраля 2014 года
UserNet2008
695 / / 03.04.2010
У Вас вообще не чего не получается!
Специально для Вас вбил свой код в 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
88K
24 февраля 2014 года
Buba70
5 / / 20.02.2014
Уважаемый UserNet ни в коем случае не хотел Вас обидеть! Видимо задачу Вы немного не поняли. В открытой книге Excel, в ячейку А1 вводите число n, затем Enter
и у Вас в 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
240
24 февраля 2014 года
pashulka
979 / / 19.09.2004
Buba70, т.к. ячейка в Excel может содержать значение ошибки (в случае с DDE, возможно, только теоретически), то в VB(A) имеет смысл использовать функцию CStr(), не исключено, что в VB.Net это тоже не будет лишним ...

 
Код:
Me.TextBox1.Text = CStr(xlSheet1.Cells(1, 1).Value)
или

 
Код:
Me.TextBox1.Text = CStr(xlSheet1.Range("A1").Value)
88K
24 февраля 2014 года
Buba70
5 / / 20.02.2014
Да, забыл один нюанс. Необходимо в любую ячейку Excel ввести формулу =Сегодня(). Это подсказали знающие люди. Тогда точно все работает.
240
24 февраля 2014 года
pashulka
979 / / 19.09.2004
Уверен, что кроме вышеупомянутой формулы, можно также использовать любую volatile функцию, в т.ч. стандартные функции рабочего листа :

без аргументов : =ТДАТА(), =СЛЧИС()
с аргументами : =ЯЧЕЙКА(), =СМЕЩ(), =ДВССЫЛ()

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог