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

» Excel VBA

Автор: TNR
Дата сообщения: 06.10.2006 02:13
Yuk
А можно без указания определённой папки ?
Или excel не понимает, что файл находиться в этой же папке ?
Автор: Yuk
Дата сообщения: 06.10.2006 02:33
TNR
Почему бы не попробовать? Только по-моему директория по умолчанию - My Documents.
Автор: TNR
Дата сообщения: 06.10.2006 03:02
Yuk
ладно попробую так
Автор: NeeDiGeo
Дата сообщения: 07.10.2006 22:45
Товарищи что можете сказать о книге Уокенбаха по vba для Excel. Если кому надо можно через поиск на spam_detected
Автор: DONRU1
Дата сообщения: 08.10.2006 23:05
Возможно ли с помощью макроса создать ярлык для файла Excel на рабочем столе?
Автор: Yuk
Дата сообщения: 09.10.2006 06:36
DONRU1
Making a short cut icon on the desktop
Автор: Sergey_MSN
Дата сообщения: 09.10.2006 15:26
Привет всем есть вопросец по копированию массивов в Excel через OLE.

Есть прикладуха использующая OLE (perl).

Пытаюсь через нее копировать данные в excel

Как и положено создаю в прикладухе массив, задаю в excel range и далее пишем присваивание

Range1.Value = адресс массива

Эта конструкция в Excel 2003 выполняется примерно 5 секунд
в предыдыщих версиях Excel примерно 159 секунд.

Все это проверялось на разных машинах, т.е. похоже что дело именно в версиях excel, а не в настройках.

Попытался найти ответ в интернете - ничего не нашел.

В чем может быть дело и, главное, можно ли это как то исправить в предыдущих версиях Excel.

Ответы типа - обнови все excel не предлагать. Фирма работает не честно купленном софте.

Один ответ я уже знаю - скопировать все в файл и потом прочитать его из excel. Работает примерно 10 секунд. Но как-то это не красиво и имеет свои проблемы.

С уважением,
Сергей.

Добавлено:
В дополнение к предыдущему посту,

а копирую я примерно так

см.
Use automation to transfer an array of data to a range on a worksheet
в http://support.microsoft.com/kb/247412/EN-US/
Автор: skotov
Дата сообщения: 09.10.2006 19:07
Здравствуйте!

Задача такая - нужен макрос, который бы проверял значения всех ячеек на листе, и если значение равно нулю, очищал бы сожержимое этих ячеек. Во всех ячейках на листе имеются ссылки на другую книгу.

Исходная задача - вставить лист из одной книги в другую в виде ссылок. Если делать через paste special, то вставляются ссылки на все ячейки, включая те, которые не заполнены в исходной книге. В итоге полученный лист с ссылками приходится долго вычищать от нулей.

заранее спасибо за помощь.
Автор: Troitsky
Дата сообщения: 09.10.2006 20:13
skotov
Малость по топорному и на скорую руку, но работает
Код: With ActiveSheet
For i = 1 To .UsedRange.Rows.Count
For j = 1 To .UsedRange.Columns.Count
If .Cells(i, j).Value = 0 Then .Cells(i, j).Clear
Next j
Next i
End With
Автор: Sergey MSN
Дата сообщения: 09.10.2006 20:52
skotov

PasteSpecial method as it applies to the Range object.
.............................
SkipBlanks Optional Variant. True to have blank cells in the range on the Clipboard not be pasted into the destination range. The default value is False.


SkipBlanks = True подойдет?
Автор: Kurbanov
Дата сообщения: 10.10.2006 08:01
У меня вопрос как можно сделать что бы данные записывались в другую книгу а не в другой лист . Спасибо


Private Sub cboSave_Click()
Dim TBL(135) As String, KUNNumber As Integer, KUNRow As Integer
Dim i As Integer
TBL(1) = textbox1
TBL(2) = cboPlace
...
...
...
For i = 1 To 135
Worksheets("КУН Таблица").Cells(KUNRow, i).Value = TBL(i)
Автор: skotov
Дата сообщения: 10.10.2006 13:50
Sergey MSN
Когда вставляешь в виде линка эта опция недоступна.

Troitsky
Спасибо, работает (правда очень долго). С описанной мной выше задачей справляется, но есть один косяк. Если на исходном листе в ячейке забита формула, которая возвращает ноль, то после применения этого способа на новом листе соответствующая ячейка очищается.

В связи с этим задачу пришлось немного усложнить. цель та же - скопировать лист в другую книгу в виде ссылок на исходную книгу. Однако копировать ссылки надо только на те ячейки, которые непустые в исходной книге (т.е. в которых либо ссылки / формулы, либо значения.) Также желательно, чтобы копировался формат.

Заранее спасибо
Автор: Yuk
Дата сообщения: 10.10.2006 18:46
skotov

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

Примерно так:
Код: Sub MakeLinks()
For Each c In ActiveSheet.UsedRange.Cells
If Not IsEmpty(c) Then
Workbooks("Book2").Sheets(1).Cells(c.Row, c.Column).Formula = _
"='[" & ActiveWorkbook.Name & "]" & ActiveSheet.Name & "'!" & c.Address( _
RowAbsolute:=False, ColumnAbsolute:=False)
End If
Next
ActiveSheet.UsedRange.Copy
Workbooks("Book2").Sheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
Workbooks("Book2").Sheets(1).Activate
Cells(1, 1).Select
End Sub
Автор: skotov
Дата сообщения: 11.10.2006 10:40
Yuk
Спасибо, но я видимо что-то делаю не так. На строке

Код: Workbooks("Book2").Sheets(1).Cells(c.Row, c.Column).Formula = _
"='[" & ActiveWorkbook.Name & "]" & ActiveSheet.Name & "'!" & c.Address( _
RowAbsolute:=False, ColumnAbsolute:=False)
Автор: Yuk
Дата сообщения: 11.10.2006 22:40
skotov
Проблема скорее всего в имени новой книги. Возможно надо "Book2.xls". Или можешь определить имя через код:
Код: Sub CheckBookName()
MsgBox ActiveWorkbook.Name
End Sub
Автор: thefrilos
Дата сообщения: 12.10.2006 00:58
Снятие блокировки со страницы, если пароль забыл


Код: Sub Password_Cracker()

Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126

Kennwort = Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
ActiveSheet.Unprotect Kennwort
If ActiveSheet.ProtectContents = False Then
MsgBox "Done" & vbcr & "enjoy it )"
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next

End Sub

Автор: skotov
Дата сообщения: 13.10.2006 10:34
Yuk
Огромное тебе спасибо! Еще бы сделать так, чтобы сохранялась ширина и высота строк и столбцов... ))
Автор: Yuk
Дата сообщения: 13.10.2006 18:45
skotov
Вставь перед End If:
Код: nb.Sheets(1).Rows(c.Row).RowHeight = c.RowHeight
nb.Sheets(1).Columns(c.Column).ColumnWidth = c.ColumnWidth
Автор: skotov
Дата сообщения: 16.10.2006 09:08
Yuk
Еще раз огромный респект. все работает как часы.
Автор: DoubleZero
Дата сообщения: 16.10.2006 11:51
Ну то, что не програмер и так понятно.
Просьба с синтаксисом подсказать

Dim cur_range As Range
With ActiveSheet
Set cur_range = Selection
cur_range.Activate
If здесь надо сравнить содержимое двух ячеек, заданных относительно акт. ячейки [R - 5] < [R - 4] Then
With cur_range.Interior
.ColorIndex = 6
.Pattern = xlSolid
End With
End If


End With

как произвести операции со значениями неактивных ячеек????
Или может куда отправите почитать на эту тему. В форуме рылся нифига не нашел(((
Автор: Troitsky
Дата сообщения: 16.10.2006 12:13
DoubleZero

Код: If .[R[-5]C].Value < .[R[-4]C].Value Then
Автор: Sk1f
Дата сообщения: 16.10.2006 12:50
http://www.script-coding.info/VBA_First_Steps.zip

Цитата:

CHM-файл справки с тремя учебниками по VBA, "VBA для Excel" (73 шага), "VBA для Access" (34 шага) и "Справка VBA" (93 шага) на русском языке. В файле справки имеется полнотекстовый поиск. Материалы файла являются Off-line версией материалов сайта "Первые шаги" (по состоянию на 11.10.2006). Автор учебников - Каев Артем Геннадьевич.

Примечание: данный файл размещён здесь с согласия Web-мастера ресурса "Первые шаги".


//взято с сайта http://www.script-coding.info/filez.html
Автор: DoubleZero
Дата сообщения: 16.10.2006 14:52
Troitsky


Отлично и так и этак. Все супер, сенкс.
Тока вот проблема, цвет заливки активной ячейки не меняется.
Независимо выполняется условие или нет

Sk1f

уже залез и качаю, тоже сенкс.
Автор: Troitsky
Дата сообщения: 16.10.2006 15:29
DoubleZero

Цитата:
цвет заливки активной ячейки не меняется

Ну попробуй тогда сделать не через индекс цвета, а через сам цвет:
Код: .Interior.Color = vbYellow
Автор: DoubleZero
Дата сообщения: 16.10.2006 16:46
То Troitsky

Пробовал, через раз шлепает.

Вообще к чему я это все, у меня процедура вычисляет формулу для выделенного диапазона. Все пучком. Но так как у меня там будет масса условий, то я хотел их разнести через If then? но тут косяк, может она туго понимает эту относительную адресацию???

Процедура вот такая

Dim cur_range As Range
With ActiveSheet
Set cur_range = Selection
cur_range.Activate

cur_range.FormulaR1C1 = "= IF(RC[-5]<RC[-4],IF(RC[-5]<RC[-2],RC[-3]*1.1,""Условие не выполнено""),FALSE)"

End With

Вот такой вини-грет
Автор: Troitsky
Дата сообщения: 16.10.2006 17:38
DoubleZero

Цитата:
Вот такой вини-грет

Действительно винегрет

Ты чего хочешь то? Составить условия для макроса или в ячейку макросом функции записывать, которые не VBA будет вычислять, а непосредственно Excel?
Автор: DoubleZero
Дата сообщения: 17.10.2006 08:42
Да нет я конечно хочу, что бы все вычисления происходили в VBA, там все более прозрачно можно написать, а не этими длинными строками.

А фигня такая получилась, потому как сделал просто, написал условие в макросе и затем зашел в VBA для корректировки.

Если просветишь как это условие разбить на составляющие буду очень признателен
Автор: Troitsky
Дата сообщения: 17.10.2006 20:09
DoubleZero
Короче, как я понял: ты выделяешь диапазон ячеек и желаешь, что бы каждая ячейка из этого диапазона, для которой выполняется условие
[RC[-5]] < [RC[-4]]
и
[RC[-5]] < [RC[-2]]
заливалась желтым цветом.
Если так, то код такой:
Код: For Each anyCell In Selection.Cells

With anyCell
If Cells(.Row, .Column - 5).Value < Cells(.Row, .Column - 4) Then
If Cells(.Row, .Column - 5).Value < Cells(.Row, .Column - 2) Then
.Interior.Color = vbYellow
End If
End If
End With

Next anyCell
Автор: Yuk
Дата сообщения: 17.10.2006 20:29
Troitsky
Небольшой комент:
Cells(.Row, .Column - 5).Value можно заменить на .Offset(0,-5).Value

Дело вкуса, конечно.
Автор: Troitsky
Дата сообщения: 17.10.2006 21:35
Yuk

Цитата:
Небольшой комент:
Cells(.Row, .Column - 5).Value можно заменить на .Offset(0,-5).Value

Вариант, естественно, не один - была бы задача сформулирована четко, а уж реализации можно весьма разнообразные представить

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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