Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - [решено] [Excel] Присвоение значения ячейке

Ответить
Настройки темы
VBA - [решено] [Excel] Присвоение значения ячейке

Старожил


Сообщения: 197
Благодарности: 51


Конфигурация

Профиль | Отправить PM | Цитировать


Добрый день!
Необходимо в определенные ячеки листа внести определенные формулы из скрипта.
Делаю так:
Код: Выделить весь код
    Dim sheetWithKvit As Worksheet
    Set sheetWithKvit = Worksheets("Лист1")

    Do While True ' Not IsNull(Sheets("Лист2").Range("A" + Str(curRow)))
        text = "=Лист2!G" + Str(curRow)
        sheetWithKvit.Cells(curRowInKvit, curCollumnInKvit).Value = text
На последней приведенной строке возникает 1004 ошибка "Application-defined or object-defined error". Пробовал разные вариации на тему, но получается та же ошибка.
Как реализовать банальнейшее присвоение значения ячейке???

Понимаю, что задача банальна, но как ни смешно, не могу понять как это закодировать.

Отправлено: 14:39, 09-03-2012

 

Аватара для Devils0411

Ветеран


Сообщения: 902
Благодарности: 51

Профиль | Отправить PM | Цитировать


Доброго времени суток. Подскажите пожалуйста, есть такой код:
Код: Выделить весь код
Imports System
Imports System.IO
Imports System.Text

Public Class Form1

    Dim Exc, CExc, CExcs, xlCenter, Selection As Object

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim Exc As Object = CreateObject("Excel.Application")

        'Открыть новую книгу Excel
        CExc = Exc.Workbooks.Add
        CExcs = CExc.Worksheets(1)
        CExcs = CExc.Worksheets(1).Activate
        'CExcs = CExc.Worksheets(2).Delete
        'CExcs = CExc.Worksheets(3).Delete
        Exc.visible = True 'Видимость книги Эксель - False - Невидима и выполняется все в срытном режиме

        'Добавить данные в ячейки первого листа новой книги
        Exc.sheets(1).range("A1").value = "Таб. №"
        Exc.sheets(1).range("B1").value = "Ф.И.О."
        Exc.sheets(1).range("C1").value = "Должность"
        Exc.sheets(1).range("D1").value = "Логин"
        Exc.sheets(1).range("E1").value = "Пароль"
        Exc.sheets(1).range("A1:E1").Font.Bold = True
        Exc.sheets(1).range("A1:E1").Font.Size = 11
        Exc.sheets(1).range("A1:E1").Interior.ColorIndex = 6
        Exc.sheets(1).range("A1:E1").HorizontalAlignment = xlCenter
        Exc.sheets(1).range("A1:E1").VerticalAlignment = xlCenter
        Exc.sheets(1).range("A1:E1").WrapText = False
        Exc.sheets(1).range("A1:E1").Orientation = 0
        Exc.sheets(1).range("A1:E1").MergeCells = False

    End Sub

    Private Sub Commit_Click(sender As System.Object, e As System.EventArgs) Handles Commit.Click
        Exc.sheets(1).range("A2").value = Me.EIDText
        Exc.sheets(1).range("B2").value = Me.LFMText
        Exc.sheets(1).range("C2").value = Me.TitleText
        Exc.sheets(1).range("D2").value = Me.LoginText
        Exc.sheets(1).range("E2").value = Me.PwdText

        'Сохранить книгу и закрыть Excel
            CExc.SaveAs("C:\EmployeeList.xlsx")
            Exc.Quit()
    End Sub
End Class
Во-первых, почему не хочет заносится значения переменных Me.EIDText и т.д. в указанные ячейки? Хотя переменные заданы, при отладке данные в этих переменных есть. При отладке после выполнения Exc.sheets(1).range("A2").Text = Me.EIDText выдает сообщение: "Не задана переменная объекта или переменная блока With."
Во-вторых, где можно почитать про форматирование ячеек? Хотелось бы задать текст по центру, шрифт и.т.д.
В-третьих файл не *xlsx не сохраняется по указанному пути.
P.S. ссылку на Microsoft Office 14.0 Object Library делал... Но как ей воспользоваться - не знаю

P.S.S. С третьим вопросом разобрался.

-------
Скрипт автоустановки WINDOWSXP; Скрипт мультиустановки ОС


Последний раз редактировалось Devils0411, 14-01-2015 в 16:59.


Отправлено: 15:27, 14-01-2015 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 25078
Благодарности: 7288

Профиль | Отправить PM | Цитировать


Цитата Devils0411:
Во-первых, почему »
Devils0411, покажите Ваш проект VB.Net. Чтобы можно было рассуждать предметно.

Цитата Devils0411:
Во-вторых, где можно почитать про форматирование ячеек? Хотелось бы задать текст по центру, шрифт и.т.д. »
В справке Microsoft Office. В MSDN.

Цитата Devils0411:
P.S. ссылку на Microsoft Office 14.0 Object Library делал... Но как ей воспользоваться - не знаю »
Вы ей уже пользуетесь:
Цитата Devils0411:
xlCenter »
но местами.
Цитата Devils0411:
Dim Exc As Object = CreateObject("Excel.Application") »

Отправлено: 17:06, 14-01-2015 | #12


Аватара для Devils0411

Ветеран


Сообщения: 902
Благодарности: 51

Профиль | Отправить PM | Цитировать


Теперь выдает следующую ошибку: Член группы не найден. (Исключение из HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND)) в данной части кода Exc.sheets(1).range("A" & i).value = Me.EIDText
Сам код:
Код: Выделить весь код
Imports System
Imports System.IO
Imports System.Text

Public Class Form1

    Dim CExc, CExcs, xlCenter As Object
    Dim Exc As Object = CreateObject("Excel.Application")

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        'Открыть новую книгу Excel
        CExc = Exc.Workbooks.Add(1)
        CExcs = CExc.Worksheets(1).Activate
        Exc.visible = True 'Видимость книги Эксель - False - Невидима и выполняется все в срытном режиме

        'Добавить данные в ячейки первого листа новой книги
        Exc.sheets(1).range("A1").value = "Таб. №"
        Exc.sheets(1).range("B1").value = "Ф.И.О."
        Exc.sheets(1).range("C1").value = "Должность"
        Exc.sheets(1).range("D1").value = "Логин"
        Exc.sheets(1).range("E1").value = "Пароль"
        Exc.sheets(1).range("A1:E1").Font.Bold = True
        Exc.sheets(1).range("A1:E1").Font.Size = 11
        Exc.sheets(1).range("A1:E1").Interior.ColorIndex = 6
        Exc.sheets(1).range("A1:E1").HorizontalAlignment = xlCenter
        Exc.sheets(1).range("A1:E1").VerticalAlignment = xlCenter
        Exc.sheets(1).range("A1:E1").WrapText = False
        Exc.sheets(1).range("A1:E1").Orientation = 0
        Exc.sheets(1).range("A1:E1").MergeCells = False

    End Sub

    Private Sub Commit_Click(sender As System.Object, e As System.EventArgs) Handles Commit.Click

        For i = 2 To 10
            Exc.sheets(1).range("A" & i).value = Me.EIDText
            Exc.sheets(1).range("B" & i).value = Me.LFMText
            Exc.sheets(1).range("C" & i).value = Me.TitleText
            Exc.sheets(1).range("D" & i).value = Me.LoginText
            Exc.sheets(1).range("E" & i).value = Me.PwdText
        Next i

        'Сохранить книгу и закрыть Excel
        If Not File.Exists("C:\Users\dmitry.palega\Desktop\EmployeeList.xlsx") Then
            CExc.SaveAs("C:\Users\dmitry.palega\Desktop\EmployeeList.xlsx")
            Exc.Quit()
        Else
            My.Computer.FileSystem.DeleteFile("C:\Users\dmitry.palega\Desktop\EmployeeList.xlsx")
            CExc.SaveAs("C:\Users\dmitry.palega\Desktop\EmployeeList.xlsx")
            Exc.Quit()
        End If
    End Sub
End Class
Цитата Iska:
Devils0411, покажите Ваш проект VB.Net. Чтобы можно было рассуждать предметно. »
Вы имеете ввиду окно, где вводятся данные7

-------
Скрипт автоустановки WINDOWSXP; Скрипт мультиустановки ОС


Отправлено: 17:07, 14-01-2015 | #13


Аватара для Devils0411

Ветеран


Сообщения: 902
Благодарности: 51

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar WindowsApplication1.rar
(70.9 Kb, 2 просмотров)

Архив с проектом прикрепил.

-------
Скрипт автоустановки WINDOWSXP; Скрипт мультиустановки ОС


Отправлено: 17:12, 14-01-2015 | #14


Аватара для Devils0411

Ветеран


Сообщения: 902
Благодарности: 51

Профиль | Отправить PM | Цитировать


Проблему решил.. Чуть позже выложу код с изменениями.
P.S. Проблема была в отсутствии Text.ToString, т.е. строка должна была быть вот такой: Exc.sheets(1).range("A" & i).value = Me.EIDText.Text.ToString

-------
Скрипт автоустановки WINDOWSXP; Скрипт мультиустановки ОС


Последний раз редактировалось Devils0411, 16-01-2015 в 14:36.


Отправлено: 10:23, 15-01-2015 | #15


Пользователь


Сообщения: 54
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый вечер.

Подскажите как ввести формулу в ячейку Excel при помощи VBA. Формула содержит функцию, написанную в VBA и имеет такой синтаксис:
=MyFunc($A16;"15")

iRowNum это переменная с номером строки листа.

Я пробовал так:
Range("G" & CStr(iRowNum)).Formula = "=MyFunc($A" & CStr(iRowNum) & ";" & CStr(15) & ")"

но VBA при запуске выдает:
"Application defined or object defined error".

Отправлено: 19:30, 25-02-2018 | #16


Ветеран


Contributor


Сообщения: 529
Благодарности: 242

Профиль | Отправить PM | Цитировать


Цитата stuermer01:
но VBA при запуске выдает:
"Application defined or object defined error". »
Полагаю, точка с запятой в VBA должна быть указана как запятая, и кавычки вы не указали - число 15 должно быть в кавычках, для чего нужно поставить две кавычки подряд.
Попробуйте код ниже:
Range("G" & CStr(iRowNum)).Formula = "=MyFunc($A" & CStr(iRowNum) & ",""15"")"

-------
[Форум Word и Excel] - [Как запустить Word, Excel и Outlook в безопасном режиме?] - [Как удалить шаблон Word Normal.dotm?]

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:42, 26-02-2018 | #17


Пользователь


Сообщения: 54
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата a_axe:
Попробуйте код ниже:
Range("G" & CStr(iRowNum)).Formula = "=MyFunc($A" & CStr(iRowNum) & ",""15"")" »
Заработало! Спасибо.

Отправлено: 00:39, 27-02-2018 | #18


Пользователь


Сообщения: 54
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подскажите, как ввести через VBA такую формулу в ячейку:

=ЕСЛИ(A4<>"";F4-A4;"--")

пока я ввожу так и это работает:

Range("I" & CStr(iRowNum)).Formula = "=F" & CStr(iRowNum) & "-A" & CStr(iRowNum)

но будет ли скомпилировано имя функции, написанное кириллицей?

Отправлено: 15:30, 09-07-2019 | #19


Ветеран


Contributor


Сообщения: 25078
Благодарности: 7288

Профиль | Отправить PM | Цитировать


stuermer01, запустите макрорекордер и посмотрите, что выйдет. Например:
Код: Выделить весь код
Sub Макрос1()
    Range("C6").Select
    ActiveCell.FormulaR1C1 = "=IF(R[-2]C[-2]<>"""",R[-2]C[3]-R[-2]C[-2],""--"")"
    Range("C6").Select
End Sub
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:34, 09-07-2019 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - [решено] [Excel] Присвоение значения ячейке

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2010 - Excel - Сложить значения определенных ячеек ALaN_1 Microsoft Office (Word, Excel, Outlook и т.д.) 1 31-10-2011 22:22
2003/XP/2000 - MS Excel | Отделить данные разного характера в одной ячейке Rubichek Microsoft Office (Word, Excel, Outlook и т.д.) 2 26-04-2011 18:56
2003/XP/2000 - Excel | Пустые значения в ряду данных графика AlexM Microsoft Office (Word, Excel, Outlook и т.д.) 0 06-02-2010 07:17
[решено] Использование функций VBa в ячейке Excel. pingUIN Хочу все знать 1 04-12-2009 15:59
C/C++ - Присвоение функции значения mrcnn Программирование и базы данных 4 07-11-2008 08:26




 
Переход