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

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

Код: 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
Excel + VBA 2013
    #38661062
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, кто ж вас так учил... перебирать все записи-то
Во-первых, если уж на то пошло, у рекордсета есть метод Find или что-то в этом роде.
Во-вторых, не надо пользоваться и Find - вы перекладываете на свою программу работу ядра БД, и главное - никак не используете индексы. Ваш код будет работать на несколько порядков медленнее, чем что-то типа

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



Что касается "не найден" - так таки не найден, проверяйте путь, права доступа, слеш в правильную сторону стоит?
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38661084
а поймет ли так программа, что в соответствии первому столбику нужно присвоить значения трем переменным из трех других столбиков таблицы?
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38661095
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Excel + VBA 2013
    #38661433
ну не открывает он базу данных и все тут.
Может возможно сделать так, чтобы он искал значения из таблицы в соседнем листе?
Алгоритм такой
Есть название, которое вводим вручную - программа ищет такое название в таблице и выписывает три параметра из соседних столбиков, соответствующих этому названию.
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38661444
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну тут вообще можно обойтись формулами
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38661463
Объясните, пожалуйста, такую проблему (на рисунке): я чего-то не понимаю или это реально мистика
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38661472
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в первой строке переменной a присваивается результат побитового умножения выражений
(a / 2) и (i = 2)
первое равно 2700 второе не знаю чему равно, так как вы не сказали, чему равно i, но в итоге получился 0

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

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

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

Код: vbnet
1.
a = ( (a / 2) And CInt(i = 2) )
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38661493
Вот хоть убейте, а = 0, даже пробовал дополнительную переменную вводить - все одно
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38661515
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что не так-то? я же объяснил, почему а=0
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38661524
как сделать так, чтобы условие выполнялось и при этом все работало?
Написно-то правильно, всегда так писал в 2010-м экселе - проблем не было. А тут какая-то непонятка
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38661529
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы знать, что и как должно работать, можно было бы что-то посоветовать.
Вы привели код и попросили объяснить, как он работает.
А вот как он ДОЛЖЕН по вашей задумке работать, не сказали
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38661532
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, мне кажется, я догадался:
Код: vbnet
1.
2.
3.
4.
If ... Then
  a = ....
  i = ....
End if
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38661534
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну или в вашем случае
Код: 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
Excel + VBA 2013
    #38661549
Спасибо, заработало, теперь все правильно считает!
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38662163
сейчас завис на таком этапе: Мы в ячейку 4,3 вводим название ограды, у каждого типа ограды есть три своих параметра: ширина опорных столбиков, количество поясов и размер трубы. Нужно, чтобы программа сама искала по названию соответствующие параметры в таблице. Таблица приведена на втором листе. Понятно, что переменной присваиваем значение "tip as String" и что задаем алгоритм поиска типа do while tip = "Столбец 1" тогда x="столбец 2" и y = "Столбец 3" и z = "Столбец 4" но сделать это все так, чтобы работало, у меня не получается - Я попросту не знаю, как грамотно это все написать. Еще такая проблема: В ячейке 5,3 мы вводим тип калитки. Переменную я сделал тоже "string" и сказал ей реагировать только назначения "левая" или "правая". В зависимости от этого и еще одного фактора программа должна вставлять заранее заготовленный рисунок прямо на рабочий лист. Либо может кто знает как сделать так, чтобы Excel сам рисовал?
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38662226
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по поводу поиска - достаточно будет формулы - функция ВПР


Егор Тереховзаранее заготовленный рисунокЕгор ТереховExcel сам рисовалтак что же все-таки надо?
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38662299
Чтобы рисовалась схема расположения секций. Я не знаю, как сделать так, чтобы Excel сам рисовал, и не знаю, возможно ли это вообще! Поэтому и заготовил картинок заранее. Всего 20 штук. Как заложить на программном коде такой смысл

If "условие" Then "вставить картинку (путь такой-то)"
ElseIf "вставить другую картинку (путь такой-то)"
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38662372
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с возможностью "запись макроса" знакомы?
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38662437
пробовал - не работает
я тут нашел в справочнике такую команду
ActiveSheet.Pictures.Insert ("D:\plan\10.PNG")
нелает как раз то, что нужно, но как сделать так, чтобы картинка вставлялась в определенную ячейку, а то она просто в активную вставляется
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38662438
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Егор Тереховпробовал - не работаетчто это значит? появляется сообщение "я сегодня не работаю"?
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38662454
просто код пустой - нет ничего. Может глюк какой...
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38662527
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что пустое, простите?
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38662623
А все, разобрался, спасибо! Я стоп не нажимал просто...
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38663358
Можно еще такой вопрос: как сделать так, чтобы при поиске оград по алгоритму:

Код
With Sheets(2)
iRow = .Range("A:A" ;) .Find(tip, LookIn:=xlValues).Row
st = .Cells(iRow, 2)
poyas = .Cells(iRow, 3)
tr = .Cells(iRow, 4)
End With


при отсутствии совпадений программа выдавала месседж-бокс, мол, ограды с таким наименование не найдено?
Проще говоря, если программа не нашла введенную ограду, она бы вывела сообщение об этом и остановилась.
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38663379
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
set result=.Range("A:A").Find(tip, LookIn:=xlValues)
If result Is Nothing Then
  'нифига не найдено
Else
 iRow = result.Row
 st = .Cells(iRow, 2)
 poyas = .Cells(iRow, 3)
 tr = .Cells(iRow, 4)
End If
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38663515
не работает(((
Дописываю MSGbox = "такой ограды нет"
выдает ошибку.
И как обозначить переменную result?
Я написал ее как recordset, правильно?
...
Рейтинг: 0 / 0
Excel + VBA 2013
    #38663948
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Егор ТереховИ как обозначить переменную result?
Я написал ее как recordset, правильно?попробуйте использовать клавишу F1 по назначению и вообще, пытаться понимать смысл кода, а не пытаться его просто копипастить.

Find возвращает Range
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Excel + VBA 2013
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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