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

» Excel VBA (часть 3)

Автор: loveheart
Дата сообщения: 05.06.2010 18:51
Hugo121
спасибо за то что откликнулись...но экскюзми...а чуть попроще?? мне бы на пальцах..
пусть таблица будет 2на2...можно ли форму сделать чтобы по кнопке она открывалась и где бы была видня вся необходимая таблица и можно было бы её эдитить. (
Автор: Hugo121
Дата сообщения: 05.06.2010 19:09
Я думаю, Вам надо сделать что-то вроде формы ввода данных Ацесса. Попроще не получится
Да и вообще, может это задание по Access? По описанию как раз подходит, если бы не "рабочий лист"
Автор: loveheart
Дата сообщения: 05.06.2010 21:51
Hugo121
и всё же требуется всё навоять в экселе
Автор: chel78
Дата сообщения: 06.06.2010 10:06
Привет, есть такой вопрос (сорри если не в тему).
Есть excel файл с SQL запросом использующий MS Query для получения данных из Oracle.
В SQLке некоторые параметры указаны переменной, например '&DATE'
Можно ли как то замутить, что бы при апдейте запроса, выскакивало какое нить окошко, с просьбой указать дату начала и конца периода, чебы не лазить каждый раз в запрос и не править его ручками.
SQL выглядит следующим образом.



Код:
SELECT
SYSDTL.ITMCOD,
SYSDTL.CTLGRP,
ITMMST.ITMDSC,
SUM (SYSTRN.TRNQTY) QTY
FROM
SYSTRN
Inner Join SYSDTL ON SYSTRN.TRNSEQ = SYSDTL.TRNSEQ
Inner Join ITMMST ON SYSDTL.ITMCOD = ITMMST.ITMCOD
WHERE
SYSTRN.TRNTYP = 'DAMAGE' AND
SYSTRN.SYSDAT >= ('&DATE') AND
SYSTRN.SYSDAT <= ('&DATE') AND
SYSDTL.ITMCOD IS NOT NULL
GROUP BY
SYSDTL.ITMCOD,
SYSDTL.CTLGRP,
ITMMST.ITMDSC
ORDER BY
SYSDTL.ITMCOD,
SYSDTL.CTLGRP
Автор: jclawe
Дата сообщения: 06.06.2010 10:19
chel78

Цитата:
Есть excel файл с SQL запросом использующий MS Query

Рекомендую посмотреть справку по Microsoft Query, топик "Создание запроса с параметрами". Там все подробно описано.
Автор: JekG
Дата сообщения: 06.06.2010 21:21
Всем привет
Есть вопросик. Пытаюсь наваять макрос, который бы отправлял по почте текущую открытую книгу Excel. Поскольку в Outlook Express вовсе не вышло пришлось поставить Outlook 2003. Макрос работает правильно, но... Создает письмо вводит в него адресата и тему. аттачит книгу, но ... не отправляет. Файл лежит в отправленных и ждет нажатия кнопки. Неужели никак нельзя до конца автоматизировать процесс?


Код: Sub Mail_workbook_Outlook_1()

Dim OutApp As Object
Dim OutMail As Object

Application.DisplayAlerts = False

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
'Application.Dialogs(xlDialogSendMail).Show

On Error Resume Next
With OutMail
.To = "pupkin@mail.ua"
.CC = ""
.BCC = ""
.Subject = "блаблабла"
.Body = "Превед"
.Attachments.Add ActiveWorkbook.FullName
'You can add other files also like this
'.Attachments.Add ("C:\test.txt")
'.Display 'Send 'or use .Display
End With

OutMail.Save ' письмо сохраняется в черновиках
OutMail.Display ' Показать созданное письмо
OutMail.Send ' Отправить письмо (Outlook ничего не отправляет)
OutApp.Quit ' закрыть Аутлук


On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing

Application.DisplayAlerts = True

End Sub
Автор: Baton34V
Дата сообщения: 06.06.2010 21:37
можно, попробовать через 5 секунд отправить нажатие кнопок "влево" и "Enter" через sendkeys.
Автор: JekG
Дата сообщения: 06.06.2010 23:33
Baton34V

Пробовал даже через 'SendKeys "%фь" 'Crtl+Enter здесь не прошел.
Автор: chel78
Дата сообщения: 07.06.2010 07:39

Цитата:
Рекомендую посмотреть справку по Microsoft Query,


Именно то, что надо, БИГ СЕНК
Автор: Baton34V
Дата сообщения: 07.06.2010 12:20
JekG
да, такое не сработает, т.к. прога не пойдёт дальше пока не выполнится .send
Можно написать маленькую прогу (например на AutoIt). Запускать её непосредственно перед отправкой письма через shell, в проге выставить задержку на 5+(время на формирование письма в outlook) секунд, после чего посылать нажатие клавиш в окно outlook.
[more=скрипт AutoIt]
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=w_sendkey_outlook.exe
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
$ProgName="w_SendKey_Outlook"
sleep(5000+3000)
if WinExists("[Title:Microsoft Office Outlook; Class:#32770]") then
        send("{left}")
        send("{space}")
EndIf
[/more]
Автор: Maximus777
Дата сообщения: 10.06.2010 08:59
Кто-нибудь знает, как узнать из макроса, влазит текст в ячейку или нет? И пуркуа высота строки не меняется при автоподборе? Текст длиннее ячейки, факт, правда имеет место быть объединение ячеек, может из-за этого?
Автор: noblekey
Дата сообщения: 10.06.2010 14:28
Люди добрые помогите
Есть колонка с результатами соревнований в Excel как автоматически в соседней колонке проставить место которое занял участник в соответствии с результатами
Автор: Drazhar
Дата сообщения: 10.06.2010 15:15
noblekey
место уникальное? или при равенстве значений место одно и то же?
Автор: noblekey
Дата сообщения: 10.06.2010 15:46
Drazhar
Место уникальное но при одинаковом количестве очков должны проставлятся одинаковые места
Автор: vlth
Дата сообщения: 10.06.2010 19:04
noblekey, используйте функцию РАНГ(число;ссылка ;порядок).

Добавлено:
Maximus777
В Excel есть какое-то ограничение [на длину строки в ячейке ?] (причём в этом контексте в 2007-м длина строки может быть больше, чем в 2003-м), при превышении которого часть текста не видна при автоподборе высоты строки, содержащей ячейку с этим текстом.
Пример
Автор: Maximus777
Дата сообщения: 10.06.2010 19:57
vlth
Я немного о другом. В ячейке не много текста, но то, что выходит за границу ячейки, не видно. Хотя справа ячейки пустые. Правда нюанс в том, что эта ячейка с текстом не простая, она объединённая из нескольких ячеек. Мне надо чтобы при попадании в неё текста, она увеличивала высоту на две строки. ...Rows(5).Autofit нифига не пашет. И вручную кстати тоже, через меню (автоподбор высоты). Количество буков считать вроде как тоже не очень правильно. Хз как победить.
Автор: vlth
Дата сообщения: 10.06.2010 23:02
Maximus777
Excel VBA (часть 3). Не поможет?
Автор: sysxxx
Дата сообщения: 11.06.2010 10:32
В vba программирую второй день. Помогите решить задачу. Необходимо создать форму и добавлять из нее новые записи в таблицу. Причем надо как-то эту форму запускать.


Форму сделал. Что дальше?
http://imagepost.ru/?v=149/XxjC7P6.jpg
Автор: noblekey
Дата сообщения: 11.06.2010 12:05
vlth

Цитата:
используйте функцию РАНГ(число;ссылка ;порядок)

немного неудовлетворят потому что результаты могут быть одинаковыми, тогда ранги проставляются неправильно
Автор: Solenaja
Дата сообщения: 11.06.2010 12:09
Понадобился макрос для генерирования штрих-кодов EAN13. Может здесь пробегал или есть готовый ?
Автор: vlth
Дата сообщения: 11.06.2010 16:56
Solenaja
Сам недавно где-то скачал. Ссылка

Добавлено:
noblekey
Посмотрите шапку: там есть тема "Ранжирование без пробелов"
Автор: maratino
Дата сообщения: 12.06.2010 20:35
Уважаемые знатоки! Добрый день!
Может кто поможет внести изменения в этом макросе
Макрос вставляет картинку в примечание. Проблема в том, что отображает по тем параметрам, которые указаны в коде. А надо, что бы картинки отображал как она есть (реальный размер)
Не знаю насколько грамотно я сформулировал вопрос
.ScaleWidth 3, msoFalse, msoScaleFromTopLeft
.ScaleHeight 3, msoFalse, msoScaleFromTopLeft


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Columns(12).ClearComments
On Error Resume Next
Cells(Target.Row, 12).AddComment.Text Text:=""
Cells(Target.Row, 12).Comment.Shape.Select True
With Cells(Target.Row, 12).Comment.Shape
.Fill.UserPicture Cells(Target.Row, 15).Value ' stolbec, gde ykazivaetsya put k kartinke

.Visible = True
.Fill.Transparency = 0#

.ScaleWidth 3, msoFalse, msoScaleFromTopLeft
.ScaleHeight 3, msoFalse, msoScaleFromTopLeft

End With
End Sub

Макрос очень полезный и нужный
Автор: Solenaja
Дата сообщения: 14.06.2010 10:59
vlth
надо было сразу запостить формулу вычисления кода EAN 13, тк вопрос был снят как только была найдена формула - склероз
=A1*10+ОСТАТ(10-ОСТАТ(3*(ПСТР(A1;2;1)+ПСТР(A1;4;1)+ПСТР(A1;6;1)+ПСТР(A1;8;1)+ПСТР(A1;10;1)+ПСТР(A1;12;1))+ПСТР(A1;1;1)+ПСТР(A1;3;1)+ПСТР(A1;5;1)+ПСТР(A1;7;1)+ПСТР(A1;9;1)+ПСТР(A1;11;1);10);10)
Автор: vlth
Дата сообщения: 14.06.2010 16:36
maratino

Как вариант
Код: Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim objPic As Shape, name_of_File As String, fso As Object

Columns(12).ClearComments
Set fso = CreateObject("Scripting.FileSystemObject")
With Cells(Target.Row, 12)
name_of_File = .Offset(, 3)
If Not fso.FileExists(name_of_File) Then Exit Sub
Set fso = Nothing
.AddComment ""
With .Comment.Shape
Set objPic = Me.Shapes.AddPicture(name_of_File, True, True, 10000, 10000, 1, 1)
.Width = Application.CentimetersToPoints(objPic.Width) / objPic.Width
.Height = Application.CentimetersToPoints(objPic.Height) / objPic.Height
objPic.Delete: Set objPic = Nothing
.Fill.UserPicture name_of_File
.Visible = True
'Исходный размер всех картинок будет таким образом одинаков

'Для увеличения изображения нужно изменить коэф. ниже (подберите его сами)
.ScaleWidth 3, msoFalse 'коэф. увел. по ширине =3
.ScaleHeight 3, msoFalse 'коэф. увел. по высоте =3
End With
End With
End Sub
Автор: vlth
Дата сообщения: 15.06.2010 01:40
maratino
Вот так, пожалуй, лучше будет.
Предварительно на лист добавляем элемент управления 'Рисунок' и задаём его св-во Visible = False


Код: Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim objPic As Object, name_of_File As String, fso As Object

Columns(12).ClearComments
Set fso = CreateObject("Scripting.FileSystemObject")
With Cells(Target.Row, 12)
name_of_File = .Offset(, 3)
If Not fso.FileExists(name_of_File) Then Exit Sub
Set fso = Nothing
.AddComment ""
Me.OLEObjects("Image1").Object.Picture = LoadPicture(name_of_File)
Set objPic = Me.OLEObjects("Image1").Object.Picture
With .Comment.Shape
'Для увеличения изображения изменяем размер примечания (подберите его сами)
.Width = 100: .Height = 100

.Fill.UserPicture name_of_File
.Visible = True
.ScaleHeight objPic.Height / objPic.Width, msoFalse
End With
End With
End Sub
Автор: humanunique
Дата сообщения: 15.06.2010 18:23
Помогите, пожалуйста!

Необходимо окрашивать строки в цвета (более 10 цветов) в зависимости от текста/значения в ячейке в этих строках.

Условным форматированием не обойтись. Опишу подробнее:

если в столбце С3 в строке 1 возникает надпись "солнце", то строка окрашивается в желтый;
если в столбце С3 в строке 1 возникает надпись "небо", то строка окрашивается в синий;
и т.д.

если в столбце С3 в строке 2 возникает надпись "солнце", то строка окрашивается в желтый;
если в столбце С3 в строке 2 возникает надпись "небо", то строка окрашивается в синий;
и т.д.

Таких цветов более 10. Строк очень много - база данных.
Автор: maratino
Дата сообщения: 15.06.2010 19:07
vlth
Спасибо! но что то не то.
Автор: antonsf
Дата сообщения: 15.06.2010 19:54
Вопрос:
как в Excel программно получить отфильтрованный список?
как в Excel программно получить результат работы автофильтра?


Решение №1:
Worksheet.AutoFilter.Range.Rows.SpecialCells(xlCellType) As Range
Вроде бы очевидное решение.

Камень №1:
В данном случае мы получим только первую порцию строк диапазона, которые идут подряд и соответствуют фильтру.
Из этого делаем вывод, что где-то есть и остальные порции:
Worksheet.AutoFilter.Range.Rows.SpecialCells(xlCellType).Areas.Item(Index) As Range

Камень №2:
Вытекает из вывода предыдущего.
Rows.SpecialCells(xlCellType).Areas содержит не массив строк, а массив видимых диапазонов.
Это значит, что если в фильтруемом диапазоне есть скрытые столбцы, то
строка, соответствующая фильтру, будет разбита на несколько диапазонов:

Если в строке (допустим №1):
Столбец - A B C D E F G H
Скрыт - нет нет да нет нет да нет нет
То:
Areas.Count=3
Areas.Item(1).Address="A1:B1"
Areas.Item(2).Address="D1:EC"
Areas.Item(3).Address="G1:H1"

Прежде чем перебирать Areas построчно, надо отобразить скрытые столбцы:

Sub Example
Dim Data as Range
Dim Hidden As Collection

Set Data = ActiveSheet.Range("A1:H10")
Set Hidden = GetHiddenColumns(DataRange)
ShowColumns(Hidden)
End Sub

Sub ShowColumns(Columns As Collection)
If Columns.Count > 0 Then
Dim Index As Integer
For Index = 1 To Columns.Count
Columns(Index).EntireColumn.Hidden = False
Next
End If
End Sub

Function GetHiddenColumns(Range As Range) As Collection
Dim Index As Integer
Set GetHiddenColumns = New Collection
For Index = 1 To Range.Columns.Count
If Range.Columns(Index).EntireColumn.Hidden = True Then
GetHiddenColumns.Add Range.Columns(Index)
End If
Next Index
End Function

Вот теперь Areas будет содержать строки диапазона целиком, можно приступать к перебору.
Не забудьте, что свойство Worksheet.Autofilter будет содержать данные только если активная ячейка находится в пределах фильтруемого диапазона.
И ещё - на защищенном листе далеко не все свойства диапазона можно получить.


Добавлено:

Цитата:

Цитата: Помогите, пожалуйста!
 
Необходимо окрашивать строки в цвета (более 10 цветов) в зависимости от текста/значения в ячейке в этих строках.
 
Условным форматированием не обойтись. Опишу подробнее:
 
если в столбце С3 в строке 1 возникает надпись "солнце", то строка окрашивается в желтый;  
если в столбце С3 в строке 1 возникает надпись "небо", то строка окрашивается в синий;  
и т.д.  
 
если в столбце С3 в строке 2 возникает надпись "солнце", то строка окрашивается в желтый;  
если в столбце С3 в строке 2 возникает надпись "небо", то строка окрашивается в синий;
и т.д.
 
Таких цветов более 10. Строк очень много - база данных.

Автор: humanunique
Дата сообщения: 15.06.2010 22:10
antonsf
Можешь пояснить, если не затруднит, как его встроить в свой проект. А то не пашет что-то...
Автор: kakoc
Дата сообщения: 16.06.2010 01:58
Нужна помощь с вычислением матрицы по методу Гаусса.
Есть матрица 200 на 8, нужно её каким то образом решить

интересует каким образом это можно сделать.
раньше никогда с матрицами в экселе не сталкивался, а тут еще такая большая.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

Предыдущая тема: VS 2010


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