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

» Excel VBA

Автор: Morlok
Дата сообщения: 17.11.2005 10:35
TWanderer

Конечно можно перебрать но, все дело в том что макросы начинают работать только после того как открыты все книги, которые открываются по умолчанию, соответственно такая проверка возможна только после того как Excel попытается открыть две книги с одинаковыми именами.
Еще как вариант можно открыть книги с макросами из XLStart потом уже перебирать папку на наличие еще не открытой книги и если такая есть открывать ее, но это как то пошло по моему да и скорей всего будет долго.
Автор: MrZeRo
Дата сообщения: 17.11.2005 11:47
TWanderer
Есть такая переменная Me.
Может, она подойдет? Только не уверен, это ссылка на лист или на форму.
Автор: dartvaider
Дата сообщения: 18.11.2005 09:16
Помогите плиз! Можно ли через VBA запустить сmd команду и выполнить её?
Если можно то как?Очень нужно!
Автор: Vodomer
Дата сообщения: 18.11.2005 10:45
как пример из книжки

Цитата:
Sub RunCharMap()
On Error Resume Next
Program = “Charmap.exe”
TaskID = Shell(Program, 1)
If Err <> 0 Then
MsgBox “Cannot start “ & Program, vbCritical, “Error”
End If
End Sub

как видно кроме charmap можно запускать что нужно
книга john wiley & sons - excel 2002 power programming with vba.pdf
Автор: aquaman77
Дата сообщения: 18.11.2005 18:10
Olive77


Цитата:
Код:.ActiveChart.SetSourceData Source:=.Worksheets(s).Range(.Worksheets(s).Cells(1, 1), .Worksheets(s).Cells(k + 1, Num_Col + 1)), _
PlotBy:=xlColumns


ничего себе! а чего же все так запутано-то?
спасибо, попробую.
Автор: TWanderer
Дата сообщения: 24.11.2005 17:54
Новая проблема
При добавлении строк "ListBox" при помощи ListBox1.AddItem компьютер тормозит
Добавление выполняется в цикле добавляю около 200 строк.
Есть ли этому альтернатива.
Проблема не большая, но все таки...

С уважением,
Владимир
Автор: psihodelic
Дата сообщения: 24.11.2005 19:00
Нужна ваша помощь! Срочно! Вопрос довольно интересный.

Перенос даных из MySql в Excel

Ситуация: Существует база даных в MySQL, заказчику необходимо видеть определенную информацию из базы в экселевском документе.

Планирую: В экселе создать кнопку, с прикрученым макросом, который через OLE (если это возможно) связывается с MySql и посредством запросов, получает и вставляет в документ данные.

Проблема в том, что с технологией OLE знаком лишь в теории, видел как это делают, а сам не занимался не разу.

Подскажите насколько осуществимо задуманное и помогите примером или ссылкой!!!
Автор: AlexER
Дата сообщения: 14.12.2005 08:49
Что прочесть на эту тему и где взять, чтобы понять, как грамотно пользовать VBA под Exel?
Возможно справочник по VBA в Exel... ?
Автор: SlavikP
Дата сообщения: 14.12.2005 10:28
Есть в Excel табличка с двумя листами - в одном некие данные, в другом т.н.
"сводная таблица" (pivot table) по этим данным.
Данные в первом листе преиодически изменяются (в основном кол-во записей)
После каждого изменения приходится лезть в свойства итоговой таблицы и менять диапазон и на актуальный.
Хотелось бы пример скрипта на VB, который можно привязать к кнопке для изменения диаразона значений для сводной таблицы.
Примечание: таблица данных начинается всегда со строки 2 и заканчивается пустыми строками. Внутри таблицы пустых строк нет.
Автор: jrd32
Дата сообщения: 10.01.2006 22:38
Помагите!
Надо написатьscript каторый будет запускать через кнопку в EXEL текстовый документ, каторый в себе содержит = допустем:
00.
01.qwertyuiopasdfghEXEL00jklzxcvbnm
02.qwertyuiopasdfghEXEL01jklzxcvbnm
03.qwertyuiopasdfghEXEL02jklzxcvbnm
04.
05.qwertyuiopasdfghEXEL03jklzxcvbnm
06.qwertyuiopasdfghEXEL04jklzxcvbnm
07.qwertyuiopasdfghEXEL05jklzxcvbnm
08.
09.
10.
11.qwertyuiopasdfghEXEL06jklzxcvbnm
12.qwertyuiopasdfghEXEL07jklzxcvbnm
13.qwertyuiopasdfghEXEL08jklzxcvbnm
14.qwertyuiopasdfghEXEL09jklzxcvbnm
15.qwertyuiopasdfghEXEL10jklzxcvbnm
16.qwertyuiopasdfghEXEL11jklzxcvbnm

Вот это всё надо через VB - од страки 19 до 25 "EXEL00" ввести в лист (list1) exel под
сабои так чтоб небыли пустые пространства как строки 00. ;08.; итд.....
вот так:

EXEL00
EXEL01
EXEL02
EXEL03
EXEL04
EXEL05
EXEL06
EXEL07
EXEL08
EXEL09
EXEL10
EXEL11

(на каждую строку)

Потом кокда выйдет токая строница (лист1) с такими данными то надо из этого сделать Диограму в 2D.
Спасибо за рание.

Добавлено:
Вот почему неработает вот ето?


Private Sub CommandButton1_Click()

psc$ = "c:\exel\aaa.txt"
nachnet% = 120
dlina% = 5
psch$ = Mid(psc$, nachnet%, dlina%)


End Sub


Добавлено:
а пониал
Автор: AlDol
Дата сообщения: 12.01.2006 07:57
Братцы, подскажите как сделать, что бы VB распознавал русский текст. Я создал БД в Access. Это не Эксель, но тот же VB. Русский из таблицы воспроизводится нормально и все надписи на формах тоже. Но, мне нужно текст присвоить текстбоксу на русском через программный код. Английский текст присваивает нормально, а вот русский VB видит только ???? и поэтому ничего сохранить не может.

Заранее спасибо.
Автор: dneprcomp
Дата сообщения: 12.01.2006 08:40
AlDol
Попробуй присваивать через ASC-коды
Вопросы по Access следует задавать в соответсвующих темах. Вот хотя бы в VBA for Access . Или подбери себе подходящую: http://forum.ru-board.com/forum.cgi?action=filter&forum=33&filterby=topictitle&word=access
Да, не плохо бы было понять в какой среде програмируем: VB или VBA.
Автор: Troitsky
Дата сообщения: 12.01.2006 11:26
jrd32
Для конкретно этого случая если нумерация в начале строки состоит из двух цифр и точки (3 символа) и путь к текстовому файлу "C:\1.txt", можно применить такой код.

Код: Dim j As Integer
Dim strMx() As String
Dim TextLine As String

Open "C:\1.txt" For Input As #1 ' Открывает файл.
j = -1
Do While Not EOF(1) ' Цикл до конца файла.
Line Input #1, TextLine ' Читает строку в переменную.
TextLine = Mid(TextLine, 4, Len(TextLine) - 4)
TextLine = Trim(TextLine)
If TextLine <> "" Then
j = j + 1
ReDim Preserve strMx(j)
strMx(j) = TextLine
End If
Loop
Close #1 ' Закрывает файл.
Автор: jrd32
Дата сообщения: 15.01.2006 10:17
Spasibo
A deograma dolzna vygledet vrode peroga i vnej pokazono skolko mesta zanimaet EXEL00... a esli dopustem pripishem ishe 2 raza "qwertyuiopasdfghEXEL12jklzxcvbnm" to pokazet shto EXEL12 zanimaet mesta bolshe chem libo inoi EXEL00........

[b][s]Добавлено:[/s][/b]
[b]Troitsky[/b]

Da pozicyia dolzna byt postojanna.
A v list vodit nado pod Bukvoi " A " vniz. Na cyfru 1 idet EXEL00 potom na cyfru 2 EXEL01 itd.... . A vot pustovo mesta na liste nedolzno byt.

[b][s]Добавлено:[/s][/b]
<b> Извените за транслит. <b>
По русский медленно пешу да и еш с ошибками. А так пешу на русском через прогу Зю - каторая позволяет переводит буквы с латыни на азбуку. - Для тех кто привык писать на латыне. Кому надо вышлю.
Автор: Troitsky
Дата сообщения: 15.01.2006 11:32
jrd32
Вот на скорую руку сделал. Что-то в этом роде должно быть:


Код: Type MyType
Text As String
Count As Integer
End Type

Sub MySub()

Dim i As Integer, j As Integer
Dim f As Boolean
Dim Mx() As MyType
Dim TextLine As String

Open "C:\1.txt" For Input As #1 ' Открывает файл.
i = -1
Do While Not EOF(1) ' Цикл до конца файла.
Line Input #1, TextLine ' Читает строку в переменную.
TextLine = Trim(Mid(TextLine, 20, 6))
f = False
If TextLine <> "" Then
For j = 0 To i
If Mx(j).Text = TextLine Then
Mx(j).Count = Mx(j).Count + 1
f = True
Exit For
End If
Next j
If Not f Then
i = i + 1
ReDim Preserve Mx(i)
Mx(i).Text = TextLine
Mx(i).Count = 1
End If
End If
Loop
Close #1 ' Закрывает файл.

With Worksheets(1)
For j = 0 To i
.Cells(j + 1, 1).Value = CStr(Mx(j).Text)
.Cells(j + 1, 2).Value = CInt(Mx(j).Count)
Next j
Charts.Add
ActiveChart.ChartType = xl3DPie
ActiveChart.SetSourceData Source:=.Range(.Cells(1, 1), .Cells(j, 2)), PlotBy:=xlColumns
End With

End Sub
Автор: DonRus
Дата сообщения: 22.01.2006 00:44
Подскажите, как программно заблокировать возможность вырезания ячеек на листах Excel?
Автор: Nickos23
Дата сообщения: 02.02.2006 14:36
Подскажите новичку в VBA!
Возможно ли сводную таблицы создавать для данных, расположенных в массиве или же для этого обязательно надо их скопировать на лист?
Автор: Sonix
Дата сообщения: 08.02.2006 11:05
Как сделать так, чтобы програмный код для всех книг находился в одном месте?
Ну допустим у меня на серваке есть папка с книгами. Структура таблиц одинаковая, код один и тотже, но функциональность зависит от имени книги, а они (имена) разные.
И когда я чтото меняю, то мне приходится изменять во всех вайлах, а их много.
Короче как обегчить себе жизнь - спихнуть код в одно место..
Как это сделать? Если кто знает, прошу по-подробней..
Автор: Morlok
Дата сообщения: 08.02.2006 11:16
Создаешь книгу с макросами, которые должны быть доступны для разных книг и кладешь ее в папку C:\Program Files\Microsoft Office\OFFICE11\XLSTART (соответственно \OFFICE11 для 2003 офиса). Эта книга будет открываться при запуске екселя будет невидимой но макросы из нее будут доступны
Автор: Sonix
Дата сообщения: 15.02.2006 11:20
Книнги у меня лежат на сервере и открываются удаленно, т.е. с других компутеров. По этому методу, я так понял, нужно будет копировать эту книгу на все компы юзеров... Есть ли возможность хранения книги с макросами в одном месте?
Автор: Olive77
Дата сообщения: 15.02.2006 17:39
DonRus
А не проще просто запаролить лист?
Автор: Fantom 14
Дата сообщения: 17.02.2006 14:39
народ помогите!
меня тут попросили написать прогу на Excel VBA по профилю я с ним не занимался и нету пока причин с ним заниматься. прога очень простая: дано 4х значное число, надо в этом числе выбрать цифру которая стоит левее минимальной цифры, и еще одну которая стоит левее максимальной.

для примера 6597 прога должна вывести 6 как цифра стоящая левее минимальной, и 5 как цифра стоящая левее максимальной
Автор: Troitsky
Дата сообщения: 17.02.2006 17:18
deleted

пардон, не туда запостил

Добавлено:
раз уж запостил по обшибке, дабы пост не пустой был отвечу
Fantom 14
Почему именно на VBA? число должно с листа браться?
Что нужно сделать если все цифры одинаковые? Если максимальная цифра является крайней? куда вывести? В лист?
Автор: Fantom 14
Дата сообщения: 17.02.2006 17:57
Troitsky

Цитата:
Почему именно на VBA?

потому что считают, что студенты обычного гуманитарного универа должны знать его. будь это на паскале или си я бы сделал а с ВБА я дела не имел.

Цитата:
число должно с листа браться?

ввожу сам в поле типа ЕДИТ(говорю в терминологии С++)

Цитата:
Что нужно сделать если все цифры одинаковые?

вывод сообщения что все числа одинаковы

Цитата:
Если максимальная цифра является крайней?

вывод сообщения что число крайнее. тоже самое сделать если и миним. число крайнее

Цитата:
В лист?

в поле типа МЕМО(по С++)

меня только попросили сделать прогу на ВБА и дали задание. больше не знаю. дайте хоть каконить вариант. буду рад
Автор: Troitsky
Дата сообщения: 17.02.2006 19:33
Fantom 14

Цитата:
меня тут попросили написать прогу на Excel VBA по профилю я с ним не занимался и нету пока причин с ним заниматься
А разве то, что тебя попросили не является причиной?

Цитата:
потому что считают, что студенты обычного гуманитарного универа должны знать его

Цитата:
меня только попросили сделать прогу на ВБА

Я к тому спрашиваю, что может ты с VB путаешь, т.к. на VBA, в принципе, прогу не напишешь, а лишь макрос(ы), дополнив таким образом документ и сделав его подобным приложению.

Вообще, задание мутное какое-то

Без всяких изощренных проверок если, то будет выглядеть вроде этого
Код: Private Type MyType
Number As Integer
Position As Integer
End Type

Sub Find()
Dim strNum As String
Dim intLen As Integer
Dim i As Integer
Dim intCur As Integer
Dim iMax As MyType
Dim iMin As MyType

iMax.Number = 0
iMax.Position = 0
iMin.Number = 9
iMin.Position = 0

' Ввод числа из ячейки A1
strNum = ActiveSheet.Cells(1, 1).Text
intLen = Len(strNum)

For i = 1 To intLen
intCur = Val(Mid(strNum, i, 1))

If intCur >= iMax.Number Then
iMax.Number = intCur
iMax.Position = i
End If

If intCur <= iMin.Number Then
iMin.Number = intCur
iMin.Position = i
End If
Next i

If iMax.Position > 1 Then
' Вывод цифры, которая стоит левее максимальной цифры, в ячейку B1
ActiveSheet.Cells(1, 2).Formula = Mid(strNum, iMax.Position - 1, 1)
Else
ActiveSheet.Cells(1, 2).Formula = "фиг вам"
End If

If iMin.Position > 1 Then
' Вывод цифры, которая стоит левее минимальной цифры, в ячейку C1
ActiveSheet.Cells(1, 3).Formula = Mid(strNum, iMin.Position - 1, 1)
Else
ActiveSheet.Cells(1, 3).Formula = "фиг вам"
End If

End Sub
Автор: Fantom 14
Дата сообщения: 17.02.2006 20:10
Troitsky
чето я не понял: а как его с ВБА связать? что надо сделать чтобы его там запустить? я походу делаю чтото не так он пишет мне что Compile Error: Invalid inside procedure :0?
Автор: Troitsky
Дата сообщения: 17.02.2006 21:03
Fantom 14

Цитата:
чето я не понял: а как его с ВБА связать?
добавь модуль. вставь туда код. введи в ячейку A1 число и выполни макрос.

Цитата:
Compile Error: Invalid inside procedure
А разве в ВБА можно такую ошибку получить?
Автор: mrdime
Дата сообщения: 18.02.2006 00:39
Привет всем,

Часто возникает такая задача. Есть лист Excel в котором 5-6 сотен хаотически заполненных ячеек. Как определить диапазон этих ячеек? Т.е. фактически координаты - последней нижней правой заполненной ячейки?
Автор: Olive77
Дата сообщения: 18.02.2006 00:59
UsedRange.Columns
UsedRange.Rows
Автор: respite
Дата сообщения: 21.02.2006 11:04
mrdime

Код: i = 1
j = 1
While Cells(i, j).Value Is Not Null
'... тут обрабатываешь все заполенные ячейки

i = i + 1
j = j + 1
Wend

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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