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

» Excel VBA

Автор: mrachny
Дата сообщения: 07.12.2006 09:32
Такой вот вопрос есть. Можно ли Ёксель связать с Аутлуком. То есть, сделать кнопку или менюшку, при нажатии на которую, например делалась бы копия открытой книги и вставлялась в Аутлук, чтобы написать адрес и отправить. Может кто заморачивался с этим?

И второй вопрос, подскажите знающие люди, как сделать так, чтобы Progress Bar работал?
Автор: AndyAdvokat
Дата сообщения: 07.12.2006 12:07
Yuk

Цитата:
Можно, но в другой ячейке через формулу:
=HYPERLINK("http://url.com", "текст в ячейке")

Или через макрос убрать общий доступ, поставить гиперлинк, восстановить общий доступ.


вариант формулу в ячейку не подходит
а вот как в макросе это сделать. Сам порылся и не нашёл

Инфа о совмесном доступе храниться в свойстве workbook.MultiUserEditing = True
а как его поменять ?
Автор: Yuk
Дата сообщения: 07.12.2006 14:05
AndyAdvokat
См. хелп по MultiUserEditing и ExclusiveAccess.
[more]MultiUserEditing Property
True if the workbook is open as a shared list. Read-only Boolean.

Remarks
To save a workbook as a shared list, use the SaveAs method. To switch the workbook from shared mode to exclusive mode, use the ExclusiveAccess method.

Example
This example determines whether the active workbook is open in exclusive mode. If it is, the example saves the workbook as a shared list.

If Not ActiveWorkbook.MultiUserEditing Then
ActiveWorkbook.SaveAs fileName:=ActiveWorkbook.FullName, _
accessMode:=xlShared
End If

ExclusiveAccess Method
Assigns the current user exclusive access to the workbook that's open as a shared list.

expression.ExclusiveAccess
expression Required. An expression that returns a Workbook object.

Remarks
The ExclusiveAccess method saves any changes you've made to the workbook and requires other users who have the workbook open to save their changes to a different file.

If the specified workbook isn't open as a shared list, this method fails. To determine whether a workbook is open as a shared list, use the MultiUserEditing property.

Example
This example determines whether the active workbook is open as a shared list. If it is, the example gives the current user exclusive access.

If ActiveWorkbook.MultiUserEditing Then
ActiveWorkbook.ExclusiveAccess
End If
[/more]
Автор: Stasssm
Дата сообщения: 08.12.2006 12:36
Подскажите как сделать макрос в Excele?
Очень похож на макрос описаный выше со столбцами C и G,
но все же немного отличается:
У меня есть список Ф.И.О., (фамилия, имя и отчество находятся в одной ячейке)
есть написаные функции, которые мне помогают извлечь из этой ячейки только фамилию, либо имя, либо отчество. Иногда использую
сразу две =ImIzStr(B3)&" "&OtIzStr(B3), чтобы в соседней ячейке получить и имя и отчество. Затем эту формулу копирую по всему списку. Решил при помощи макроса автоматизировать процесс, чтобы excel сам находил конец списка и вставлял в получившийся диапазон ячеек эту формулу.
Я Очень благодарен за макрос когда сравниваются столбцы C и G.
я при помощи него понял как искать последнюю ячейку в списке, получилось:

Sub CopyFunction()
Dim fio As Range
Dim nr As Long, ns As Long

nr = ActiveSheet.UsedRange.Rows.Count
ns = Application.ActiveCell.Column

For Each fio In Range(Cells(3, ns), Cells(nr, ns))

??????????????
Next fio
End Sub

Подскажите какой формулой где ????????? вставляется формула?
Автор: Anton T
Дата сообщения: 08.12.2006 13:59
В листе имеется А, Б, В и т.д. Как можно добавить все листы в одном списке(ЛистБокс1)? Например, на листе А столбцы фамилии: Анастайчук, Аполенко и т.д., Б: Бондарчук, Бондаренко и т.д., чтобы сделать все листы вместе в списке:
Анастайчук
Аполенко
Бондарчук
Бондаренко
и т.д.
Автор: Yuk
Дата сообщения: 08.12.2006 18:14
Stasssm
Для вставки формулы в ячейки в цикле пиши

Код: addr = fio.Address(RowAbsolute:=False, ColumnAbsolute:=False)
fio.Offset(0,1).Formula = "=ImIzStr(" & addr & ")&"" "" &OtIzStr( & addr & ")"
Автор: Anton T
Дата сообщения: 10.12.2006 18:38
Yuk
Спасибо, что объяснил.
Автор: Anton T
Дата сообщения: 11.12.2006 12:20
Yuk
Если сможешь, посообщаемся в аси, мой номер: 297574431

Кстати вы понимаете Access VBA?
Автор: Stasssm
Дата сообщения: 11.12.2006 15:40
Yuk

СПАСИБО ОГРОМНОЕ, все работает и в том случае когда ставиться формула и когда уже значение, только к fio добавил Vaiue - (fio.Value).

Я немного изменил вашу строку, чтобы макрос работал, когда я делаю активную ячейку не с ФИО, а стою на пустой справа.
fio.Value = ImIzStr(fio.Offset(0, -3).Value) & " " & OtIzStr(fio.Offset(0, -3).Value)

"-3" потому что правее от ФИО есть колонка с адресом и следующая с должностью.

Аппетит приходит во время еды:
Не во всех таблицах этой книги есть колонка с должностью .В этом случае, когда отработает макрос между адресом и результом будет лишний пустой столбец (ФИО - в столбце "В", адрес в "С", "D" - пустой). В этом случае придется постоянно идти в модуль и менять на "-2".
Подкажите, пожалуйста, можно ли указать макросу, чтобы он вставлял значения в том столбце на котором активна ячейка, т.е справа от адреса и черпал источник своей работы именно с конкретного столбца "B", а не с координаты "-3", т.к. именно на нем во всех таблицах данные с ФИО. Мне это бы пригодилось для работы и в других таблицах.

Так получилось, что при всем богатстве выбора знакомых, знающих компы никто не разбирается в VBA.
Автор: Radeon9800Pro
Дата сообщения: 11.12.2006 16:55
Добрый всем день! прощу прощения за кросс-постинг, просто не уверен, что мой вопрос касается программирования

Дело вот в чем - хочу зделать зависимые списки

т.е. в одной ячейке есть список: IE, Firefox, Opera
если юзер выбирает IE - в соседней ячейке появляется список: 6.0.2900; 6.0.2800; 6.0.2700

Если выбрать Firefox - то там другие пункты соответственно


объясните пожалуйста чайнику, как это проще всего сделать
заранее спасибо
Автор: Yuk
Дата сообщения: 11.12.2006 18:11
Stasssm
Замени Offset(0,-3) на Cells(fio.Row,2), что означает взять ячейку из той же строки, что у fio, и 2-го столбца.


Добавлено:
Radeon9800Pro
Ну что ж. Коли не указано, как организовать списки, предложу сам.
На отдельном листе (обзовем его list) сделать таблицу
IE Firefox Opera
6.0.2900 5.0 8
6.0.2800 5.1 9
6.0.2700

Выделяем заголовок и обзываем эту область, скажем browser.
Выделяем область со значениями под IE и обзываем ее IE.
То же с остальными столбцами (имя области соответствует заголовку).

В основном листе (где ячейки с выпадающими списками) предполагаем, что первый список в А1, второй в В1. Выделяем А1, Данные-->Проверка(Тип данных-Список), в формулу пишем =browser
Затем в VBA редакторе в код основного листа вставляем код:
Код: Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Range("B1").Validation.Delete
Range("B1").Validation.Add _
Type:=xlValidateList, Formula1:="=" & Target.Value
Range("B1").ClearContents
Range("B1").Select
End If
End Sub
Автор: aalleexxaa
Дата сообщения: 11.12.2006 19:44
Привет, нужна помощь

1) нужно вывести из таблицы access один столбец причем все данные группировать, чтобы не было повторяющихся

Код:
Public db As DAO.Database
Public tovar As DAO.Recordset

Private Sub CButton2_Click()
Set db = DAO.OpenDatabase(ThisWorkbook.Path + "\baza\baz.mdb")
sSQL_t = "SELECT tovar.название FROM tovar GROUP BY tovar.название"
Set tovar = db.OpenRecordset(sSQL_t)

tovar.MoveLast
d = tovar.RecordCount
tovar.MoveFirst

Do While Not tovar.EOF()
For i = 1 To d
Лист4.Cells(i, 2).Value = tovar.Fields(1)
tovar.MoveNext
Next i
Loop

tovar.Close

End Sub
Автор: Yuk
Дата сообщения: 11.12.2006 19:57
aalleexxaa
Используй запрос:
"SELECT DISTINCT tovar.название FROM tovar"

Цитата:
что не правильно?

А какие проблемы? Я ж не могу протестировать твой код без базы.
Автор: RDVAS
Дата сообщения: 11.12.2006 20:15
Прошу помощи в следующем вопросе.
На листе при помощи Ctrl и лев. кн. мыши выделяю ячейки в произвольном порядке. Как потом с помощью VBA узнать индивидуальные адреса этих выделенных ячеек для дальнейшей работы с ними.
Автор: Yuk
Дата сообщения: 11.12.2006 20:26
RDVAS

Код: Sub test()
For Each ar In Selection.Areas
Debug.Print ar.Address
Next
End Sub
Автор: RDVAS
Дата сообщения: 11.12.2006 21:43
Yuk
Огромное спасибо! Все идет
Автор: aalleexxaa
Дата сообщения: 11.12.2006 22:55
Yuk
действительно, что то я не подумал
ошибка в том что он не видит
Цитата:
tovar.Fields(1)


и кидает ошибку :
Run-time error '3265' Aplication-defined or object-defined error
как будто он не может обратится к таблице, хатя все правильно+все библиотеки
Автор: Yuk
Дата сообщения: 12.12.2006 00:17
aalleexxaa
Может надо tovar.Fields(0)?
Автор: RDVAS
Дата сообщения: 12.12.2006 07:14
Есть список ФИО. В конце этого списка необходимо вставить количество печатных листов. Как найти это количество в VBA?
Автор: Yuk
Дата сообщения: 12.12.2006 08:06
RDVAS
Вроде так:
Код: nPages = (ActiveSheet.HPageBreaks.Count + 1) * (ActiveSheet.VPageBreaks.Count + 1)
Автор: Radeon9800Pro
Дата сообщения: 12.12.2006 13:59
Yuk
Спасибо огромное, все отлично работает! Можно я еще немного потуплю - а каким образом сделать два (или даже несколько) таких штук на одной странице?

Добавлено:
Yuk
С предыдущим вопросом разобрался вроде сам, вот такой код работает:
но появился еще один вопрос каким образом можно сделать, чтобы во всех последующих ячейках эта штука тоже работала
т.е. у меня сейчас исходный список в F2, а зависимый - в G2
и мне нужно, чтобы во всех F и G были эти списки

(с оговорками - начиная со второй ячейки, и через каждые 10-15 строк (всегда по-разному) пропускать одну. Наверное, чтобы было понятно - нужен файл. Вот что я хочу в итоге получить:
http://rapidshare.com/files/7179356/123456.rar.html


Код:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$2" Then
Range("G2").Validation.Delete
Range("G2").Validation.Add _
Type:=xlValidateList, Formula1:="=" & Target.Value
Range("G2").ClearContents
Range("G2").Select
End If

If Target.Address = "$H$2" Then
Range("I2").Validation.Delete
Range("I2").Validation.Add _
Type:=xlValidateList, Formula1:="=" & Target.Value
Range("I2").ClearContents
Range("I2").Select
End If

End Sub

Автор: Stasssm
Дата сообщения: 12.12.2006 17:24
Yuk

СПАСИБО БОЛЬШОЕ, что откликнулись на мою проблемку - все получилось!

Жаль, что нельзя пожать руку
Автор: Yuk
Дата сообщения: 12.12.2006 18:53
Radeon9800Pro
С 1-й ячейкой без проблем. Просто копируй проверки куда нужно (через специальную вставку).
Для 2-й новый код:

Код: Private Sub Worksheet_Change(ByVal Target As Range)
Dim tv As Validation
If Target.Column = 6 Or Target.Column = 8 And HasValidation(Target) Then
If Target.Value = "" Then
Target.Offset(0, 1).ClearContents
Exit Sub
End If
Target.Offset(0, 1).Validation.Delete
Target.Offset(0, 1).Validation.Add _
Type:=xlValidateList, Formula1:="=" & Target.Value
Target.Offset(0, 1).ClearContents
Target.Offset(0, 1).Select
End If
End Sub

Private Function HasValidation(r As Range) As Boolean
' Returns True if every cell in Range r uses Data Validation
On Error Resume Next
x = r.Validation.Type
If Err.Number = 0 Then HasValidation = True Else HasValidation = False
End Function
Автор: aalleexxaa
Дата сообщения: 12.12.2006 20:05
Yuk
нет, нужно именно tovar.Fields(1) !!!

Автор: Yuk
Дата сообщения: 12.12.2006 20:54
aalleexxaa
Во-первых, откуда возьмется Fields(1), если запрос возвращает только одно поле? На забывай, что по умолчанию нумерация пунктов в колекции начинается с 0.

А во-вторых тормоза мы оба
Цитата:
Лист4.Cells(i, 2).Value = tovar.Fields(1)

Должно быть
Код: Sheets("Лист4").Cells(i, 2).Value = tovar.Fields(0)
Автор: aalleexxaa
Дата сообщения: 12.12.2006 22:11
Yuk
ты гений, ну наконец, я уже три дня сижу

Добавлено:
Подскажи мне еще один вопросец пожалуйста

нужно при загрузке на лист вместо цифр поставить соответствующие названия из другой таблицы

чтобы вывести на раб лист данные мы пишем:

Код: Cells(k, 7).Value = tovar.Fields(7)
Автор: Yuk
Дата сообщения: 12.12.2006 23:24
aalleexxaa
А почему бы не извращаться, а сделать правильный запрос к базе.
Насколько я понял, должно быть так:

Код: SELECT tovar.код_товара, tovar.название, tovar.модель, tovar.код_поставщика, tovar.размер, tovar.код_сезона, pol.пол, tovar.код_цвета, tovar.каблук, tovar.цена, tovar.модельный_год, tovar.дата_поступления FROM pol INNER JOIN tovar ON pol.код_пола = tovar.код_пола;
Автор: aalleexxaa
Дата сообщения: 13.12.2006 07:49
Yuk
еще раз огромное спасибки!
Автор: The okk
Дата сообщения: 13.12.2006 11:01
Не могу найти в object browser'е свойство ListBox'a, отвечающее за показ сетки. Не может же быть, что там сетка не включается!
Автор: mrdime
Дата сообщения: 13.12.2006 11:43
Господа,

Помогите найти ресурс, где бы можно было прочесть что-то про экспорт таблиц из Excel в Access с помощью VBA. Уж больно часто возникает эта задача, а документации по подобным вопросам в сети - никакой...

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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