Показать полную графическую версию : [архив] Microsoft Excel 2003 и более ранние версии
Pliomera
26-07-2005, 15:12
К сожалению Вы не указали версию системы, которую используете. Common dialog control - составная часть именно системы, а не офиса. Кроме того могут иметь место конфликты языков (например при использовании русского офиса и английской винды). Еще стоит попробовать немного модифицировать программный код Вашей рабочей книги, добавив объект Userform, и вставлять Common dialog уже на эту форму. Это просто размышления. Только что проверил на своей системе Win 2k3 Server Enterprise ENG + Office 2003 ENG. Элемент Common control ver. 6.0 присутствует, вставляется и нормально работает, элемента версии 5.0 в списке просто нет.
NasdaqPredictor
27-07-2005, 15:45
Уважаемый (ая) Pliomera ,
Спасибо за ответ.
Операционка у меня WIN XP SP 2 RUS. Офис как уже упоминал - 2003.
Похоже отсутствие у меня Common Dialog Control ver 6.0 - Это именно проблема операционки.
Хотя, опять-же повторяюсь, но предполагаю, что подгрузка в SYSTEM32 файла comdlg32.ocx большего размера (полагаю более поздней версии) проблему решило.
Возможно Вам будет не сложно выложить здесь или прислать на мыло ваши версии файлов comdlg32.ocx и comdlg32.dll, был бы очень Вам признателен. Поскольку полагаю, что у Вас они самые свежие.
Желаю удачи.
vagner_HATE
01-08-2005, 14:18
Здравствуйте! Скажите пожалуйста кто знает как можно изменить в EXCEL срез первых нулей?? Допустим выделяем значение 000123 , заходим в программу-вставить и вставляет он только 123. В настройках самой проги чего то не нашел как это обойти, может это как то в реестре правиться ??
aESThete
01-08-2005, 15:00
Если это число потом не используется в формулах, попробуйте поставить перед числом знак апострофа (превратить в текст).
или имзенить формат ячейки на Общий...
или имзенить формат ячейки на Общий...
Тогда уж на "текстовый" :) .
у меня подобная проблема только разница в том, что файлы приходится открывать через сетевое окружение.. причем через меню excela открывается нормально. а если просто кликать по ярлыку то пустое окно с шапкой excel )
iam_alex
25-08-2005, 12:36
было такое давно с office97 и wincmd каким-то старым на Win98. не помню, вот, как решил. у тебя какие версии того-другого?
буду вспоминать.
win XP SP1, и офис тоже XP (2002)... просто раньше то нормально было...а потом вот так вот стало...:((
iam_alex
25-08-2005, 17:37
вспоминал-вспоминал... а 1С не стоит случаем?
было такое у одного пользователя, справился. оказалось следующее:
файл открывался нормально, тока его не видно на экране, т.е. происходило следующее, сам файл когда открывается а он находится за границами рабочаго стола в екселе, и поэтому при открытии ты видиш белый рабочий стол екселя. как справится, при открытом файле попробуй сменить разрешение монитора, тогда есть шаснс увидеть сам открытий файл или выполни комунду свернуть а потом развернуть можно наоборот. Удачи
grigory2005
02-09-2005, 16:34
В столбце находятся ячейки в которых работают формулы.
Задача:исключить возможность появления в этих ячейках отрицательных чисел.
Pliomera
02-09-2005, 21:21
Уточни немного задачу, что значит "исключить" ? А если результат формулы дает отрицательное число? То есть надо исключить область определения аргументов формулы, в которых ее значение отрицательно? Ну эту задачу вряд-ли возможно решить в общем виде, так как формулы могут быть бесконечно разнообразны. Другое дело можно использовать так называемое "форматирование по условию", при этом например все ячейки, в которых будут появляться отрицательные значения, можно сделать, например красным шрифтом, или на желтом фоне, или выделить другим типом форматирования. Если тебе нужно решение вопроса, опиши задачу в целом, можно в мыло...
grigory2005
02-09-2005, 23:11
Уточняю:
в ячейке, где находится формула ,определяется разность между одной ячейкой
где число постоянно и второй ячейкой (накопительной),куда вводят данные.
При разности =0,необходимо заблокировать ввод в накопительную ячейку.
Количество строк очень большое,
Спасибо.
Pliomera
03-09-2005, 14:25
Все равно не совсем понятно: в момент ввода числа в ячейку результат формулы в другой ячейке, зависящей от нее - ЕЩЕ НЕ ИЗВЕСТЕН!!! Он будет вычислен ПОСЛЕ окончания ввода числа и может оказаться как >0, так и <0. Невозможно поставить следствие впереди причины, или мы должны заставить электронную таблицу ПРЕДУГАДЫВАТЬ то, что собирается ввести пользователь.
aESThete
03-09-2005, 15:00
PliomeraЧестно говоря, не силен в VBA. Предположение: не знаю, есть ли такие события как Validate или OnChange, видно ли там старое значение. Попробовать вычислить формулу для результирующей ячейки, если некорректное значение, изменения отклонить или восстановить старое значение и/или рявкнуть меседжбоксом.
PS придумалось по ходу: копировать старые значения в скрытый защищенный параллельный столбец/строку/лист и при "неправильном" значении восстанавливать оттуда.
Pliomera
04-09-2005, 04:37
Вот, по размышлению, такой может быть реализация идеи с резервированием предыдущих значений:
Предположим, что в столбце B листа Sheet1 в момент активации листа хранятся допустимые
(валидные) значения, при котором результаты формул, записанных в столбце C - имеют также
допустимые значения. Здесь могут быть 2 варианта: 1 вариант - число строк (пар
значение-формула) конечно, например с 5 по 25 строку, и 2 вариант - число строк
неопределено, допустим постоянно пополняемая таблица, при этом формулы протягиваются по
мере надобности.
В момент активации листа нам надо заполнить значениями из столбца текущих аргументов (B)
заранее объявленный массив, размер которого будет либо фиксированным (1 вариант) либо
динамическим (2 вариант), для того, чтобы воспользоваться нужным значением для отката, в
случае, если пользователь введет некорректные данные.
Таким образом:
- объявляем в general declarations листа:
Private UndoValues(5 To 25) As Variant 'Для 1 варианта
Private UndoValues() As Variant 'Для 2 варианта
В модуле листа пишем:
Для 1 варианта:
Private Sub Worksheet_Activate()
Dim iCount As Integer 'Счетчик цикла
For iCount = 5 To 25
UndoValues(iCount) = Sheets("Sheet1").Cells(iCount,2).Value 'Здесь 2 - номер столбца
Next iCount
End Sub
Для 2 варианта (пусть ряд аргументов начинается также с 5 строки, но их число не
определено):
Private Sub Worksheet_Activate()
Dim iCount As Integer 'Счетчик цикла
Dim rowCount As Integer 'Счетчик строк
rowCount = 5 'Присваиваем начальное значение
Do Until Len(CStr(Sheets("Sheet1").Cells(rowCount,2).Value)) = 0 'Проверка не пуста ли очередная ячейка
rowCount = rowCount + 1 'Инкремент
Loop
Redim UndoValues(rowCount - 1) 'Задаем диапазон динамического массива, при этом элементы с 0 по 4 нам не потребуются
For iCount = 5 To rowCount - 1
UndoValues(iCount) = Sheets("Sheet1").Cells(iCount,2).Value 'Считываем значения
Next iCount
End Sub
Теперь там же в модуле листа пишем:
Private Sub Worksheet_Change(ByVal Target As Range)
If Sheets("Sheet1").Cells(Target.Row, 3).Value >= 0 Then Exit Sub 'В данном случае - проверка является ли положительным значение формулы расположенной в соседней ячейке справа
Target.Value = UndoValues(Target.Row) 'А здесь возвращаем первоначальное значение
End Sub
При последовательных изменениях в одной и той же ячейке, процесс считывания исходных
валидных значений лучше убрать из события активации листа куда-нибудь еще, например в
отдельный модуль, и вызывать, скажем по нажатию кнопки, или по событию Calculate.
Надеюсь понятно изложил :)
aESThete
04-09-2005, 11:20
Pliomera
Вот, родилось:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target ... ' здесь надо проверить, попадает ли изменяемое значение в "наш" (сохраненный) диапазон
If Sheets("Sheet1").Cells(Target.Row, 3).Value >= 0 Then ' здесь можно (нет, нужно!) вместо проверки соседней, вставить ту самую вычисляемую формулу, и проверять на валидность
UndoValues(Target.Row) = Target.Value ' сохраняем вновь введенное значение для последующих возможных откатов
else
Target.Value = UndoValues(Target.Row) ' или возвращаем первоначальное значение
end if
end if
End Sub
Pliomera
04-09-2005, 12:38
aESThete
вставить ту самую вычисляемую формулу
Это не всегда возможно, потому что формула может ссылаться на множество разных ячеек и считывать значения их всех программным способом может быть очень громоздко, а вариант проверки по некоторому условию результата формулы записанной на листе - возможен, потому что значение в ячейке, содержащей формулу перевычисляется ДО окончания работы процедуры Worksheet_Change. Не обязательно эта формула должна быть справа от изменяемой ячейки, это просто для примера...
aESThete
04-09-2005, 12:47
Pliomera
значение в ячейке, содержащей формулу перевычисляется ДО окончания работы процедуры Worksheet_Change
Наверное вы имели ввиду до вызова процедуры? Т.е., как я понял, сначала делаются все перерасчеты формул (стабилизация таблицы), а потом вызывается процедура обработки события. Будем иметь ввиду.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.