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

» Excel VBA (часть 2)

Автор: gett
Дата сообщения: 08.01.2008 14:48
простите за простой вопрос, я не очень работаю с excel.
Когда оплачиваю карточкой, если сумма свише 1500 банк делит ее на три части, если свише 6000 делит ее на шест части. Как сделат чтобы при вводе сумми, ети деления происходили по автоматизму?
На пример, счет 10.000, оплатил 5.1.2008 3.000, счет должен бит 5.1 9.000, 5.2. 8.000, 5.3. 7.000.
Не надо ничего стильного, только простая таблица учета состояния счета. Пошагово, если можно.
Автор: kalinakrasnay
Дата сообщения: 08.01.2008 15:17
Привет! такая история: делаю интеграцию Excel+какое-нибудь графическое приложение. но вот в списке доступных библиотек объектов(Tools->Referense) есть только объекты Photoshop, хотя на компе установлены еще и ACDSee,ну и строенный Paint. интересно можно ли где-то скачать, взять требующиеся библиотеки.??
спасибо
Автор: Smog
Дата сообщения: 08.01.2008 20:14
gett
в а2 забить сумму, в В2 формулу, например такую
=ЕСЛИ(И(A2<6000;A2>=1500);"3x"&(A2/3);ЕСЛИ(A2>=6000;"6x"&(A2/6);"1x"&A2))
Автор: kalinakrasnay
Дата сообщения: 08.01.2008 20:15
снова привет! пытаюсь из экселя программно создать файл презентации, делаю так:

Цитата:
Private Sub CommandButton1_Click()
Dim pr As PowerPoint.Application
Dim mpr As PowerPoint.Presentation
Set pr = CreateObject("PowerPoint.Application")
pr.Presentations.Add msoTrue
Set mpr = pr.ActivePresentation
mpr.SaveAs (ThisWorkbook.Path + "\" + ima.Text)
End Sub

(имя создаваемой презентации пользователь вводит в текстовое поле ima на форме)
но это работает только если я перед этим вручную запущу Power Point. хотелось бы без этого обойтись, если н е запускаю вручную Power Point, то выдает ошибку что "pr не является активной презентацией", и чтоб пользователь не видел процесса создания. как ошибку исправить не пойму...???
Автор: Smog
Дата сообщения: 08.01.2008 20:24
kalinakrasnay

Цитата:

Sub Макрос1()
Dim pr As PowerPoint.Application
Dim mpr As PowerPoint.Presentation
Set pr = CreateObject("PowerPoint.Application")
Set mpr = pr.Presentations.Add
mpr.SaveAs (ThisWorkbook.Path + "\" + ima.Text)
End Sub


Добавлено:
Private Sub CommandButton1_Click()
Dim pr As PowerPoint.Application
Dim mpr As PowerPoint.Presentation
Set pr = CreateObject("PowerPoint.Application")
Set mpr = pr.Presentations.Add
mpr.SaveAs (ThisWorkbook.Path + "\" + ima.Text)
End Sub

то есть
Автор: kalinakrasnay
Дата сообщения: 08.01.2008 20:32
Smog
спасибочки большое!!!! теперь работает без проблем!

Добавлено:
извиняюсь за наглость, но как в этой же задаче
Цитата:
Private Sub CommandButton1_Click()
Dim pr As PowerPoint.Application
Dim mpr As PowerPoint.Presentation
Set pr = CreateObject("PowerPoint.Application")
Set mpr = pr.Presentations.Add
mpr.SaveAs (ThisWorkbook.Path + "\" + ima.Text)
End Sub

я его дополнила (теперь добавляется нужное мне кол-во слайдов и картинка на каждый из них), на слайде имеется одна область для картинки и 2 области для текста (заголовок и собственно текст)

Цитата:
n = 0
For i = 1 To dob_kart.ListCount
mpr.Slides.Add i, ppLayoutTextAndClipart
mpr.Slides(i).Shapes.AddPicture Filename:="" + kyda + dob_kart.List(n) + "", LinkToFile:=msoTrue, SaveWithDocument:=msoTrue, Left:=100, Top:=100, Width:=w, Height:=h
n = n + 1
Next

как добавить картинку разобралась, а вот добавить в нужные текстовые области любой текст (с источником текста я уж потом разберусь) не поняла
Автор: Smog
Дата сообщения: 08.01.2008 21:53

Код: Sub Макрос1()

Dim pr As PowerPoint.Application
Dim mpr As PowerPoint.Presentation
Set pr = CreateObject("PowerPoint.Application")
Set mpr = pr.Presentations.Add
Dim tShape As PowerPoint.Shape
n = 0
For i = 1 To 2
mpr.Slides.Add i, ppLayoutTextAndClipart
Set tShape = mpr.Slides(i).Shapes(2)
tShape.TextFrame.TextRange.Text = "Требуемый текст" & Chr(13) & _
"Для вставки" & Chr(13) & "В презентацию"
n = n + 1
Next
mpr.SaveAs ("c:\1.ppt")
End Sub
Автор: kalinakrasnay
Дата сообщения: 09.01.2008 09:23
Smog
СПАСИБО, отлично работает!!!!))
смотрю у меня прямо беда с присваиванием объектных переменных(
Автор: SERGE_BLIZNUK
Дата сообщения: 09.01.2008 11:51
Smog
а как вы в вашем посте текст с форматированием кода получили? Это какой-то эксперт умеет? научите нас всех, пожалуйста...
Автор: Smog
Дата сообщения: 09.01.2008 14:07
SERGE_BLIZNUK
это умеет клиент ссылка в моей подписи
Автор: visual73
Дата сообщения: 09.01.2008 17:48
Кто-нибудь может помочь по такому вопросу:

Мне нужны цвета палитры в формате RGB текущей цветовой темы.
Я могу получить 10 основных цветов палитры для раскраски своих кнопок:

Код: UserForm1.btnКнопка.BackColor = _
ActiveWorkbook.Theme.ThemeColorScheme(xlThemeColor).RGB
Автор: kalinakrasnay
Дата сообщения: 09.01.2008 19:02
последний разок сегодня прошу о помощи...последнее что осталось реализовать (все происходит в экселе) это отправка презентации создающейся в процессе работы программы по почте, с помощью Outlook (пользователь адрес мыла вводит вручную, ну я так придумала себе, чтоб проще было). библиотеку подключила...но в аутлуке нельзя записывать макросы, что для меня просто погибель!!!!! так что я не знаю даже с чего начать. сделала только пару объявлений , ну соотвественно и объекты можно создать...дальше не пойму
Dim pochta As Outlook.Application
Dim vlojenie As Outlook.Attachment
Dim adres As Outlook.Recipient

Добавлено:
хотя вот нашла что-то приличное и похожий пример на мою задачу во встроенном хелпе....щас поразбираемся

Добавлено:
какой хороший пример был в хелпе, все поняла как сделать, даже работает все!
Автор: Smog
Дата сообщения: 09.01.2008 20:14
visual73

Цитата:
P.S. Как присвоить свойству .BackColor значение в формате Hex?

для этого надо hex перевести в long

Цитата:
Есть примеры реализации для Word, но до ума никак не могу довести.


показывайте

Цитата:
свойства .TintAndShade

свойство чего?
kalinakrasnay

Цитата:
какой хороший пример был в хелпе, все поняла как сделать, даже работает все!



Добавлено:
visual73

Код: UserForm1.CommandButton1.BackColor = ActiveWorkbook.Colors(5)
Автор: visual73
Дата сообщения: 10.01.2008 08:14
Smog
1.
Цитата:
для этого надо hex перевести в long

Встречный вопрос:
При конвертации HEX формата получаю минусовое число, которое не могу присвоить .BackColor ...?
2.
Цитата:
свойства .TintAndShade
свойство чего?

Объекта Excel. Начать можно с Ячейки. Все что можно закрасить в цвет. Напр.,

Код: With Selection.Interior
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0.0
End With
Автор: visual73
Дата сообщения: 10.01.2008 10:40
Smog
visual73
по первому пункту:
При конвертации HEX формата получаю минусовое число, которое не могу присвоить .BackColor ...?
Напр
a=CLng("&HD500FFFF") '=-721354753
Range("A").Interior.Color=a
Но уже так не работает:
UserForm1.btnКнопка.BackColor =a
Почему?
Автор: vasiliy74
Дата сообщения: 10.01.2008 13:19
Есть задачка по скорости выполнения кода понял что через сводную таблицу решается во много раз быстрее, записал макрос залез отредактировал, остался вопрос как перебирать столбцы сводной таблицы для преобразования???
Суть задачи преобразовать сводную таблицу

например вот сводная таблица:
результат жжж ккк ввв ггг
Автор: Smog
Дата сообщения: 10.01.2008 14:06
visual73
проблему понял, попробую
vasiliy74
а в чем проблема?

Код: Sub qw()
n = 7
Cells(n, 1) = "дата"
Cells(n, 2) = "ко-во "
Cells(n, 3) = "наименование"
n = n + 1

For stroka = 2 To 5

For stolbec = 2 To 5
If Cells(stroka, stolbec) <> 0 Then
Cells(n, 1) = Cells(stroka, 1)
Cells(n, 2) = Cells(stroka, stolbec)
Cells(n, 3) = Cells(1, stolbec)
Cells(n, 1).NumberFormat = "m/d/yyyy"
n = n + 1
End If

Next stolbec


Next stroka

End Sub
Автор: visual73
Дата сообщения: 10.01.2008 15:49
Smog
Большое спасибо! Особенно за конвертер Hex.

К сожалению проблема с цветом осталась та же. Мы имеем ярко зеленую кнопку! Хотя Word-овский макрос раскрашивает текст в цвет палитры Текущей Темы. А Ярко Зеленого цвета вообще в палитре нету. Почему так происходит с Excel я не понимаю.

Это была попытка прямого решения проблемы получения цвета Текущей Темы. Я думаю что решение данной проблемы все же существует, но дальнейшее изучение данного вопроса приостанавливаю т.к. нашел см.ниже. Если встретите решение данного вопроса прямым способом - очень интересно взглянуть!

Второй способ который я рассматривал, так называемый косвенный, с привлечением раскраски ячеек через Cells(r, c).Interior.Color натыкался на проблему неоднозначности свойства .TintAndShade, которое я раньше думал принимает в палитре только стандартные значения - 0.8, 0.6, 0.4, -0.25 и -0.5. Однако узнав что могут быть любые значения, застрял на том как раскрасить ячейки в, напр. 3-ий по горизонтали и 5-ый по вертикали цвет палитры?
Помощь пришла от Уокенбаха, в его утилите PUP v.7/Alternate Row Shading реализовано то что я хотел, вторым способом. Разместив раскрашенные в текущую палитру ячейки в надстройке этой утилиты и передавая ей Текущую Цветовую Тему из файла пользователя

Код: ThisWorkbook.Theme.ThemeColorScheme.Colors(i) = ActiveWorkbook.Theme.ThemeColorScheme.Colors(i)
Автор: Smog
Дата сообщения: 10.01.2008 16:44
visual73

Цитата:
Если встретите решение данного вопроса прямым способом - очень интересно взглянуть!


http://proofficedev.com/blog/2007/10/10/colours-in-word-2007-part-2/
здесь же по-моему все есть?

Только в кучу собрать.

Цитата:
Второй способ который я рассматривал, так называемый косвенный, с привлечением раскраски ячеек через Cells(r, c).Interior.Color

Тоже думал о таком.
Кстати, свойство TintAndShade нагляднее задавать в виде , н-р "128 / 255 "


Цитата:
Еще раз благодарю за желание помочь!

Да особо не за что
На русском языке по теме ничего, еще 2007 не осваивает никто?
Автор: kerimchik
Дата сообщения: 10.01.2008 17:02
SAS888

Цитата:
Стандартная функция Excel "СчетЕсли".
Следующий макрос, например, подсчитает количество x в столбце A.

Sub CIF()
x = "q" 'x может быть любого типа
MsgBox Application.CountIf(Range("A:A"), x)
End Sub


Нет. у меня например в столбике 15 раз повторяется слова "Привет", 20 раз "пока" и 25 раз "как дела"
Я хочу чтоб в колонке B отображалось сколько слов ПРивет, сколько Пока и сколько как дела... А чтоб не подсчитывать их в ручную... Можно такое?
То что Вы написали, он считает определенные слова или цифры... Но я хочу чтоб все показывал...
Автор: Smog
Дата сообщения: 10.01.2008 17:34
kerimchik
=СЧЁТЕСЛИ(A:A;"=Привет")
=СЧЁТЕСЛИ(A:A;"=пока")
=СЧЁТЕСЛИ(A:A;"=как дела")

Если надо для заранее неизвестных символов то нужно в цикле перебирать ячейки, создавать массив 2-мерный, из 2-х колонок Значение, количество и заполнять его во время прохода по всем ячейкам.
А вообще - сводная таблица?
Автор: Tanya3000
Дата сообщения: 10.01.2008 17:46
Ребят есть два задания из теста...... объясните пожалуйста:
1.Bычисляемое в программе значение переменной S равно ...
Dim A(1 To 3, 1 To 3) As Integer
For I = 1 To 3
For J = 1 To 3
A(I, J) = Abs(2*I - J)
Next J
Next I
S = 0
For I = 1 To 3
X = A(I, I)
For J = I To 3
If A(I,J) = X Then S = S + A(I, J)
Next J
Next I

2.Bычисляемое в программе значение переменной E равно ...
A = "dfeadefa": N = Len(A)
B = ""
For I = 1 To N - 1
C = Mid(A, I + 1)
E = Len(C) Mod 3
If E = 1 Then B = B + C
Next I
E = Len(B)

Автор: Smog
Дата сообщения: 10.01.2008 19:01
Tanya3000

Цитата:
Dim A(1 To 3, 1 To 3) As Integer

объявляем 2-мерный массив 3*3

Цитата:
For I = 1 To 3
For J = 1 To 3
A(I, J) = Abs(2*I - J)
Next J
Next I

В этом цикле заполняем его значения

i\j 1 2 3
Автор: Tanya3000
Дата сообщения: 10.01.2008 20:16
Ясно, спасибо! А второе не знаешь как?
Автор: Smog
Дата сообщения: 10.01.2008 20:40
Tanya3000
Знаю, чего и Вам советую. Посмотреть в справке несколько элементарных функций и вучную расписать алгоритм из 7 проходов - это не сложно. Если не можете - тогда это Вам и не нужно.
Автор: Tanya3000
Дата сообщения: 10.01.2008 20:58
Если я прошу о помощи, значит мне это нужно...если я написала здесь, значит у меня не получилось.....и если это действительно несложно, думаю вам бы не составило труда черкануть пару строк.....
Автор: SERGE_BLIZNUK
Дата сообщения: 10.01.2008 21:39
Smog преклоняюсь перед Вашим трудолюбием. :up::up: у меня бы терпения не хватило так разжевать!!! ;-))

Tanya3000
Smog
слушайте, а может быть не надо так всё усложнять? Мне кажется, что эти тесты типа лабораторных заданий - их надо просто вставить в Excel и выполнить - результат отобразить... и не надо в уме циклы прокручивать ;-)))

BTW,
Цитата:
Bычисляемое в программе значение переменной E равно ...
E=12
(перед циклом N=8 (длина строки A) после выполнения цикла B="feadefadefaa"
длина строки (это и есть E) = 12
Автор: Smog
Дата сообщения: 11.01.2008 05:55
SERGE_BLIZNUK

Так-то оно так, но было

Цитата:
объясните пожалуйста

, поэтому просто ответ не подойдет я подумал

Tanya3000

Цитата:
если я написала здесь, значит у меня не получилось

а по-моему, вы даже не пытались
Автор: Tanya3000
Дата сообщения: 11.01.2008 09:10
Я действительно хочу, чтобы мне объяснили....как из A = "dfeadefa" получили B="feadefadefaa" ?
у меня получилось d. dfea, dfeadef. Потом я поняла, что ошиблась, поскольку там надо со второй считать...но если со второй считать, то не получается..

Добавлено:
Всем спасибо....я сама всё поняла....... кстати
Цитата:
Smog
ты неправильно решил первую задачу , там получится 7....найдешь сам свой недочет или мне показать?
Автор: Smog
Дата сообщения: 11.01.2008 16:01
Tanya3000
ну да. на Abs не обратил внимания, поэтому а(1,3) = 1,
1 проход по I
x=1
j=1, A(I,J)=1 S = 0+1=1
j=2, A(I,J) не равно х
j=3, A(I,J)=1 S = 1+1=2

Значит вам надо было все таки решить, а не объяснить? Тогда так и говорите

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

Предыдущая тема: Написание своего HyperTerminal для считывания данных


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