Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2009, 12:19   #1
Alfiks
Пользователь
 
Регистрация: 18.05.2009
Сообщений: 11
Лампочка Как убрать программно ошибку #Число!

Заливаю данные из файлов не хитрой функцией
PHP код:
Function MakeTable()
On Error GoTo MakeTable_Err

    DoCmd
.TransferSpreadsheet acLink8"Arnebia""d:\Sklad_Info\Arnebia.xls"False"A3:AT65536"
    
DoCmd.TransferSpreadsheet acLink8"ArnebiaCosm""d:\Sklad_Info\Arnebia_cosm.xls"False"A3:AT65536"
    
DoCmd.TransferSpreadsheet acLink8"ArnebiaCosm""d:\Sklad_Info\Arnebia_Sklad2.xls"False"A3:AT65536"


MakeTable_Exit:
    Exit Function

MakeTable_Err:
    
MsgBox Error$
    
Resume MakeTable_Exit

End 
Function 

При сохранении в аксесе, в одной из колонок стоят цифры вида "12345 и просто 12345. Проблема в том, что цифры вида 12345 он воспринимает как ошибку, и пишет что типа нет числа (#Число!).

Как заставить его распознать что 12345 тоже есть число?
Alfiks вне форума Ответить с цитированием
Старый 03.06.2009, 09:19   #2
b00s
Форумчанин
 
Регистрация: 19.01.2008
Сообщений: 120
По умолчанию

попробуйте заливать другим способом.
Например используя Recordset.Addnew и Recordset.Update
Что то вроде этого
Код:
    Dim xl As Excel.Application
    Dim xlb As Excel.Workbook
    Dim xls As Excel.Worksheet
    Dim rst As New ADODB.Recordset

    Set xl = CreateObject("Excel.Application")
    Set xlb = xl.Workbooks.Open("Путь к Excel файлу")
    Set xls = xlb.Worksheets("имя листа")

    rst.Open "имя таблицы", CurrentProject.Connection, adOpenStatic, adLockOptimistic
        i=1
        Do While xls.Cells(i, 1) <> ""
        rs.AddNew
        For j = 1 To 2
            rs.Fields(j - 1).Value = xls.Cells(i, j)
        Next j
        rs.Update
        i = i + 1
    Loop

    rst.Close

    xl.Quit
b00s вне форума Ответить с цитированием
Старый 04.06.2009, 11:27   #3
Alfiks
Пользователь
 
Регистрация: 18.05.2009
Сообщений: 11
По умолчанию

Recordset не подходит, помимо того , чтобы залить, нужно сделать обрезание верхних строк.
Alfiks вне форума Ответить с цитированием
Старый 04.06.2009, 16:49   #4
b00s
Форумчанин
 
Регистрация: 19.01.2008
Сообщений: 120
По умолчанию

Ну так в чем проблем то? Сначало обрежте строки потом грузите через рекордсет
b00s вне форума Ответить с цитированием
Старый 05.06.2009, 10:25   #5
Alfiks
Пользователь
 
Регистрация: 18.05.2009
Сообщений: 11
По умолчанию

Цитата:
Сообщение от b00s Посмотреть сообщение
Ну так в чем проблем то? Сначало обрежте строки потом грузите через рекордсет
Я новичек в программировании.

Сложность в том, что программно нужно обрезать строки и внедрить.

То что вы предлагаете, нужно сначала обрезать вручную, а потом через рекордсет... Или вы имели ввиду, что залить сюда, и тут уже выцеплять данные? Не получится - тогда данные будут неправильные изначально.

Нужно на лету сделать, и обрезать и обработать данные. А рекордсет насколько я могу понимать, (я программированием занимаюсь только пару месяцев от силы) позволяет работать с уже созданной таблицей.
Alfiks вне форума Ответить с цитированием
Старый 05.06.2009, 13:13   #6
b00s
Форумчанин
 
Регистрация: 19.01.2008
Сообщений: 120
По умолчанию

С помощью кода, который я вам написал вы можете сделать все то что вам нужно. Правда с начало нужно его адаптировать под ваши данные. Если есть вопросы по коду, то я рад буду вам помочь.
b00s вне форума Ответить с цитированием
Старый 05.06.2009, 15:47   #7
Alfiks
Пользователь
 
Регистрация: 18.05.2009
Сообщений: 11
По умолчанию

Проблема возникла на этапе переменных.
Выдает сообщение "user-defined type not defined", непонятно какой тип данных указывается, а как указать его, я не знаю...
понимаю, что проблемка плевая, но для меня вызывет сложности... самоучка однако
Alfiks вне форума Ответить с цитированием
Старый 05.06.2009, 16:14   #8
b00s
Форумчанин
 
Регистрация: 19.01.2008
Сообщений: 120
По умолчанию

тип данных объявляется
Dim <имя переменной> as <тип данных>

Если не знаете какой тип данных соответствует переменной то можете его не ставить Dim <имя переменной>
b00s вне форума Ответить с цитированием
Старый 05.06.2009, 16:44   #9
Alfiks
Пользователь
 
Регистрация: 18.05.2009
Сообщений: 11
По умолчанию

Цитата:
Сообщение от b00s Посмотреть сообщение
тип данных объявляется
Dim <имя переменной> as <тип данных>

Если не знаете какой тип данных соответствует переменной то можете его не ставить Dim <имя переменной>
Ну это ясно, это уже азы как задавать, меня в тупик завели переменные вида Dim xl As Excel.Application, vba уже на этом клинило. Сейчас дело сдвинулось с мертвой точки...
Alfiks вне форума Ответить с цитированием
Старый 05.06.2009, 17:04   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Чтобы VBA понимал объявления типа Dim xl As Excel.Application,
необходимо в проекте VBA поставить ссылку на библиотеку Microsoft Excel 11.0 Object Library

Где подключить - написано здесь:
http://www.programmersforum.ru/showp...89&postcount=9
http://www.programmersforum.ru/showp...78&postcount=6

Последний раз редактировалось EducatedFool; 05.06.2009 в 17:08.
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как программно создать форму? viter.alex Microsoft Office Word 10 08.09.2015 09:00
Как программно создать форму на С Ytpyfqrf Общие вопросы C/C++ 4 02.06.2010 14:08
найдите пожалуйста ошибку qbasic жалуется что число вне диапазона когда ввожу бедный_студент Помощь студентам 4 10.05.2009 18:25
Как убрать информер aleksei-lip Безопасность, Шифрование 1 22.12.2008 13:08
Как убрать компонент SeRhy Помощь студентам 2 29.10.2007 17:29