Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel + VBA 2013 / 25 сообщений из 37, страница 1 из 2
04.06.2014, 09:41
    #38660999
Excel + VBA 2013
Всем привет, сегодня столкнулся с такой проблемой:
Нужно запрограммировать автоматический поиск нужных значений из базы данных, но VBA не понимает переменные для нее. Ввожу Dim База As DataBase, n As Recordset - а он выдает, мол, неизвестный тип переменных. Где-то в настройках можно "подцепить" расширение для Access, но как это сделать я не знаю, может кто подсказать?
...
Рейтинг: 0 / 0
04.06.2014, 10:14
    #38661018
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
Tools - References - MS ActiveX Database Objects
...
Рейтинг: 0 / 0
04.06.2014, 10:15
    #38661021
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
Хотя, стоп, если DataBase и Recordset, то надо подключать не ADO, а DAO, хотя лучше, конечно, освоить ADO
...
Рейтинг: 0 / 0
04.06.2014, 10:29
    #38661042
Excel + VBA 2013
все равно не получается: пишет, что какой-то конфликт возник
...
Рейтинг: 0 / 0
04.06.2014, 10:29
    #38661043
Surrogate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
Егор Терехов,

думаю надо подключать Microsoft DAO 3.6
Tools -> References -> Microsoft DAO 3.6
...
Рейтинг: 0 / 0
04.06.2014, 10:35
    #38661051
Excel + VBA 2013
Спасибо - помогло и переменные заработали.
Только теперь другая проблема, при я написал вот что для поиска:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Set ograd = OpenDatabase("C:\ograd.mdb")
   
   Set n = ograd.OpenRecordset("ograd", dbOpenTable)
      
      n.MoveFirst
      Do While Not n.EOF
       If tip = n.Fields(0) Then
            st = n.Fields(1)
            poyas = n.Fields(2)
            tr = n.Fields(3)
       End If
      n.MoveNext
      Loop
     n.Close


Модератор: Учимся использовать тэги оформления кода - FAQ


Выдает ошибку, что база по адресу C:/Ograd.mdb не найдена, хотя она именно там и находится. Можете с этим помочь?
...
Рейтинг: 0 / 0
04.06.2014, 10:42
    #38661062
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
Ой, кто ж вас так учил... перебирать все записи-то
Во-первых, если уж на то пошло, у рекордсета есть метод Find или что-то в этом роде.
Во-вторых, не надо пользоваться и Find - вы перекладываете на свою программу работу ядра БД, и главное - никак не используете индексы. Ваш код будет работать на несколько порядков медленнее, чем что-то типа

Код: vbnet
1.
Set n = ograd.OpenRecordset("SELECT st, poyas, tr FROM ograd WHERE id = " + CStr(tip), dbOpenForwardOnly)



Что касается "не найден" - так таки не найден, проверяйте путь, права доступа, слеш в правильную сторону стоит?
...
Рейтинг: 0 / 0
04.06.2014, 10:57
    #38661084
Excel + VBA 2013
а поймет ли так программа, что в соответствии первому столбику нужно присвоить значения трем переменным из трех других столбиков таблицы?
...
Рейтинг: 0 / 0
04.06.2014, 11:06
    #38661095
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Set n = ograd.OpenRecordset("SELECT st, poyas, tr FROM ograd WHERE id = " + CStr(tip), dbOpenForwardOnly)
if Not n.EOF
  st = n("st")
  poyas = n("poyas")
  tr = n("tr")
End If
n.Close
set n = Nothing

единственное, могу ошибаться в правильности синтаксиса в данном случае для OpenRecordset, давно не работал с DAO, но примерно так
...
Рейтинг: 0 / 0
04.06.2014, 14:09
    #38661433
Excel + VBA 2013
ну не открывает он базу данных и все тут.
Может возможно сделать так, чтобы он искал значения из таблицы в соседнем листе?
Алгоритм такой
Есть название, которое вводим вручную - программа ищет такое название в таблице и выписывает три параметра из соседних столбиков, соответствующих этому названию.
...
Рейтинг: 0 / 0
04.06.2014, 14:16
    #38661444
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
ну тут вообще можно обойтись формулами
...
Рейтинг: 0 / 0
04.06.2014, 14:25
    #38661463
Excel + VBA 2013
Объясните, пожалуйста, такую проблему (на рисунке): я чего-то не понимаю или это реально мистика
...
Рейтинг: 0 / 0
04.06.2014, 14:35
    #38661472
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
в первой строке переменной a присваивается результат побитового умножения выражений
(a / 2) и (i = 2)
первое равно 2700 второе не знаю чему равно, так как вы не сказали, чему равно i, но в итоге получился 0

во второй строке соответственно "а" уже равно 0
...
Рейтинг: 0 / 0
04.06.2014, 14:36
    #38661476
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
Shocker.Proвторое не знаю чему равновторое очевидно равно False, так как при True был бы другой конечный результат, то есть i не равно 2 в этом месте.

False это 0. При побитовом умножении на 0, результат тоже получается 0
...
Рейтинг: 0 / 0
04.06.2014, 14:40
    #38661481
Excel + VBA 2013
честно говоря, ничего не понял, i - это просто переменная, обозначенная как integer
...
Рейтинг: 0 / 0
04.06.2014, 14:42
    #38661483
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
выражение (i = 2) ложное, то есть False

False, по сути это Integer-тип равный нулю
...
Рейтинг: 0 / 0
04.06.2014, 14:43
    #38661486
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
перепишу вот так со скобками, чтобы были понятны приоритеты и преобразования типов

Код: vbnet
1.
a = ( (a / 2) And CInt(i = 2) )
...
Рейтинг: 0 / 0
04.06.2014, 14:46
    #38661493
Excel + VBA 2013
Вот хоть убейте, а = 0, даже пробовал дополнительную переменную вводить - все одно
...
Рейтинг: 0 / 0
04.06.2014, 14:58
    #38661515
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
Так что не так-то? я же объяснил, почему а=0
...
Рейтинг: 0 / 0
04.06.2014, 15:05
    #38661524
Excel + VBA 2013
как сделать так, чтобы условие выполнялось и при этом все работало?
Написно-то правильно, всегда так писал в 2010-м экселе - проблем не было. А тут какая-то непонятка
...
Рейтинг: 0 / 0
04.06.2014, 15:06
    #38661529
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
Если бы знать, что и как должно работать, можно было бы что-то посоветовать.
Вы привели код и попросили объяснить, как он работает.
А вот как он ДОЛЖЕН по вашей задумке работать, не сказали
...
Рейтинг: 0 / 0
04.06.2014, 15:08
    #38661532
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
а, мне кажется, я догадался:
Код: vbnet
1.
2.
3.
4.
If ... Then
  a = ....
  i = ....
End if
...
Рейтинг: 0 / 0
04.06.2014, 15:09
    #38661534
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Excel + VBA 2013
ну или в вашем случае
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
If ... Then
  a = ....
  i = ....
ElseIf
  a = ....
  i = ....
ElseIf
  a = ....
  i = ....
End If
...
Рейтинг: 0 / 0
04.06.2014, 15:15
    #38661549
Excel + VBA 2013
Спасибо, заработало, теперь все правильно считает!
...
Рейтинг: 0 / 0
05.06.2014, 08:42
    #38662163
Excel + VBA 2013
сейчас завис на таком этапе: Мы в ячейку 4,3 вводим название ограды, у каждого типа ограды есть три своих параметра: ширина опорных столбиков, количество поясов и размер трубы. Нужно, чтобы программа сама искала по названию соответствующие параметры в таблице. Таблица приведена на втором листе. Понятно, что переменной присваиваем значение "tip as String" и что задаем алгоритм поиска типа do while tip = "Столбец 1" тогда x="столбец 2" и y = "Столбец 3" и z = "Столбец 4" но сделать это все так, чтобы работало, у меня не получается - Я попросту не знаю, как грамотно это все написать. Еще такая проблема: В ячейке 5,3 мы вводим тип калитки. Переменную я сделал тоже "string" и сказал ей реагировать только назначения "левая" или "правая". В зависимости от этого и еще одного фактора программа должна вставлять заранее заготовленный рисунок прямо на рабочий лист. Либо может кто знает как сделать так, чтобы Excel сам рисовал?
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel + VBA 2013 / 25 сообщений из 37, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]