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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2014, 18:06   #1
Afferist
 
Регистрация: 08.02.2013
Сообщений: 3
По умолчанию Что не так с кодом?

Добрый день! Сам я ни разу не програмист, поэтому вопрос к знатокам, что нужно поправить в коде, чтоб заработало? код найдан на просторах тырнета
Код:
Private Sub Кнопка2_Click()
'Объявляем переменные
Dim XL As Object
Dim XLT As Object
Dim newrow As Object
Dim rsd As ADODB.Recordset
Dim strSQL As String
Set rsd = New ADODB.Recordset


'Запрос к базе данных
strSQL = "SELECT Скан.Скан, [Копия Серийник-инвентарник].[Серийный номер], Max([Копия Серийник-инвентарник].Партия) AS [Max-Партия], 
Max([Копия Серийник-инвентарник].Ярлык) AS [Max-Ярлык], Max([Копия Серийник-инвентарник].[Код актива]) AS [Max-Код актива], Max([Копия
 Серийник-инвентарник].Количество) AS [Max-Количество], Max([Копия Серийник-инвентарник].[Код позиции]) AS [Код НФС], 
Max(Номенклатура.Описание_позиции) AS [Max-Описание_позиции], Max([Копия Серийник-инвентарник].[Описание актива]) AS [Max-Описание 
актива], Max([Копия Серийник-инвентарник].[Расположение 5 опис]) AS [Max-Расположение 5 опис], Max([Копия Серийник-инвентарник].[Код 
Производителя]) AS [Max-Код Производителя]FROM Скан LEFT JOIN ([Копия Серийник-инвентарник] LEFT JOIN Номенклатура ON [Копия Серийник-
инвентарник].[Код позиции] = Номенклатура.Код_НФС) ON Скан.Скан = [Копия Серийник-инвентарник].Скан GROUP BY Скан.Скан, [Копия Серийник-
инвентарник].[Серийный номер]; from dbo.table where kod = "



'Создаем необходимые объекты
Set XL = CreateObject("Excel.Application")
'для примера показываю, как можно сразу загружать шаблон без выбора
Set XLT = XL.Workbooks.Open("C:\Users\DShevchenko\AppData\Roaming\Microsoft\Шаблоны\Шаблон_Акт_Возврата.xltm")
'1 способ если источнике данных всего одна строка
With XLT.Worksheets("Лист1")
              .[a16] = rsd.Fields("Отсканированно ")
              .[b1] = rsd.Fields("field2")
              .[c1] = rsd.Fields("field3")
              .[d1] = rsd.Fields("field4")
            End With
'2 способ если строк в источнике несколько
'причем мы учтем то, что у нас есть шапка и примечание в Excel
'и мы не знаем, сколько строк у нас вставиться
'и поэтому строки будем добавлять в случае необходимости
'зададим, с какой строки будем начинать вставлять данные
Rows = 16
'для нумерации

'запускаем цикл до тех пор, пока не закончатся строки в нашем источнике
While Not (rsd.EOF)
    'смотрим, если строк больше чем мы задали в шаблоне
     If Rows >= 2 Then
     'то добавляем строку
         XLT.Worksheets("Лист1").Rows(Rows).Insert
     'Запомним нашу строку
         Set newrow = XLT.Worksheets("Лист1").Rows(Rows)
     'и вставим туда копию предыдущей строки
     'для того если вдруг у вас там есть объединенные ячейки или какие-то нужные данные
     'так как новая строка создастся без всяких объединений и значений
         XLT.Worksheets("Лист1").Rows(Rows - 1).Copy newrow
     'это просто для примера как можно очистить некий диапазон внутри документа
         'XLT.Worksheets("Лист1").Range("A10:F10").ClearContents
         'динамически формируем адрес нужной ячейки
     Cells = "a" & Rows
     'и задаем ей значение
         XLT.Worksheets("Лист1").Range (Cells)
         Cells = "b" & Rows
         XLT.Worksheets("Лист1").Range(Cells) = rsd.Fields("field5").Value
         'переходим на следующую строку
     Rows = Rows + 1
     'переходим на следующую строку в источнике данных
         rsd.MoveNext
     Else
     'а это выполняется до тех пор, пока не закончатся заданные строки в шаблоне
     'т.е. если строк в источнике всего 1 то в код, который выше мы даже не попадем
         Cells = "a" & Rows
         XLT.Worksheets("Лист1").Range (Cells)
         Cells = "b" & Rows
         XLT.Worksheets("Лист1").Range(Cells) = rsd.Fields("field5").Value
         Rows = Rows + 1
         rsd.MoveNext
     End If
    'для нумерации
         
'конец цикла
Wend
'это просто пример как можно удалить строку целиком
'XLT.Worksheets("Лист1").Rows(20).Delete
'делаем Excel видимым
XL.Visible = True
'Очищаем переменные
Set XL = Nothing
Set XLT = Nothing
Set newrow = Nothing
End Sub

Последний раз редактировалось Stilet; 12.12.2014 в 08:16.
Afferist вне форума Ответить с цитированием
Старый 12.12.2014, 08:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что нужно поправить в коде, чтоб заработало?
Наверное нужно поправить ошибку )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.12.2014, 09:59   #3
Afferist
 
Регистрация: 08.02.2013
Сообщений: 3
По умолчанию

В данный момент выделяет строку
Код:
.[a16] = rsd.Fields("Отсканированно ")
Afferist вне форума Ответить с цитированием
Старый 12.12.2014, 10:00   #4
Afferist
 
Регистрация: 08.02.2013
Сообщений: 3
По умолчанию

как прописать какое поле запроса в аксесе равно ячейке А16 в екселе
Afferist вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Java : что не так с кодом? Djamadhar Общие вопросы по Java, Java SE, Kotlin 3 26.08.2014 15:20
Что не так с кодом? SL1M_DOGG JavaScript, Ajax 16 13.07.2013 18:28
что не так с кодом? MICROSONIC C++ Builder 4 07.03.2012 01:07
Что с моим кодом не так? cooky Visual C++ 1 28.02.2012 15:10
Подскажите, что не так с кодом Grisha248 Помощь студентам 2 24.05.2009 16:41