|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - [решено] [Excel] Присвоение значения ячейке |
|
|
VBA - [решено] [Excel] Присвоение значения ячейке
|
Старожил Сообщения: 198 |
Добрый день!
Необходимо в определенные ячеки листа внести определенные формулы из скрипта. Делаю так: 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 Как реализовать банальнейшее присвоение значения ячейке??? Понимаю, что задача банальна, но как ни смешно, не могу понять как это закодировать. |
|
Отправлено: 14:39, 09-03-2012 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата PhilB:
Цитата PhilB:
Using Microsoft Excel Worksheet Functions in Visual Basic [Excel 2003 VBA Language Reference]: Цитата:
|
|||
Отправлено: 20:50, 09-03-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 198
|
Профиль | Отправить PM | Цитировать Так работает:
Так не работает (а хотелось бы ![]() Worksheets("Лист1").Cells(curRowInKvit, curCollumnInKvit).FormulaR1C1 = "=Лист2!G" + Str(curRow) Суть задачи в том, что необходимость реализовать именно динамическую сборку формул. Но не могу понять как. P.S. Это реализуется мной в Office 2003 |
Последний раз редактировалось PhilB, 09-03-2012 в 21:59. Отправлено: 21:48, 09-03-2012 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать PhilB, я уже говорил выше:
Цитата Iska:
|
|
Отправлено: 00:02, 10-03-2012 | #4 |
Старожил Сообщения: 198
|
Профиль | Отправить PM | Цитировать Суть задачи:
Есть view в БД MS Access. И шаблон квитанции в Excel. Суть задачи: получить данные из БД, и не основе шаблона сгенерировать квитанции, подставив туда соответсвующие данные. То есть получается по сути операция типа слияние в word. В excel подобного я не нашел, посему пишу скрипт. Весь код: Sub Макрос2() ' Скопировать лист Sheets("Лист1").Copy ' Костыль: вручную скопировать одну из ячеек, т.к. ее длина превышает 255 символов Windows("Квитанция ШАБЛОН.xls").Activate Range("B6").Select Selection.Copy ' Костыль: вручную вставить одну из ячеек, т.к. ее длина превышает 255 символов Windows(Windows.Count).Activate Range("B6").Select ActiveSheet.Paste Range("D6").Select ActiveSheet.Paste Range("D12").Select ActiveSheet.Paste Range("B12").Select ActiveSheet.Paste ' Добавить источник данных Sheets.Add Application.CutCopyMode = False With ActiveSheet.QueryTables.Add(Connection:=Array( _ "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=X:\Work\Юлька\Клиенты.mdb;Mode=Read;Extended Properties=""" _ , _ """;Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Datab" _ , _ "ase Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";J" _ , _ "et OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Co" _ , "mpact Without Replica Repair=False;Jet OLEDB:SFP=False"), Destination:= _ Range("A1")) .CommandType = xlCmdTable .CommandText = Array("Квитанция") .Name = "Клиенты" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .SourceDataFile = "X:\Work\Юлька\Клиенты.mdb" .Refresh BackgroundQuery:=False End With ' Подготовка к вставке ссылок листа с квитанциями на ячейки с данными 'Sheets("Лист1").Select Dim text As String Dim collumnsInKvit As Integer collumnsInKvit = 17 Dim kvitNum As Integer kvitNum = 1 Dim curRow As Integer curRow = 2 Dim curRowInKvit As Integer curRowInKvit = 2 Dim curCollumnInKvit As Integer curCollumnInKvit = 1 ' "A" Dim curSecondCollumnInKvit As Integer curSecondCollumnInKvit = 2 ' "B" Dim sheetWithKvit As Worksheet Set sheetWithKvit = Worksheets("Лист1") Do While IsNull(Worksheets("Лист1").Range("A" + Str(curRow))) ' Sheets("Лист1").Select 'Sheets("Лист1").Activate ' Платеж Dim a As Object Worksheets("Лист1").Cells(curRowInKvit, curCollumnInKvit).FormulaR1C1 = "=Лист2!G" + Str(curRow) ' Долг text = "=Лист2!H" + Str(curRow) Range(curSecondCollumnInKvit + Str(curRowInKvit)).Value = text ' Адрес text = "=Лист2!C" + Str(curRow) Range(curSecondCollumnInKvit + Str(curRowInKvit + 1)).Value = text ' Код плательщика text = "=Лист2!F" + Str(curRow) Range(curCollumnInKvit + Str(curRowInKvit + 2)).Value = text ' ФИО text = "=Лист2!D" + Str(curRow) Range(curSecondCollumnInKvit + Str(curRowInKvit + 2)).Value = text ' Добавление страницы If kvitNum Mod 2 = 0 Then Range("A" + Str(curRowInKvit) + ":D" + Str(curRowInKvit + collumnsInKvit)).Copy Range("A" + Str(curRowInKvit + collumnsInKvit)).Select ActiveSheet.Paste ActiveSheet.PageSetup.PrintArea = "$A$1:$D$" + Str(curRowInKvit + collumnsInKvit) End If ' Переход к следующей квитанции If kvitNum Mod 2 = 1 Then curCollumnInKvit = 3 '"C" curSecondCollumnInKvit = 4 '"D" Else curCollumnInKvit = 1 ' "A" curSecondCollumnInKvit = 2 '"B" End If curRowInKvit = curRowInKvit + collumnsInKvit curRow = curRow + 1 ' Sheets("Лист2").Select Sheets("Лист2").Activate Loop End Sub Лист копирую, т.к. при копировании диапазона, почему-то не сохраняется форматирование. Вообще, оно какое-то мутное. Видимо, надо и книгу указывать, а не только лист, но она создается кодом Sheets("Лист1").Copy, и как получить имя книги не ясно. Толковой книги так и не нашел ![]() Iska, спасибо за внимание. |
|
Последний раз редактировалось PhilB, 10-03-2012 в 18:25. Отправлено: 17:46, 10-03-2012 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать К сожалению, чтобы воспроизвести ошибку — мне понадобятся все Ваши данные. Так что, сие, скорее всего, отпадает.
Цитата PhilB:
Цитата PhilB:
|
||
Отправлено: 23:12, 10-03-2012 | #6 |
Старожил Сообщения: 198
|
Профиль | Отправить PM | Цитировать |
Отправлено: 22:43, 11-03-2012 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать PhilB, напомню ещё, на всякий случай, про разницу в свойствах «.Formula»/«.FormulaLocal»: если у Вас локализованная версия, и Вы будете использовать в ячейках формулы рабочего листа (например, «СУММ()»/«SUM()»), то свойство «.Formula» ожидает увидеть в текстовой строке присвоения свойства англоязычные наименования формул рабочего листа — например, «SUM()», а свойство «.FormulaLocal» — соответственно, локализованные наименования формул рабочего листа, в данном случае — «СУММ()».
|
Отправлено: 01:22, 12-03-2012 | #8 |
Новый участник Сообщения: 1
|
Профиль | Сайт | Отправить PM | Цитировать Не могу снять сумму с массива данных, ибо некоторые из этих данных по условию ложны. Не могу дать нулевое значение ложной переменной.
Я, честное слово, не умею на вашем языке разговаривать. Но, если я пытаюсь научить ячейку показывать ноль, при ложном значении, но, числовое значение, при истинном, то возникает цикличность, формула не работает. Это никак не обойти? |
Отправлено: 06:17, 08-06-2013 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Евгений_Косьяненко@fb, выложите Вашу рабочую книгу. Укажите диапазон массива.
|
Отправлено: 11:25, 08-06-2013 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|