Excel

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Excel

Сообщение sashar2 » 06.05.2007 (Вс) 14:15

Давно меня тут не было, да и VB забрасывал. Но все же пришлось вернуться. У меня есть следующий код:
Код: Выделить всё
Dim oXL As Object
Dim oBook As Object
Dim oSheet As Object
Set oXL = CreateObject("Excel.application")
Set oBook = oXL.Workbooks.Add
Set oSheet = oBook.Worksheets.Item(1)
Dim n As Long
Dim str As String

str = "="
For n = 1 To Len(Text7.Text)
    If Mid(Text7.Text, n, 1) = "x" Then
        str = str + "b1"
    Else
        If Mid(Text7.Text, n, 1) = "y" Then
            str = str + "c1"
        Else
            str = str + Mid(Text7.Text, n, 1)
        End If
    End If
Next
oSheet.Cells(1, 1) = str


В Text7 содержится формула, получается в переменной str вполне нормальная вещь, например, "=b1*b1+c1*c1". Но ошибочка 1004 (Application-defined or object-defined error) выходит после выполнения последней строки, причем, если записать тоже самое в ручную, то все нормально... В чем проблема? Мне бы просто нужно загонять програмно формулу в ячейку и потом получать от туда результат.

И после этого кода, когда я открываю excel У меня новая книга появляется, что надо написать, чтобы удалить новую книгу?
Последний раз редактировалось sashar2 06.05.2007 (Вс) 14:26, всего редактировалось 1 раз.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.05.2007 (Вс) 14:25

В чем проблема?

В том, что надо использовать свойство .formula, наверное?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 06.05.2007 (Вс) 14:27

GSerg писал(а):
В чем проблема?

В том, что надо использовать свойство .formula, наверное?


Пробовал - не работает...

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 06.05.2007 (Вс) 16:20

Так правильно, и немного компактнее:

Код: Выделить всё
Dim n As Long
Dim str As String
Set oXL = New Excel.Application
oXL.SheetsInNewWorkbook = 1
oXL.Workbooks.Add

str = "="
For n = 1 To Len(Text7.Text)
    If Mid(Text7.Text, n, 1) = "x" Then
        str = str + "b1"
    Else
        If Mid(Text7.Text, n, 1) = "y" Then
            str = str + "c1"
        Else
            str = str + Mid(Text7.Text, n, 1)
        End If
    End If
Next

oXL.Cells(1, 1) = str
oXL.Visible = True
Set oXL = Nothing
Нет ничего невозможного для человека с интеллектом.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.05.2007 (Вс) 16:25

Так хуже как раз.
Да ещё и параметр Excel сбивается и не восстанавливается.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 06.05.2007 (Вс) 16:46

Честно сказать про параметр слышу впервые, можно по подробнее?
А в остальном чем хуже?

P.S. Саму замену символов тоже хорошо бы скомпоновать:
Код: Выделить всё
str = Text7.Text
str = Replace$(str, "x", "b1")
str = Replace$(str, "y", "c1")
str = "=" & str
Нет ничего невозможного для человека с интеллектом.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.05.2007 (Вс) 16:58

Параметр SheetsInNewWorkbook, который ставится в 1 и остаётся таким насовсем.
В остальном хуже тем, что обращение к ActiveSheet, а не к конкретной переменной листа, хуже. Хотя бы тем, что ActiveSheet возьмёт и неожиданно сменится.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

sashar2
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 170
Зарегистрирован: 06.02.2005 (Вс) 19:58

Сообщение sashar2 » 06.05.2007 (Вс) 17:00

Проблема была в том, что в конце ставился лишний символ, который я midом отсек, всем спасибо. Символ конца строки или что-то вроде того...

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 06.05.2007 (Вс) 17:16

GSerg писал(а):Параметр SheetsInNewWorkbook, который ставится в 1 и остаётся таким насовсем.

Да, есть косячок :) Мотаю на ус.

GSerg писал(а):В остальном хуже тем, что обращение к ActiveSheet, а не к конкретной переменной листа, хуже. Хотя бы тем, что ActiveSheet возьмёт и неожиданно сменится.

Наврятли ActiveSheet сменится, хотябы потому что сменить её может только твоя программа, посколько окно экселя пока не видимо.
Нет ничего невозможного для человека с интеллектом.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.05.2007 (Вс) 17:24

Труднее отслеживать (тебе же). Навскидку приведёшь полный список событий, которые меняют активный лист?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 07.05.2007 (Пн) 5:57

GSerg
Только наверное не событие а метод?
Навскидку: oXL.Sheets.Item(Номер листа).Select
Нет ничего невозможного для человека с интеллектом.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.05.2007 (Пн) 6:09

А ещё добавление нового листа (он автоматически становится активным).
А ещё копирование листа (копия автоматически становится активной).
А ещё создание новой книги (она автоматически становится активной).

И мне совершенно не хочется думать, какие ещё события могут привести к активации другого листа. У меня просто ссылка на нужный есть.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Kostyan
Постоялец
Постоялец
 
Сообщения: 439
Зарегистрирован: 20.09.2002 (Пт) 4:14
Откуда: Россия, Уссурийск

Сообщение Kostyan » 07.05.2007 (Пн) 6:29

Хорошо, сдаюсь :)
Конечно лучше сразу указать нужный лист, твоя взяла.
Нет ничего невозможного для человека с интеллектом.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 40

    TopList