Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA

Автор: Troitsky
Дата сообщения: 17.11.2006 08:18
omikron

Цитата:
Set myBook = Workbooks.Open(Filename:="С:\test.xls")

выдает ошибку:
1004

А ты имя диска латинской "C" пиши, а не русской "С"
Автор: NPC
Дата сообщения: 17.11.2006 10:04
мне помогите пожайлуста, или слишком трудная задачка?
Автор: SERGE_BLIZNUK
Дата сообщения: 17.11.2006 10:45
NPC

Цитата:
мне помогите пожайлуста, или слишком трудная задачка

сформулируйте, что вы хотели получить...
Автор: TONADOOM
Дата сообщения: 17.11.2006 10:46
может кто подскажет ...
в ячейке хранится адрес страницы в интернете (например http://forum.ru-board.com/topic.cgi?forum=33&topic=3961&start=960) надо эту страницу из кода сохранить на диск , например в D:\HTM с именем tekst.htm , кроме кода страницы ничего не надо , для последующей обработки .
ну не получается самому , хоть подскажите в каком направлении искать.
Автор: NPC
Дата сообщения: 17.11.2006 10:58

Цитата:
NPC

Цитата:мне помогите пожайлуста, или слишком трудная задачка


сформулируйте, что вы хотели получить...

из одной книги А1,А2,А3, и т.д. перевести числа в шеснатеричный формат в другую книгу в А1,А2,А3, и т.д
тоже самое и с В1, В2,В3 так же в новую книгу
затем А1 и В1 объеденить, и так далее и в освободившемся колонки В дописать 25002 и тоже объеденить в А, или дописать можно сразу в А колонке
надеюсь доступно объяснил.
Автор: omikron
Дата сообщения: 17.11.2006 11:08
Спасибо большое,
ошибка была в том, что я напрасно указывал расширение файла.

Подскажите еще пожалуйста,
каким образом скопировать из активной книги лист во вновь созданную (или может вторую после создания и открывать не нужно), а сразу загнать туда листы при создании.
Автор: mrdime
Дата сообщения: 17.11.2006 12:19
Господа, возник вопрос.

Есть таблицы в Excel одинаковой структуры, которые периодически (и в разном количестве) необходимо экспортировать в Access (добавлять в уже существующую базу данных). Руками это делать надоело, назрела необходимость написания макроса, но столкнулся с полным отсутствием документации по экспорту таблиц в Access.
Если кто-то решал подобные задачи - дайте хотя бы пример или ссылку на ресурс, где про это можно узнать больше (можно англо/германо-язычный).
Автор: kramrus
Дата сообщения: 17.11.2006 12:37
SERGE_BLIZNUK
А как выложить файл?
Автор: jONES1979
Дата сообщения: 17.11.2006 13:21
mrdime

Создаешь объект ADO recordset, связываешь его с mdb-файлом и нужной табличкой, далее в цикле по листу Екселя, выбираешь нужные данные и добавляешь их в recordset
Автор: omikron
Дата сообщения: 17.11.2006 14:18
Помогите избавиться от ..

При копировании листа в другую книгу выдает сообщение
"Перемещаемая или копируемая формула или лист содержит имя 'а', которое уже имеется на листе. ...."

В списке имен по Ctrl-F3 этих имен нет, в панеле формул (где имя ячейки) тоже нет.
Как убрать этот мусор?

Спасибо.
Автор: Troitsky
Дата сообщения: 17.11.2006 18:56
NPC

Цитата:
надеюсь доступно объяснил


Код: Dim i As Integer, j As Integer

With Worksheets(1)
For i = 1 To .UsedRange.Columns.Count Step 2
For j = 1 To .UsedRange.Rows.Count
Worksheets(2).Cells(j, i).Value _
= Hex(.Cells(j, i).Value) _
& Hex(.Cells(j, i + 1).Value) _
& "25002"
Next j
Next i
End With
Автор: SERGE_BLIZNUK
Дата сообщения: 18.11.2006 07:07
NPC
Troitsky
мне кажется, что ему ( NPC ) проще надо...
Если я правильно его понял, то ему нужно из одной книги стобцы A и B перевести в hex, объединить, дописать "25002" и результат поместить в столбец A другой книги.

Похоже, что один цикл лишний (хотя, если у него всего два стобца заполнены, он этого даже не заметит ;-))))
Код:
Dim i As Integer, j As Integer
With Worksheets(1)
For j = 1 To .UsedRange.Rows.Count
Worksheets(2).Cells(j, 1).Value _
= Hex(.Cells(j, 1).Value) _
& Hex(.Cells(j, 2).Value) _
& "25002"
Next j
End With
Автор: kramrus
Дата сообщения: 18.11.2006 11:45
SERGE_BLIZNUK
В EXEL пишем формулу =ИНДЕКС('G:\Люда\[Октябрь 2006.xls]ОШ №11'!$F$19:$BY$418;ПОИСКПОЗ(F19;'G:\Люда\[Октябрь 2006.xls]ОШ №11'!$F$19:$F$418;0)+2;57)
РАБОТАЕТ.
Пишу макрос

Sub Макрос303()
Range("AT19").Formula = "ИНДЕКС('G:\Люда\[Октябрь 2006.xls]ОШ №11'!$F$19:$BY$418;ПОИСКПОЗ(F19;'G:\Люда\[Октябрь 2006.xls]ОШ №11'!$F$19:$F$418;0)+2;57)"
End Sub

НЕ РАБОТАЕТ.
Почему????

Я обрезал лишние формулы и числа. Мне в ячейках AT, AW, AY, BA, BC, BE, BG нужно получить данные из другой книги, формула в этих ячейках (не во всех строках, только напротив Ф.И.О.). Поскольку макросы только учу, в них часть формулы: ИНДЕКС, ПОИСКПОЗ.
Файл лежит здесь http://ifolder.ru/461527 объем 143 кб.
Автор: Troitsky
Дата сообщения: 18.11.2006 12:49
SERGE_BLIZNUK

Цитата:
мне кажется, что ему ( NPC ) проще надо...
Если я правильно его понял, то ему нужно из одной книги стобцы A и B перевести в hex, объединить, дописать "25002" и результат поместить в столбец A другой книги.
Похоже, что один цикл лишний (хотя, если у него всего два стобца заполнены, он этого даже не заметит )))

Тогда уж проще формулой:
Код: =ДЕС.В.ШЕСТН(Лист1!A1)&ДЕС.В.ШЕСТН(Лист1!B1)&"25002"
Автор: SERGE_BLIZNUK
Дата сообщения: 18.11.2006 13:45
Troitsky

Цитата:
Код:=ДЕС.В.ШЕСТН(Лист1!A1)&ДЕС.В.ШЕСТН(Лист1!B1)&"25002"
Так каждый раз не придется макрос вызывать при изменении данных.

YES!! Точно! Вот, крутилось, крутилось в голове... я тоже такое придумал, только меня смутило, что человеку нужен именно макрос ;-)) Имхо, это правильное решение...

kramrus я взял ваш файлик, посмотрю, отпишусь.
Автор: omikron
Дата сообщения: 19.11.2006 08:42
Всем привет!
Подскажете пожалуйста,

Требуется заполненный лист скопировать в файл результатов:
запись типа Sheets("Приложение").Copy Before:=Sheets(2)
создает копию в этой же книге, как этот лист перенести в другую книгу?

Автор: Troitsky
Дата сообщения: 19.11.2006 11:01
omikron
пятью постами выше я тебе пример уже писал. задаешь вопросы, а на ответы даже не смотришь.
Автор: omikron
Дата сообщения: 19.11.2006 12:52
ССОРИ, я в торопях глянул и не увидел.

Но после Set newBook = Workbooks.Add
фокус переходит на новую книгу и если копирует, то уже чистый лист в ней.
при этом сразу дает ошибку run-time error 9. Subscript out of range.

Наверное надо вернуться в свою книгу?
Автор: Troitsky
Дата сообщения: 19.11.2006 13:16
omikron

Цитата:
Но после Set newBook = Workbooks.Add
фокус переходит на новую книгу и если копирует, то уже чистый лист в ней.

Тогда вместо ActiveWorkbook укажи конкретную книгу, из которой хочешь произвести копирование.
Если нужно использовать книгу, которая была активной до
Код: Workbooks.Add
Автор: SERGE_BLIZNUK
Дата сообщения: 19.11.2006 23:38
kramrus
Цитата:
В EXEL пишем формулу =ИНДЕКС('G:\Люда\[Октябрь 2006.xls]ОШ №11'!РАБОТАЕТ.
Пишу макрос
Range("AT19").Formula = "ИНДЕКС('G:\Люда\[Октябрь 2006.xls]ОШ №11'!
НЕ РАБОТАЕТ.
Почему????

Проверил. Сначал сам офигел. А потом разобрался... А ведь правильный ответ вам уже давали: надо заменить русские функции на буржуйские (хоть и русский Excel, и отображаются они по русски, но внутри хранятся на оригинальном языке - а VBA - это считай, что внутри...)
т.е. в макросе вместо ИНДЕКС напиши INDEX
а вместо ПОИСКПОЗ напиши MATCH
всё...

p.s. если интересно, или надо получить формулу в буржуйском - то можешь сделать так - введи формулу руками (в примере в ячейку AT20). а потом напиши макрос вида:
Range("AT25").Value = "'" & Range("AT20").Formula
в ячейке AT25 будет формула (при копировании в макрос первый апостроф выкидывай...)


Удачи.
Автор: Troitsky
Дата сообщения: 20.11.2006 07:49
TONADOOM

Цитата:
в ячейке хранится адрес страницы в интернете (например http://forum.ru-board.com/topic.cgi?forum=33&topic=3961&start=960) надо эту страницу из кода сохранить на диск , например в D:\HTM с именем tekst.htm

Сохранение файла из Интернета на жесткий диск
Автор: omikron
Дата сообщения: 20.11.2006 08:08
спасибо!
все работает,
еще маленький вопрос, в новой книге можно задавать имя листу?
Вместо newBook.Sheets(1) написать newBook.Sheets("title") я так понимаю результата не дает.
Автор: Troitsky
Дата сообщения: 20.11.2006 08:29
omikron

Цитата:
в новой книге можно задавать имя листу?

Переименование листа:
Код: Sheets("Старое имя").Name = "Новое имя"
Автор: The okk
Дата сообщения: 20.11.2006 08:52
А почему Sheets не Worksheets? в чем разница?
Автор: Troitsky
Дата сообщения: 20.11.2006 09:02
The okk

Цитата:
А почему Sheets не Worksheets? в чем разница?

В случае "Sheets" можно иметь ввиду как рабочий лист, так и диаграмму, помещенную на отдельном листе. В случае же "Worksheets", подразумевается только рабочий лист книги (то же самое для диаграмм отдельным листом - "Charts").
Автор: OOD
Дата сообщения: 20.11.2006 09:15
подскажите можно ли с помощью VBA вставить картинку на определенные координаты листа?
Автор: Troitsky
Дата сообщения: 20.11.2006 10:13
OOD

Цитата:
подскажите можно ли с помощью VBA вставить картинку на определенные координаты листа?

Вот так картинка вставляется по координатам верхнего левого угла выделения:
Код: ActiveSheet.Pictures.Insert "D:\73.gif"
Автор: The okk
Дата сообщения: 20.11.2006 11:50
Как получить номер верхней строки диапазона?
Сорри, нашел уже. Target.Row
Автор: OOD
Дата сообщения: 20.11.2006 12:57
Troitsky

Цитата:
OOD

Цитата:
подскажите можно ли с помощью VBA вставить картинку на определенные координаты листа?

Вот так картинка вставляется по координатам верхнего левого угла выделения:
Код:
ActiveSheet.Pictures.Insert "D:\73.gif"

А так, для того чтобы сохранить пропорции, нужно знать высоту и ширину картинки, т.к. все аргументы функции являются обязательными:
Код:
ActiveSheet.Shapes.AddPicture "D:\73.gif", True, True, 20, 30, 80, 90

Способа вставить картинку по координатам, не зная предварительно ширину и высоту картинки, я не знаю. Хотя, в первом случае никто не мешает картинку после вставки передвинуть в нужное место используя
Код:
.ShapeRange.IncrementLeft
.ShapeRange.IncrementTop
или
Код:
.Left
.Top


Большое, спасибо вы очень помогли , очень очень, но не могли бы вы ещё помочь можно ли сделать так, чтобы имя "D:\73.gif" т.е. 73.gif бралось из TextBox ?
т.е. чтобы пользователь ввел в TextBox нужную ему картинку, а она уже вставилась после выполнения макроса...

вот сделал вот так:


Код:
ActiveSheet.Pictures.Insert TextBox1.Value
ActiveSheet.Shapes.AddPicture TextBox1.Value, True, True, 97, 7, 85, 114
Автор: alin
Дата сообщения: 20.11.2006 13:07
Помогите, пожалуйста, советом.
Этот код ставит Excel в тупик (зависает напрочь):

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("BB23") > 0 Then
Range("BC23").Formula = "=BA3"
Else: Range("BC23").Clear
End If
End Sub

Или этот:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("BB23") > 0 Then
Range("BC23").Value = Range("BA3").Value
Else: Range("BC23").Clear
End If
End Sub
PS: На листе много (~30) автоматически обновляемых (~ каждую сек.) ссылок.
Значения в ячейках используемых в процедуре статичные.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Стоит ли переходить с Билдера на Делфи?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.