Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 2, средняя оценка - 5.00
ArFL
0 / 0 / 0
Регистрация: 25.07.2014
Сообщений: 1
28.07.2014, 16:09 #61
Цитата Сообщение от StepInLik Посмотреть сообщение
Код Visual Basic
Sub tt()
a = "Маша ела сушку"
aa = Split(a, " ")
Call fФункция(aa(0), aa(1), aa(2))
End Sub
Function fФункция(ParamArray arr())
Dim i&
For i = LBound(arr) To UBound(arr)
MsgBox arr(i)
Next
End Function
К слову сказать у меня тоже выдает цифры. Но если заменить "Function fФункция" на "Sub fФункция", тогда все заработает. Необъяснимый парадокс.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2014, 16:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Профессиональные проблемы, решения, рекомендации и ошибки (VBA):

Проблемы с алгоритмом решения задачи
Нужно написать алгоритм решения задачи. Т.е. что и как делает прога, желательно...

USB устройство, проблемы и пути решения.
Народ, что делать с флешкой - сохраняю на ней файлы (форматы разные), после не...

Прошу помощи решения проблемы в перекрестном...
Ребята, прошу помощи. Есть перекрестный запрос: TRANSFORM Count(.TypObor)...

ФР Electrolube PRP, проблемы, подводные камни, решения
Не смог найти привычный POSITIV20, пришел довольствоваться тем что есть. Не...

Каковы возможные решения проблемы рывков в эмуляторе?
пишу игру, кадры перерисовываются в методе, который контролируется таймером....

118
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 411
29.07.2014, 13:40  [ТС] #62
Красим, форматируем как-то ячейку ..., вставляем в эту ячейку ссылку на какой-то файл ...
Автоматически, она превращается в гиперссылку ... - ну ладно ... - пусть ...
Теперь либо тегом "Отменить гиперссылку", либо "Удалить гиперссылку", либо как-то иначе ... - сносим гиперссылку ...
и что? сносится все! - и гиперссылка и формат ячейки ... где логика? назвали бы тогда "снести все, кроме текста ..."
0
mc-black
2759 / 695 / 101
Регистрация: 04.02.2011
Сообщений: 1,421
31.07.2014, 14:35 #63
Цитата Сообщение от ArFL Посмотреть сообщение
К слову сказать у меня тоже выдает цифры. Но если заменить "Function fФункция" на "Sub fФункция", тогда все заработает. Необъяснимый парадокс.
К слову сказать, у меня работает и так и так - выдает слова (Excel2010x32 + Win7x64). На какой конфигурации у вас выходит ошибка?
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 411
19.08.2014, 10:52  [ТС] #64
Хотите довести пользователя до истерики?
С левого края горизонтальной линейки(полосы) прокрутки листа есть таб, за который можно взять и изменить размер этой линейки(полосы) ... внимание! линейка(полоса) находится на одном уровне с ярлыками книги и ... если утянуть таб влево до конца - линейка(полоса) прокрутки закроет ярлыки. пользователей, которые понимают, что нужно сделать, чтобы вернуть ярлыки - очень мало ... (риторически)а вы бы догадались? )
1
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 411
26.08.2014, 13:02  [ТС] #65
Не сочтите меня за параноика или дилетанта (проверено многими людьми). На моей практике таких ситуаций было 2, на практике еще пары специалистов - еще 2 ...
И так!, если у вас стоит выражение сравнения IF на равенство и левая часть выдает False, а правая True (и в immediate и в watches и даже если обе обернете в cstr) и!!! выражение проходит как истинное - т.е. заходит в тело ИФА, то для корректной работы введите дополнительные 2 переменные и перед сравнением присваивайте им значение левой и правой частей выражений сравнения и в самом ИФЕ просто сравнивайте эти переменные ...
Такое встречалось при значительных нагрузках - серьезных рекурсиях, больших объемах резервированной памяти и у меня при создании и удалении классов налету в самом выражении сравнения ...
1
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 411
18.09.2014, 12:03  [ТС] #66
Мир глюков экселя бесконечен, неисчерпаем и удивительно богат ...
1. Делаем табличку с именем поля ... к примеру "dйцуйцуйцуйцуйцуйцуйцуйцуйцу"
2. Строим на ее основе сводную ...
3. Кидаем это поле в столбец ...
4. Первые 5 столбцов от сводной справа делаем довольно маленькими - к примеру пунктов 5 ...
и!
5. Справа от нашей сводной - начинаем выделять (начиная подальше справа) в левую сторону на уровне имени заголовка область ячеек ... и! как только мы прихватываем третий столбец справа от нашей сводной - в ячейке со строкой появляется часть имени нашего поля!!!
Глюк проявляется только начиная с третьего столбца - очевидно плохая заплатка.
День удался! )))

Добавление от 24.09.2014
Есть картинка еще интереснее (см. ниже) - объект "таблица" (с ним еще интереснее)
Там имя поля PLAN_AMOUNT_DELIVERY_RRC_RUR ...
так оно даже неправильно хвост отрисовывает - по логике, если уж хвост отрисовывается отдельно, то слово RUR должно быть целым, пусть и разными цветами, а получилось, что он съедает часть буквы U ... даже заплатка косячная ... и складывается ощущение, что хвост этот - не часть оригинального текста заголовка, а его копия(для чего-то еще) стоящая где-то или зачем-то чуть левее и сзади ... причем, так чтобы текст из ячейки выходил не обрезанный границей ячейки и обрезался где-то не на границе другим объектом - вижу впервые.
0
Миниатюры
Профессиональные проблемы, решения, рекомендации и ошибки   Профессиональные проблемы, решения, рекомендации и ошибки  
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 411
19.09.2014, 11:20  [ТС] #67
После ранее опубликованного совета:
Цитата Сообщение от StepInLik Посмотреть сообщение
Если вы открываете какой-то файл и он не открывается т.к. выдает "Файл используется ... и занят пользователем User ...", а в действительности он никем не занят, то может помочь следующее:
- отложите мышку в сторону и выбрав файл нажмите ЕНТЕР! все откроется. - баг при открытии файла мышкой, который устраняется клавишей ЭНТЕР с клавиатуры ... не известно почему, но часто работает. и не потому, что он освободился, а потому, что он действительно никем не занят!)
Один мой знакомый долго смеялся, вертел у виска и говорил, что это невозможно, аргументируя "да чем вы там занимаетесь?!", пока не показал ему видео(добавлю его позже ...) ... теперь он верит в розовых пони ...
В продолжение темы "странных и совершенно абсурдных" советов:
Если ранее описанный совет вам не помог, но при это файл действительно никем НЕ ЗАНЯТ, но упорно открывается ТОЛЬКО ДЛЯ ЧТЕНИЯ:

1. Попробуйте открыть его из программы, в которой он вам действительно нужен - отрыть приложение, Ctrl+O ... (+Ентер) (а не из "Моего компьютера" или откуда-то еще)

... и если не помогло

2. Попробуйте:
- зайдите в "Мой компьютер",
- выделите "странный" файл,
- в контекстном меню (правой клавишей мыши) - "Открыть с помощью ..."
- снимаете флаг "Использовать выбранную программу для всех файлов такого типа"
- Выбираете "Блокнот" и ... открываете ...
После открытия в "Блокноте", естественно нужно закрыть файл без сохранения, и(внимание!) с файлом возможно ТОЛЬКО любое СЛЕДУЮЩЕЕ ПЕРВОЕ действие - открытие, переименование, что-то еще ... и! после этого, файл снова станет доступным "только для чтения".
Ответа на вопрос "почему" - не знаю. Не знаю и людей, способных объяснить это.

(комментарий спустя пару лет - как выяснилось, это поведение характерно для организаций(компаний) использующих новелл)
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 411
23.09.2014, 17:23  [ТС] #68
1. Пишем на листе в A1 [ЧТО-ТО]
2. Выделяем ячейку и видим в ячейке это [ЧТО-ТО] и в строке Fx(строка формул) тоже видим [ЧТО-ТО]
3. Пишем в коде листа функцию типа:
Visual Basic
1
2
3
Private Function qwe()
 Range("A1") = "qwer"
End Function
4. Ставим точку останова в конце функции на строке "End Function"
5. Запускаем функцию, интерпритатор встает на точке останова ...
6. Смотрим лист.
в ячейке - значение "qwer", а в строке Fx(как значение этой ячейки) видим наш текст [ЧТО-ТО]
0
mc-black
2759 / 695 / 101
Регистрация: 04.02.2011
Сообщений: 1,421
24.09.2014, 13:04 #69
Цитата Сообщение от StepInLik Посмотреть сообщение
в ячейке - значение "qwer", а в строке Fx(как значение этой ячейки) видим ЧТО-ТО
Excel2010x32@Win7x64 баг не воспроизводится
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 411
25.09.2014, 11:45  [ТС] #70
Цитата Сообщение от mc-black Посмотреть сообщение
Excel2010x32@Win7x64 баг не воспроизводится
Тогда уточняю свою конфигурацию:
Excel Professional 2010x64(14.0.7106.5003)@Win7(Корпоративная)x64 SP1 (+ все патчи до текущего момента)
... на домашнем компьютере на Win8 64x Профессиональная @ Excel и Профессиональный 2010х32 и 2013(?) - не проявлятся
0
Изображения
  
KoGG
5272 / 1345 / 319
Регистрация: 23.12.2010
Сообщений: 2,019
Записей в блоге: 1
28.09.2014, 19:44 #71
Это проблема старая. Но она здесь слишком узко интерпретирована.
Функции в Excel работают верно, если они используются в процедурах или как пользовательские функции листа только в том случае, если они не пытаются произвести графически видимые изменения, в том числе изменение значений ячеек или их цвет. Для графических изменений нужно использовать процедуры, а функции - строго для того, чтобы они возвращали свое значение ( в том числе в ячейку, откуда вызываются - это графическое изменение - штатное).
Visual Basic
1
2
3
Function qwe()
qwe="qwer"
End Function
В ячейке A1 формула =qwe()

Добавлено через 9 минут
Хотя если мы не работаем с функцией, и не разу не пытались ее запустить - то это самостоятельный глюк.

Добавлено через 20 часов 25 минут
Попытался воспроизвести пример того старого глюка: он проявляется только при вызове функции из ячейки, в ячейке при этом появляется ошибка #ЗНАЧ
Visual Basic
1
2
3
4
5
6
7
8
Function test_raboty() As String
    'Stop ' расскоментируйте и увидите псевдовыход при пошаговом выполнении по F8 после вызова функции из ячейки
    '-----блок функции 1 - Срабатывающий
    test_raboty = "1" & "начало2 работы функции"
    ActiveSheet.Cells(1, 1).Interior.Color = vbRed  'Строка не срабатывает и вызывает выход из функции
    '-----блок функции 2 - Не срабатывающий
    test_raboty = "2" & "Функция сработала полностью!!!"
End Function
1
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 411
08.10.2014, 14:11  [ТС] #72
Немного жести.
1. Пишем:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Public Function qwe()
 Call qwe1(dТест1)
End Function
 
Private Function qwe1(dОписаниеДанных)
 'Call callMe(dОписаниеДанных)
 Stop
End Function
 
Private Function callMe(ParamArray dПараметры())
 Stop
End Function
2. Жмем F5 на qwe
3. Встаем на stop в qwe1
4. Пишем в Immediate "? callMe(dОписаниеДанных)", жмем ентер
5. Получаем рантайм "Internal error" при всем при том, что если раскомментить выше стоящую строку - она проходит и мы сначала вываливаемся в Stop в callMe
Как показали опыты - причина в отсутствии конкретной типизации передаваемых данных - т.е. свал на Variant и Object
Можно было бы обойтись и без Immediate, но проблема в том, что у экселя в какой-то момент кончается терпение(назовем это так) и ни с того ни с сего - он начинает бросаться на аналогичные строки вызова все с тем же рантаймом но уже в коде!

Не по теме:

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

вывод один - чаще используйте типизацию данных!
По мотивам Excel Professional 2010x64(14.0.7106.5003)@Win7(Корпоративная)x64 SP1 (+ все патчи до текущего момента)
0
Миниатюры
Профессиональные проблемы, решения, рекомендации и ошибки  
KoGG
5272 / 1345 / 319
Регистрация: 23.12.2010
Сообщений: 2,019
Записей в блоге: 1
08.10.2014, 16:35 #73
Окно Immediate в штатном режиме не видит Private функции и процедуры. Проблема выросла из этого.
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 411
08.10.2014, 17:39  [ТС] #74
Immediate все прекрасно видит. Пожалуйста, проверьте или приведите пример (ссылку на документируемость заявленного вами факта или опишите, что вы подразумеваете под "штатным режимом").
Все в том же окне все в той же ситуации запрос "? callMe(i1&)" прекрасно отрабатывает.
... что интересно, там же отрабатывает и "? callMe(cvar(i1))".
0
KoGG
5272 / 1345 / 319
Регистрация: 23.12.2010
Сообщений: 2,019
Записей в блоге: 1
09.10.2014, 10:50 #75
Под штатным режимом я имею ввиду работу без остановки на отладку. И действительно Private процедуры и функции не видны в штатном режиме из окна Immediate.
По определению Private процедура или функция доступна для вызова только из собственного модуля.
Если Immediate видит Private процедуру или функцию - это уже ошибка.
При этом попытка вызвать в Immediate результат Private функции по факту заменяется распечатыванием значения пустой локальной переменной, возникшей в Immediate, и совпадающей с именем нужной нам функции .
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 411
09.10.2014, 11:47  [ТС] #76
Коллега, даже на картинке видно, что вызываемая функция в окне Immediate находится в рамках одного модуля(листа). Почему вы решили, что
Цитата Сообщение от KoGG Посмотреть сообщение
Проблема выросла из этого.
Если вызывать private функцию другого модуля, то сообщение будет другое - "Sub or Function not defined"

Не по теме:

... поверьте, мне хватает квалификации, чтобы понять, что нельзя вызывать private функцию другого модуля.


Цитата Сообщение от KoGG Посмотреть сообщение
При этом попытка вызвать в Immediate результат Private функции по факту заменяется распечатыванием значения пустой локальной переменной, возникшей в Immediate, и совпадающей с именем нужной нам функции .
- так почему же он не распечатывает значение пустой локальной переменной, возникшей в Immediate, и совпадающей с именем нужной вызываемой в том же модуле(листе) функции? а при вызове дает "Internal error" ...
0
mc-black
2759 / 695 / 101
Регистрация: 04.02.2011
Сообщений: 1,421
09.10.2014, 14:08 #77
Цитата Сообщение от StepInLik Посмотреть сообщение
вывод один - чаще используйте типизацию данных
Точно не знаю, откуда, но я всегда это знал. По крайней мере практиковал. Без конкретной типизации код остается таким там, где иного пути нет (или он работает нерационально). Поэтому люблю по поводу и без твердить новичкам в VBA об обязательности для них Option Explicit, если они хотят уметь писать, а не ловить и обсуждать баги на форуме. И, повторюсь, роскошь неявных преобразований типов без объявлений, могут позволить себе те, кто имеет опыт, сравнимый с форумчанином CatStail (в его примерах я наблюдаю это чаще, чем у других).
0
KoGG
5272 / 1345 / 319
Регистрация: 23.12.2010
Сообщений: 2,019
Записей в блоге: 1
09.10.2014, 14:46 #78
вызываемая функция в окне Immediate находится в рамках одного модуля(листа).
- бредовость фразы разве не бросается в глаза?

Добавлено через 26 минут
Пример из поста #72 в стандартном модуле не дает никакой ошибки.
Опыт показывает, что в модуле листа нельзя присваивать функциям имена, совпадающие с буквенно-цифровыми адресами ячейки.
Если в модуле листа стоят функции:
Visual Basic
1
2
3
4
5
6
7
Public Function a1()
 a1 = 2
End Function
 
Function b2()
 b2 = 4
End Function
- в окне Immediate они дают пусто.
Окно Immediate начинает видеть Private функции только при остановке на отладку.

Добавлено через 3 минуты
Да еще в модуле листа все функции всегда Private.
1
mc-black
2759 / 695 / 101
Регистрация: 04.02.2011
Сообщений: 1,421
24.11.2014, 15:29 #79
Ошибка макрорекордера Excel (Office 2010 32bit + Windows 7 64 bit):
Visual Basic
1
2
3
4
With ActiveWorkbook.Sheets("Лист1").Tab
    .ColorIndex = xlColorIndexNone ' макрорекордер пишет xlAutomatic (ошибка!)
    .TintAndShade = 0
End With
При попытке выполнить записанное макрорекордером для изменения цвета ярлычка листа получим ошибку времени выполнения. Макрорекордер пишет xlAutomatic, а по документации из справки следует, что надо пользоваться для этого xlColorIndexNone.
0
StepInLik
1062 / 100 / 4
Регистрация: 19.12.2012
Сообщений: 411
13.02.2015, 13:29  [ТС] #80
1. объединяем ячейки A1-B1, C1-D1, E1-F1
2. выделяем столбцы B, D, F и скрываем их
3. встаем на A1 и жмем поочередно клавишу вправо ... - работает как и должно- курсор последовательно переходит по ячейкам A1, C1, E1 - все правильно
4. встаем на E1 и жмем клавишу влево ... - и сразу переходим на A1 минуя C1 - ГЛЮК (если ячеек будет больше, то выделяемые ячейки так и будут скакать через одну)

Добавлено через 19 минут
1. находим один из столбцов, который находится справа листа за границей видимости листа ... например, последний столбец, который я вижу - S и часть T, а тот про который речь - например любой из следующих за ними ... к примеру возьмем столбец W
2. выделяем его и жмем Ctrl+Shift+вправо - выделяя все столбцы от W вправо - т.е. все следующие за ним
3. скрываем их
4. переходим в A1
5. и начинаем поочередно жать клавишу вправо ... жмем жмем ... и смотрим на нижний скролл ... - все правильно - ползунок скрола начинает постепенно сдвигаться вправо тоже
6. но как только появлется последний перед скрытыми столбцами столбец V и появлется зона, в которой расположены скрытые столбцы - скролл расширяется, словно слева и нет никакой части сдвинутой страницы ...
7. и ... если нажать на стрелку слева от скрола - страничка соответственно сместится и появится небольшая часть листа, ранее скрытая слева ... а вот если схватить за сам ползунок скрола и потянуть его влево - будет резкий переход в левую часть страницы
0
13.02.2015, 13:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2015, 13:29
Привет! Вот еще темы с решениями:

BDE - ошибки и решения
Доброго всем дня. Нужна помощь/совет. Есть программа на Delphi, исходников...

Реестровый триал(ошибки и решения)
Привет, всем. Пишу свою программу. Ну и создал даже модуль триала через реестр,...

Укажите ошибки и пути их решения
#include <stdlib.h> #include <stdio.h> int main(int argc, char* argv) { ...

Какие проблемы Вы видите при решении данной задачи? Предложите алгоритм решения
Здравствуйте, помогите с заданием для зачета пожалуйта. Информация о том,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru