Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: Несколько вопросов по VBA (Excell&Word) Добавлено: 21.08.06 11:58  

Автор вопроса:  Bagathur | ICQ: 220285434 
Когда в Excell я ввожу значения в ячейки из элементов управления типа

Код:
.cells (i, 5).value = Listbox.List (i, j).Value


они вводятся в указанной в элементе форме, без учёта формата ячейки (например, если в текст-боксе написано "01.01.2001" то в ячейке пишется тоже "01.01.2001", несмотря на то, что формат ячейки обязывает отображать дату в виде "01" января 2001 г.)
Если же после ввода значений пробежать по ячейкам и просто нажать Enter (т.е. ввести значение ещё раз), всё отображается в верном формате.
Пробовал делать то же самое кодом - не получается. Пробовал .value, .text, .formulas - тоже не выходит. Помогите плиз.

И второй похожий вопрос - как заставить ячейку принимать значения без отбрасываний незначащих разрядов? Т.е. например если в ячейку с суммой я ввожу число "1 000,00" то при соответствующем формате оно так и выглядит, в то время как .value равно 1000, без нулей после запятой. Как заставить .value быть с нулями?
Пробовал делить на 1 и при значении остатка "0" дописывать через "&" нули вручную, но получается какая-то громоздкая и не внушающая доверия конструкция. Есть ли пути проще?

Как обходить диалоговое окно "Вы пытаетесь открыть уже открытый файл"? Кроме попытки сделать окно с именем проверяемого файла активным и отлавливания ошибки ничего не приходит в голову. Конечно, работает, но получается около 30 "промаргиваний" экрана за минуту, жутко раздражает. Может быть есть способ проще?

Можно как-нибудь к файлам *.doc и *.xls прикреплять пару-тройку строк, прочитать которые можно только кодом? Чтобы они всегда "путешествовали" по каталогам и дискам вместе с файлами, но не были видны "неискушённому" пользователю? Что-нибудь типа file ID?

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 Дмит



Вопросов: 11
Ответов: 160
 Web-сайт: dimit.pochta.ru
 Профиль | | #1
Добавлено: 21.08.06 14:40
1. = Format(Listbox.List (i, j).Value, "dd mmmm yyyy г.";)
2. Формат - ячейки - число - числовой - число десятичных знаков - 2
3. А зачем открываь уже открытый файл?
4. Я бы воспользовался свойствами файла, но они видны пользователю в соответствующем окне.
Неискушённый пользователь обычно их не смотрит, особенно "прочие".

Ответить

Номер ответа: 2
Автор ответа:
 Bagathur



ICQ: 220285434 

Вопросов: 1
Ответов: 5
 Профиль | | #2 Добавлено: 21.08.06 15:15
Форматирование текст-бокса не поможет, т.к. я использую дату из него несколькими разными способами - например, 01.01.01 для написания в виде "01" января 2001 г., в виде 01-01-2001 г. и 01.01.2001, плюс для извлечения месяца. Если записать это число в различные ячейки с соответствующими форматами, а потом нажать Enter - всё выглядит так, как требуется. Нет ли программного способа для нажимания Enter-a?

Формат ячеек не помогает, т.к. .Value всё равно "1234", а не "1234.00", как отображается, и соответственно функция ПРАВСИМВ(число, 2) для этого числа возвращает значение "34", а не "00", как требуется (необходимо для полупрописного написания суммы, для отсечения копеек)

Открываю не я, а программа, причём список файлов, достигающий иногда 50+ названий

В свойства файла проблематично засунуть 500+ строковых переменных по 5-15 символов каждая.

Ответить

Номер ответа: 3
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #3 Добавлено: 21.08.06 21:44
1. Нажимать Enter уж ОЧЕНЬ криво, посему:
    If IsDate(ListBox.List(i, j).Value) Then
        .Cells(i, 5).Value = CDate(ListBox.List(i, j).Value)
    Else
        'MsgBox "Значение " & ListBox.List(i, j).Value & " не может быть преобразовано в формат даты!"
    End If
2.
Как заставить .value быть с нулями?
Зачем??? При считывании значение ячейки тебе паралельно в каком формате ты получил значение - тебе нужно далее преобразовать полученное значение к нужному виду -
Format Function
.
3.
Открываю не я, а программа, причём список файлов, достигающий иногда 50+ названий
Надо бы не заставлять программу открывать 50 одинаковых файлов (да и ваще хоть 2 одинаковых). Это нужно проверять ваще до открытия - и информировать пользователя (если нужно)!
4. Лично я бы создал отдельно .ini файл, который бы передавал с офисными файлами. У каждого свое понятие "неискушенный пользователь" - так что спрятать
500+ строковых
проблематично... тем более что "штатных" лазеек на это нет.

Ответить

Номер ответа: 4
Автор ответа:
 Дмит



Вопросов: 11
Ответов: 160
 Web-сайт: dimit.pochta.ru
 Профиль | | #4
Добавлено: 21.08.06 22:46
прикреплять пару-тройку строк
500+ строковых переменных по 5-15 символов каждая

Это два вопроса или один?
Если второе, то скорее всего нужен скрытый лист, хотя
У каждого свое понятие "неискушенный пользователь"

Посмотри http://www.relib.com/forums/Topic868611-11-1.aspx

Ответить

Номер ответа: 5
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #5 Добавлено: 22.08.06 07:56
Посмотри http://www.relib.com/forums/Topic868611-11-1.aspx
Я лично пользуюсь ID причем он есть и у Range и у Cells. В ID можно запихнуть строку практически неограниченной длины. Минус сего мероприятия - информация в ID жива пока открыт файл - то есть херится при закрытии и последующем открытии файла!!!!!! На счет подсказок к ячейам - да этим часто пользуются, но это не есть "спрятать".

Ответить

Номер ответа: 6
Автор ответа:
 Bagathur



ICQ: 220285434 

Вопросов: 1
Ответов: 5
 Профиль | | #6 Добавлено: 22.08.06 11:21

Да, способ CDate работает, но только с датами. Как заставить и другие значения принимать внешний вид в соответствии с форматом ячеек? Например, при написании сумм в нужной валюте?

И вытаскивание из числа цифр после запятой - как его осуществлять? Если пользователь вводит в элементы управления целую сумму (например, то же самое "1234.00", то значение идёт без незначащих разрядов, просто как 1234. Как получить написание суммы в виде "1234 рубля 00 копеек"?
Сейчас для вытаскивания копеек я использую функцию Excell ПРАВСИМВ (число*100; 2), т.е. умножение на 100. Однако при некоторых вычислениях (например, НДС) сумма получается с дробными копейками, и ПРАВСИМВ вытаскивает совсем не то, что нужно.
Дробные копейки при помощи Сервис - Параметры - Вычисления - Точность как на экране или функций ЦЕЛОЕ (число) и ОКРУГЛ (число, 0) убирать проблематично, т.к. аудиторы и прочие делают из одной утерянной в процессе вычислений копейки финансовую катастрофу масштабов страны.
Я поставил заглушку в виде Instr (1, число, ".";), "вручную" отсекая дробные копейки. Но получается как-то слишком громоздко - наверняка ведь должен быть способ проще?

Для хранения переменных файлов Excell я как раз и использую "невидимый" лист, но как быть с документами Word? Ничего похожего я там не встречал. А Hidden .ini файлы с записанными при помощи File Input значениями переменных не перемещаются вместе с документами по жёсткому диску. Есть ли возможность как-то программно прикреплять их один к другому?

И неужели способ нажимать кодом Enter вместо пользователя такой сложный? Это ведь простейшая операция, и имитировать её тоже должно быть просто?

Ответить

Номер ответа: 7
Автор ответа:
 Bagathur



ICQ: 220285434 

Вопросов: 1
Ответов: 5
 Профиль | | #7 Добавлено: 22.08.06 11:29

И почти забыл - подскажите простейший способ проверять, открыты ли документы Word и таблицы (рабочие книги) Excell? Желательно проверку не только по названию файла, но и по полному имени (т.е. лежащие в разных директориях HDD)?
Вместо попытки активировать окно и отлавливания ошибки перешёл на
if Activedocument(workbook).name = openname then ...
вроде экран моргать перестал

Ответить

Номер ответа: 8
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #8 Добавлено: 22.08.06 14:18
7. - http://www.progz.ru/forum/index.php?showtopic=25844

Ответить

Номер ответа: 9
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #9 Добавлено: 22.08.06 14:21
И неужели способ нажимать кодом Enter вместо пользователя такой сложный?
Не сложный, а неправильный!

Ответить

Номер ответа: 10
Автор ответа:
 Bagathur



ICQ: 220285434 

Вопросов: 1
Ответов: 5
 Профиль | | #10 Добавлено: 22.08.06 14:41

Оригинальный, а, главное, очень простой способ проверки, и как только я сам до него не додумался :) Спасибо, Незнайка.

Ответить

Номер ответа: 11
Автор ответа:
 Дмит



Вопросов: 11
Ответов: 160
 Web-сайт: dimit.pochta.ru
 Профиль | | #11
Добавлено: 26.08.06 18:47
В свойства файла проблематично засунуть 500+ строковых переменных по 5-15 символов каждая.

Очень просто:
With Application.ThisWorkbook.CustomDocumentProperties
            For i = 1 To 500
                .Add Name:="Название" & i, LinkToContent:=False, _
                        Type:=msoPropertyTypeString, _
                        Value:="Строковая переменная" & i
            Next
        End With

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам