Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA

Автор: The okk
Дата сообщения: 12.03.2007 12:30
LevT

Цитата:
нет?

и в чем это проявляется? Каков результат, что за ошибка?
Автор: LevT
Дата сообщения: 12.03.2007 12:52
рантайм еррор 1004 Нельзя установить свойство 'FormulaArray' класса 'Range'


И вот еще прикол с COMExceptions и локализацией, на материале ворда, который вызывается из .NET:


Код: wordApp.Selection.InsertCaption(Label:="Рисунок", TitleAutoText:="", Title:="", _
Position:=Word.WdCaptionPosition.wdCaptionPositionBelow, ExcludeLabel:=False)
Автор: The okk
Дата сообщения: 12.03.2007 13:16
LevT

Цитата:
рантайм еррор 1004 Нельзя установить свойство 'FormulaArray' класса 'Range'

Попробовал - у меня все работает (только формулу упростил до "=" +CStr(Visit)). Посмотри в Watch, что у тебя за Range получается.
Автор: LevT
Дата сообщения: 12.03.2007 13:22

У тебя эксель какой - русский или англ? 2003? У меня этот эффект в русском 2007.

Только вчера я напоролся на указанную несовместимость русского 2003 (=ТРАНСП) и русского же 2007 (=TRANSPOSE) и решил пересесть на последний.


Добавлено:

В 2003 та же петрушка. На что watch ставить?
Автор: The okk
Дата сообщения: 12.03.2007 13:45
LevT

Цитата:
На что watch ставить?

В watch смотри на Range("C29").CurrentArray и Range("C29").CurrentArray.FormulaArray заодно.

З.Ы.: у меня 2002
Автор: LevT
Дата сообщения: 12.03.2007 13:54

Мой косяк. Забыл передать в функцию параметр Target - а Option Explicit не включен. Потому он Empty/Variant, и в результате ссылка невалидна.

Извиняюсь за беспокойство. Это я сейчас только попробовал облениться , а раньше всегда декларировал все переменные.
Автор: The okk
Дата сообщения: 12.03.2007 13:57
LevT
А, вон оно что! Я-то думал, глобальная.
Автор: LevT
Дата сообщения: 12.03.2007 15:25

А вот насчет =TRANSPOSE или =ТРАНСП. Возвращаются нули там, где в исходном ранжде пустые ячейки. Как бы это победить? Мне надо чтобы пустота давала пустоту, а не ноль.

Автор: The okk
Дата сообщения: 12.03.2007 15:34
LevT
"Ну у меня два варианта.." (с)
Либо ты делаешь формулу массива с использованием конструкции =ЕСЛИ(,,""), то бишь возвращающую пустую строку, если ничего нет. - Классика.
Либо в макросе (а как я понял, формула вводится только макросом) перед вставкой формулы определяешь размерность исходного массива и, уже зная его размер, прописываешь формулу в диапазон, соответствующий размеру исходного.
Автор: LevT
Дата сообщения: 12.03.2007 15:43

Второй вариант не понял. К тому же, у меня не строки пустые, а ячейки. Массивы "одномерные" В одной книге одни и те же данные идут в столбик, а в другой строками.

Их надо уметь туда-сюда переливать (заказчик еще не определился, как он их предпочитает править, и скорее всего ему понадобятся оба варианта). И настоящие нули в данных встречаются. А данные на самом деле трехмерные, третье измерение в каждой книге свое и задается нумерацией листов.

Автор: LevT
Дата сообщения: 12.03.2007 18:36

Первый вариант не получается применить: ни смысл действий непонятен, ни методом тыка ничего не выходит. И вообще массивы как-то далеки от интуитивности.

Сейчас у меня формула массива
{=ТРАНСП('[Книга.xls]5'!R3C2:R3C12)}

Нужно избавиться от получения нулей там, где в источнике пустые ячейки. Для начала пытаюсь вставить формулу вручную. Что должно быть?
=ЕСЛИ(ТРАНСП('[Книга.xls]Лист5'!R3C2:R3C12);'[Книга.xls]Лист5'!R3C2:R3C12);"")
- на это ругается.

Нужны ли фигурные скобки или это чисто визуальное "украшение"?
Автор: Lexy4ka
Дата сообщения: 12.03.2007 18:40
AndVGri
спасибо огромное за участие и помощь.
прочла правда ваше сообщение только что, а работу сдала сегодня утром.
еще раз огромное спасибо! вы очень помогли, особенно в первый раз
СПАСИБО!
Автор: LevT
Дата сообщения: 12.03.2007 18:46

Гы-гы. Она-таки =ТРАНСП в строке формул, а в VBA надо писать =TRANSPOSE
2007 русский.
Автор: Yuk
Дата сообщения: 12.03.2007 18:58
Из Excel FAQ:
maratino

Цитата:
Помогите!
Есть словарь Русс-Китайский (сам делаю в Excel)
Мне нужен такой вариант: Когда я начинаю набирать слово,на пример:
"Из какого вы города?" когда я нажал на "И" он сортирует все слова, которые начинаются на "И", дальше, "Из" естественно все слова которые начинаются "Из"
дальше ПРОБЕЛ дальше, "Из к" естественно из внизу изложенного списка отфильтровав
выдаст в окошко
"Из какого вы города?"
"Из какого вы района?"

Дальше набираем "Из какого вы р"
Все слова, которые начинаются "Из какого вы р"
То есть, в данном случай, из нашего списка:
"Из какого вы района?"


.......
Из России 俄国
Из какого вы города? 您 那城市的人?
Из Москвы 莫斯科(的)
Из Санкт-Петербурга 圣彼得堡(的)
Из какого вы района? 圣彼得堡(的)

Можно сделать с использованием TextBox контроля на листе.
Предположим таблица начинается с А2, причем первая ячейка заголовок. В А1 поместим TextBox (правой кнопкой по панели инструментов, выбрать Control Toolbox). Можно немного увеличить высоту первой строки. Двойным кликом по текстбоксу попадаем в редактор VBA и вставляем:
Код: Private Sub TextBox1_Change()
If TextBox1.Text <> "" Then
Range("A2").AutoFilter Field:=1, Criteria1:="=" & TextBox1.Text & "*", Operator:=xlAnd
Else
Range("A2").AutoFilter Field:=1
End If
End Sub
Автор: hackman
Дата сообщения: 12.03.2007 20:17
Помогите пожалуйста. Проблема в том что не знаю как задать у макросе формулу сумы( для сменной ячейки)(Нужно задать суму из ячейки E6 по ячейку vsgvl 6 рядка
[more]
Sub vyzn_vsogo()
n = InputBox("&Acirc;&acirc;&aring;&auml;&sup3;&ograve;&uuml; &ecirc;&sup3;&euml;&uuml;&ecirc;&sup3;&ntilde;&ograve;&uuml; &iacute;&icirc;&acirc;&icirc;&iquest; &iuml;&eth;&icirc;&auml;&oacute;&ecirc;&ouml;&sup3;&iquest;")
For j = 1 To n
For i = 1 To 256
If Cells(1, i).Value = "vsgvl" Then vsgvl = i
Next i
MsgBox (vsgvl)

Columns(vsgvl).Select
Selection.Insert Shift:=xlToRight
Columns(vsgvl - 1).Select
Selection.Copy


Columns(vsgvl).Select

Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range(Cells(9, vsgvl - 1), Cells(9, vsgvl - 1)).Select
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range(Cells(9, vsgvl - 1), Cells(9, vsgvl)), Type:=xlFillDefault
'Range("DE9:DF9").Select
Range(Cells(12, vsgvl - 1), Cells(12, vsgvl - 1)).Select
Selection.AutoFill Destination:=Range(Cells(12, vsgvl - 1), Cells(12, vsgvl)), Type:=xlFillDefault
'Range("DE12:DF12").Select
Range(Cells(16, vsgvl - 1), Cells(21, vsgvl - 1)).Select
Selection.AutoFill Destination:=Range(Cells(16, vsgvl - 1), Cells(21, vsgvl)), Type:=xlFillDefault
'Range("DE16:DF21").Select
ActiveWindow.SmallScroll Down:=12
Range(Cells(29, vsgvl - 1), Cells(33, vsgvl - 1)).Select
Selection.AutoFill Destination:=Range(Cells(29, vsgvl - 1), Cells(33, vsgvl)), Type:=xlFillDefault
Range("DE29:DF33").Select
Range(Cells(6, vsgvl + 1), Cells(6, vsgvl + 1)).Select

'Cells(6, vsgvl + 1).Formula = "=SUM( Range(Cells(6, 5), Cells(6, vsgvl)) ' не знаю как нужно прописать формулу суммы
Next j
End Sub
[/more]
Автор: Yuk
Дата сообщения: 12.03.2007 21:07
hackman
Можно так:
Код: Cells(6, vsgvl + 1).Formula = "=SUM(" & Range(Cells(6, 5), Cells(6, vsgvl)).Address & ")"
Автор: olik22
Дата сообщения: 12.03.2007 21:54
Ребят нужна помощь,
есть форма на которой расположены listbox i textbox.В listboxe отображаются данные из таблицы, а проблемка возникла вот где, хочу прикрутить textbox, что бы внего вводить данные и соответственно они заполняли таблицу.Такое возможно? и как сделать проверку, что бы данные вводились по порядку, так как половина таблицы уже заполнена
я так понимаю,что должен использовать, но как сделать проверку и добавление по одному значению
Range("naujas") = Me.TextBox1.Text
Автор: maratino
Дата сообщения: 12.03.2007 22:08
Yuk
Спасибо за совет
Но беда в том, что я, ну ни как не найду ТекстБокс
Пожалуйста, если можно чуть поподробнее для "Чайника"
Автор: Yuk
Дата сообщения: 12.03.2007 23:02
maratino
Клик правой кнопкой по панели с кнопками:

Затем выбираем текстбокс

и рисуем на листе.
Автор: maratino
Дата сообщения: 12.03.2007 23:33
Yuk
ОГРОМНОЕ ТЕБЕ СПАСИБО!
Отлично, жаль только то, что медленно фильтрует, но все равно отлично

Добавлено:
Yuk
Скажи пожалуйста!
Жаль то, что иероглифы не фильтрует почему то
Скажи. А есть такой вариант, скажем активируешь ячейку, или наводишь курсором
на нее, и выплывает картика
Автор: The okk
Дата сообщения: 13.03.2007 06:47
LevT

Цитата:
Гы-гы. Она-таки =ТРАНСП в строке формул, а в VBA надо писать =TRANSPOSE
2007 русский.

Смотри, что пишется в свойствах .Formula и .FormulaLocal. Можно и =ТРАНСП и =TRANSPOSE, только надо понимать, куда и что пишешь.

Добавлено:
maratino

Цитата:
А есть такой вариант, скажем активируешь ячейку, или наводишь курсором
на нее, и выплывает картика

Вставляешь примечание: Вставка - Примечание.
Редактируешь примечание: Формат примечания - Цвета и линии - в Цвет заливки выбираешь "Другие способы заливки" - Рисунок.
Автор: Yuk
Дата сообщения: 13.03.2007 08:36
maratino

Цитата:
Жаль то, что иероглифы не фильтрует почему то

А иероглифы у тебя тоже в 1-м столбце? Если в другом, то нужен другой текстбокс со своей процедурой, можно сделать по аналогии. Но будет ли работать с китайским, не знаю, не проверял.
Автор: tec4
Дата сообщения: 13.03.2007 11:03
Здраствуйте! Подскажите, пожалуйста, как сделать так, чтобы при формировании таблицы (отчёта) нижний колонтитул (подписи) смещались бы каждый раз при обновлении на нефиксированное количество строк вниз или вверх, так чтобы нижний колонтитул каждый раз был на строку ниже таблицы. (Количество столбцов в таблице фиксированное, количество строк - нефиксированное).
Автор: maratino
Дата сообщения: 13.03.2007 11:09
Yuk
Я не владею экселем так, как вы, мне кажется я не то сделал
на другом листе вроде отфильтровал
Если бы я знал про эту текстбокс
Я вчера 4часа сидел манипулировал и наслаждался возможностями текстбокса
Когда я переписываюсь с китаянками, они даже и не догадываются,что я не знаю
ни одного иероглифа или слова
СПАСИБО вам ребята
Я поклоняюсь перед вами
Люблю грамотных и интуитивных

Добавлено:
Yuk
СПАСИБО!
Все отлично, и это получилось. Я увлекаюсь фотошопом, мне нужен быстрий поиск
жаль, что в ACD не могу найти регулятор таймера

http://maratino.narod.ru

это мой сайт фотогалерея
Автор: AsPAndA
Дата сообщения: 13.03.2007 18:02
у меня такой вопрос => как мне сравнивать значение ячеекдвух файлов?

Например
for i=1 to 10000(конец Sheeta нужен если что может как то еще можно , а то я заведомо большое беру )
for j=1 to 10000
if cells(i:1).value=cells(j:4) do вот здесь и есть разные файлы
4to to tam
end if
next j
next i

Заранее спасибо!!!
Автор: theghost
Дата сообщения: 13.03.2007 20:17
Как присвоить ячейке имя?
Вот попал я в нужную мне ячейку:

Код: ActiveCell.Offset(Selection.Rows.Count + 1, 7).Activate
Автор: Yuk
Дата сообщения: 13.03.2007 22:42
theghost
А макрос записать сложно?

Код: ActiveWorkbook.Names.Add Name:="Itog", RefersTo:="=" & ActiveSheet.Name & "!" & ActiveCell.Address
Автор: theghost
Дата сообщения: 13.03.2007 23:31
Yuk

Спасибо! Просто в конце дня думать было очень внапряг... Не мог додуматься как склеить строки
Автор: The okk
Дата сообщения: 14.03.2007 07:24
AsPAndA
Ну, как сравнивать, как раз понятно (If <=> Then...). Вопрос в том, что ты хочешь получить в качестве результата.
Автор: Od_UA
Дата сообщения: 14.03.2007 12:48
В диапазоне А:К найти ячейки с одинаковыми данными и выделить их др.цветом!? (1 гость)

Заранее благодарен!

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Стоит ли переходить с Билдера на Делфи?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.