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

» Excel VBA

Автор: archimed7592
Дата сообщения: 12.08.2005 00:59
Tushkanchyk,

Код: Attribute VB_Name = "Module1"
Function Suma_Litere(sc)
On Error GoTo Err_Suma_Litere
' Функция возвращает сумму прописью
' на русском языке
' для подключеничя макроса выберите пунк сервис/макрос/редактор Visual Basic
' File/Import
' 20.02.2001 Басистый В.И.
'

Dim adec As Variant
Dim rez As String, k As String, Kop As String, a1 As String, a As String
Dim pz As Integer, ad As Integer, ae As Integer
ReDim zeci(90) As String, sut(9) As String, o(5, 2) As String
ReDim M(4) As Double, z(4) As Double, S(4) As Double

zeci(1) = "один"
zeci(2) = "два"
zeci(3) = "три"
zeci(4) = "четыре"
zeci(5) = "пять"
zeci(6) = "шесть"
zeci(7) = "семь"
zeci(8) = "восемь"
zeci(9) = "девять"
zeci(10) = "десять"
zeci(11) = "одинадцать"
zeci(12) = "двенадцать"
zeci(13) = "тринадцать"
zeci(14) = "четырнадцать"
zeci(15) = "пятнадцать"
zeci(16) = "шестнадцать"
zeci(17) = "семнадцать"
zeci(18) = "восемнадцать"
zeci(19) = "девятнадцать"
zeci(20) = "двадцать"
zeci(30) = "тридцать"
zeci(40) = "сорок"
zeci(50) = "пятьдесят"
zeci(60) = "шестьдесят"
zeci(70) = "семьдесят"
zeci(80) = "восемьдесят"
zeci(90) = "девяносто"

sut(1) = "сто"
sut(2) = "двести"
sut(3) = "триста"
sut(4) = "четыреста"
sut(5) = "пятьсот"
sut(6) = "шестьсот"
sut(7) = "семьсот"
sut(8) = "восемьсот"
sut(9) = "девятьсот"

o(1, 1) = "миллиардов"
o(1, 2) = "миллиард"
o(2, 1) = "миллионов"
o(2, 2) = "миллион"
o(3, 1) = "тысячи"
o(3, 2) = "тысяча"
o(4, 1) = "лея"
o(4, 2) = "лей"

'sc = Forms!Form_oi!valoarea

adec = 100000000000000# + (sc * 100)
a1 = adec
a = Mid(a1, 2)

M(1) = Mid(a, 1, 3)
z(1) = Mid(a, 2, 2)
S(1) = Mid(a, 1, 1)
M(2) = Mid(a, 4, 3)
z(2) = Mid(a, 5, 2)
S(2) = Mid(a, 4, 1)
M(3) = Mid(a, 7, 3)
z(3) = Mid(a, 8, 2)
S(3) = Mid(a, 7, 1)
M(4) = Mid(a, 10, 3)
z(4) = Mid(a, 11, 2)
S(4) = Mid(a, 10, 1)
k = Mid(a, 13, 2)

rez = " "

For pz = 1 To 4
If M(pz) > 1 Then
zeci(1) = "один"
ElseIf pz = 3 Then
zeci(1) = "одна"
End If
If pz < 4 Then
zeci(2) = "два"
End If
If S(pz) > 0 Then
rez = rez & sut(S(pz)) & " "
End If
If z(pz) > 0 Then
If z(pz) < 20 Then
rez = rez & zeci(z(pz)) & " "
Else
ae = z(pz) Mod 10
ad = z(pz) - ae
rez = rez & zeci(ad) & " "
If ae > 0 Then
rez = rez & Trim(zeci(ae)) & " "
End If
End If
End If
If M(pz) > 0 Then
If M(pz) = 1 Then
rez = rez & Trim(o(pz, 2)) & " "
Else
rez = rez & Trim(o(pz, 1)) & " "
End If
End If
zeci(1) = "один"
zeci(2) = "два"
Next
If M(1) + M(2) + M(3) + M(4) = 0 Then
rez = rez & "ноль лей"
Else
If M(4) = 0 Then
rez = rez & "лей"
End If
End If
sc = Mid(rez, 2)
' If Val(k) <> 0 Then
sc = sc & " " & k & " " & "бань"
' End If
Suma_Litere = UCase(Left(sc, 1)) & Mid(sc, 2, Len(sc))


Exit_Suma_Litere:
Exit Function

Err_Suma_Litere:
'Result = ErrorHandler(Err)
Resume Exit_Suma_Litere
End Function


Sub SumLiter()
Attribute SumLiter.VB_Description = "Возвращает сумму прописью"
Attribute SumLiter.VB_ProcData.VB_Invoke_Func = "l\n14"
Suma_Litere (sc)
End Sub
Автор: archimed7592
Дата сообщения: 14.08.2005 18:38
всем привет!
ещё один вопрос: можно ли (если да то как) в excel'е сделать так, чтобы в заданной ячейке заданного столбца была эталонная формула, а все ячейки (или их n-ое кол-во), что находятся ниже заданной делали вычисления будто в них скопировали эталонную формулу?

заранее спасибо
Автор: Sleepwalker
Дата сообщения: 16.08.2005 19:10
archimed7592
если просто копируешь ячейку с формулой, то ссылки меняются согласно изменению положения ячейки. Чтобы этого не происходило, перед каждой ссылкой ставишь $, например =$A$3*$A$4.
Это?
Автор: archimed7592
Дата сообщения: 18.08.2005 05:09
к сожалению нет
эффект нужен имено без $, но нужно чтобы в нижних ячейках лежали не формулы - слишком большой размер книги
Автор: aquaman1977
Дата сообщения: 29.08.2005 16:48
Писал тут скрипт, и возник очередной вопрос:
Для начала кусок кода (чтобы проще было объяснять):


Код:
Set newb = Workbooks.Add
Range(Cells(1, 1), Cells(k + 1, Num_Col + 1)).Name = "MyR"
s=... ' Название листа
With newb
.Charts.Add
.ActiveChart.ChartType = xlLineMarkers
.ActiveChart.SetSourceData source:=.Worksheets(s).Range("MyR"), PlotBy:=xlColumns
End With
Автор: AlienRainbow
Дата сообщения: 02.09.2005 07:56
Добрый день!

Как можно сделать базу данных на листе (допустим лист называется "BD" и в его ячейках забиты заранее определенные данные: код(В столбец)/наименование(С столбец)/размер(D столбец)/цена(E столбец)).

В листе "ШАБЛОН" в таблицу я забиваю КОД (в столбец "В"), а в столбцы С/D/E должны находиться автоматически и попадать данные из листа "BD".

Кто поможет в написании VBA для автоматизации БД?

Заранее благодарен
Автор: Asylum
Дата сообщения: 05.09.2005 12:07
Уважаемые, помощь нужна.
Вопрос как правильно сделать адресацию в макросе, чтобы по нажатию кнопки, некая таблица копировалась вниз неизвестное количество раз. То есть сначала 2 раза, потом понадобилось еще парочку. И того на листе стало уже 4 таблицы в столбик.
Автор: DisAsm
Дата сообщения: 11.10.2005 08:35
Есть ли в VB команда, получение вычисленного значения в ячеке, где стоит формула?
Функция Value возращает пустую строку.

sss1 = Worksheets(List).Cells(rwIndex, 9).Formula
q = Worksheets(List).Cells(rwIndex, 9).Value

Может надо что то прописать выше, типа пересчтитать книгу?
Подскажите plz!
Не охото еще и формулы в VB переводить.

*************
Извеняюсь, все работает. Смотрел на пустой сттроке, соответственно и возращал пустую строку.
Автор: Olive77
Дата сообщения: 11.10.2005 11:31
All
Кто может подсказать какие есть методы обезопасить код в VBA для Excel?
Встроенные в Excel не предлагать.

Добавлено:
aquaman1977

Код: .ActiveChart.SetSourceData Source:=.Worksheets(s).Range(.Worksheets(s).Cells(1, 1), .Worksheets(s).Cells(k + 1, Num_Col + 1)), _
PlotBy:=xlColumns
Автор: FreemanRU
Дата сообщения: 18.10.2005 10:42
Такой вопросик - при объединении ячеек через Merge, в случае если обе ячейки содержат значения, появляется предупреждение - его можнон как-то заблокировать?
Автор: Olive77
Дата сообщения: 18.10.2005 11:09
попробуй Application.displayalerts=false

не забудь снова включить.
Автор: FreemanRU
Дата сообщения: 18.10.2005 12:24
Olive77
Спасибо, это то что нужно
Автор: NIC13
Дата сообщения: 18.10.2005 16:22
Добрый день!

Есть такой вопрос. Существует Exel файл. При его редактирование и сохранение чтобы этот файл сохранялся текущей датой и временим. И так каждый раз при его редактирование. Возможно такое или нет. Заранее спасибо за помощь в моем вопросе.
Автор: Nimnul
Дата сообщения: 18.10.2005 18:53
NIC13

Цитата:
Есть такой вопрос. Существует Exel файл. При его редактирование и сохранение чтобы этот файл сохранялся текущей датой и временим. И так каждый раз при его редактирование. Возможно такое или нет. Заранее спасибо за помощь в моем вопросе.

Так это вроде файловой системой поддерживается.
У файла есть три аттрибута, время создания, модификации, доступа.
Автор: zeleniy
Дата сообщения: 18.10.2005 19:20
Olive77

Цитата:
Кто может подсказать какие есть методы обезопасить код в VBA для Excel?
Встроенные в Excel не предлагать.

Пришлось сделать так написать программу на другом языке (не на VBA), например, на VB, скомпилировать программу и ее уже вызывать из Excel передавая ей необходимые параметры.
Автор: Nimnul
Дата сообщения: 18.10.2005 21:26
Olive77

Цитата:
Кто может подсказать какие есть методы обезопасить код в VBA для Excel?

Всю жизнь для меня была мечта поиметь дистрибутив Office Developer Edition...
Но не судьба в моем городе, а с инета так и не выкачал, подобное только в p2p сетях...
Суть такая что проект пишешь как в обычном офисе, но потом можно подготовить проект для сдачи заказчику, т.е. все само пакуется в дллки и все вызовы. (это как я понял, подробнее можно почитать в интернете либо на сайте майкрософт)
Автор: Olive77
Дата сообщения: 18.10.2005 22:48
zeleniy
Nimnul
Мне бы хватило и чего попроще (хотя Office Developer Edition судя по описанию очень заманчиво).
Я думал, может какие функции запихать в dll (xll).
Есть ли методы обезопасить библиотеки от декомпайлеров для C++?
Автор: dneprcomp
Дата сообщения: 19.10.2005 03:30

Цитата:
Всю жизнь для меня была мечта поиметь дистрибутив Office Developer Edition

Тоже вот решил скачать и посмотреть...
Снят с производства. И 97-й, и 2000-й. Т.о. у MS скачать нельзя. Только в инете найти как-нибудь,
Автор: NIC13
Дата сообщения: 19.10.2005 13:05

Цитата:
Есть такой вопрос. Существует Exel файл. При его редактирование и сохранение чтобы этот файл сохранялся текущей датой и временим. И так каждый раз при его редактирование.

Речь идет не о атрибуте файла, а имени файла. На пример файл 051019_1354.xls (где 051019 -дата, 13.54 - время) после его сохранении он становился 051019_1358.xls. То есть что бы имя файла менялось на текущую дату и время каждый раз при его сохранение.
Автор: Nimnul
Дата сообщения: 19.10.2005 14:05
NIC13

Цитата:
То есть что бы имя файла менялось на текущую дату и время каждый раз при его сохранение.

Можно.
Перехватить событие перед сохранением книги, получить текущий путь и имя файла, запомнить его.
Получить текущую дату и время, отформатировать так как нужно, сохранить книгу под этим именем.
Удалить старый файл.
Закрыть книгу.
Автор: Olive77
Дата сообщения: 19.10.2005 16:16
Nimnul

Цитата:
Office Developer Edition

http://forum.ru-board.com/topic.cgi?forum=35&topic=8090&start=20#lt
Автор: Michael23
Дата сообщения: 20.10.2005 12:45
Добрый день!
Подключился к базе MS SQL 2000 из Excel (VBA, через ADO) для экспорта данных
Необходимо получить свойство поля - может ли значения этого поля (Field) принимать Null (когда создаешь поле с помощью SQL, необходимо задать могут ли значения быть Null, а как это в программе проверить)???? (НЕ проверка на NULL значения поля таблицы)
Тип и длинну поля получил, а вот эту проблему не могу решить, может кто знает.
Автор: Nimnul
Дата сообщения: 23.10.2005 09:54
Olive77
Спасибо. Но там ссылки с рапидшары, а они вроде долго не живут...
Не получится скачать на модеме Хотя попробовать можно...
Автор: Neoromantic
Дата сообщения: 10.11.2005 16:16
Очень тупой вопрос. Объясню на простом примере что нужно:
Есть две ячейки, в третью нужно записать их сумму автоматически. Т.е. сначала там будет написано что-то вроде "введите данные", а после ввода сумма сразу появится. С помощью кнопки такое уже сделал, нужно что бы работало постоянно, так сказать. Ввел данные и посчиталось...
Как???

Добавлено:
Сделал через Worksheet_Change(ByVal Target As Range)
Может есть более красивый вариант?
Автор: Troitsky
Дата сообщения: 10.11.2005 18:53
Так а встроенные функции нельзя чтоли использовать?

Например что то в таком роде:
Код: =ЕСЛИ(ИЛИ(ЕЧИСЛО(A1);ЕЧИСЛО(B1));СУММ(A1;B1);"введите даные")
Автор: Morlok
Дата сообщения: 15.11.2005 12:24
У меня вопрос
В папке XLStart сидит файлик с макросами называется допустим makros.xls.
Я прописываю в свойствах excel открывать все файлы из расшареной папки и надо чтобы там лежал такой же файл makros.xls, причем, если он есть в XLStart то второй раз не пытался открыться, а если нет то открывался из общей папки.

Если ничего не менять то в принципе так и есть, только Excel ругается , что не может открыть два файла с одинаковым именем. Можно ли это сообщение отключить
Автор: TWanderer
Дата сообщения: 15.11.2005 15:04
У меня похожая поблема как у Morlok.
Необходимо знать есть ли в файле определенная страница, если нет создать.
Как то сталкивался с простым решением, сейчас не могу найти.


Автор: Morlok
Дата сообщения: 15.11.2005 16:34
Ну страницу в файле можно найти смотря в какой момент это нужно делать.
Например при открытии файла перебирать все страницы проверять наличие необходимой скажем по имени, если нет то создать
Автор: TWanderer
Дата сообщения: 15.11.2005 17:05
Morlok
Если на то пошло файлы в папке тоже можно перебрать.
Автор: TWanderer
Дата сообщения: 17.11.2005 09:43
Имеется несколько похожих UserForm.
Как передать ссылку на текущуу форму для обработки в процедуре.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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