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

» Excel VBA (часть 2)

Автор: Roka
Дата сообщения: 29.09.2009 08:58
ZlydenGL
а тупо создать копию файла и ее заархивировать не прокатит?
Автор: ZlydenGL
Дата сообщения: 29.09.2009 11:48
Roka, а чем создавать будешь? SaveAs тут же откроет новую книгу.

Тебе нужно бэкапить с макросами или только данные?
Автор: Roka
Дата сообщения: 29.09.2009 16:59
ZlydenGL

Цитата:
Roka, а чем создавать будешь? SaveAs тут же откроет новую книгу.

Тебе нужно бэкапить с макросами или только данные?

Со всем фаршем надо бэкапить.
Вот думаю, а чего если вместо ВинРАРа, заюзать встроенный ZIP в Windows, он вроде как открытый файл нормально в архив отправляет, да и Рар установленный на всех машинах иметь не нужно.
Автор: ANI4KA
Дата сообщения: 30.09.2009 21:04
Я учусь вовсе не на программиста, но Программирование нам все таки поставили. Меня интересуют ниже перечисленные вопросы Пожалуйста, подскажите может какую то ссылку или с чего мне начать их решать???? Буду очень благодарна за помощь.
1.    Использование и объявление переменных в VBA MS Excel
2.    Написать программу, которая вычисляет среднее геометрическое двух чисел, вводимых с клавиатуры
3.    Написать программу, которая записывает в ячейки А1-А100 члены гармонического ряда
Автор: visual73
Дата сообщения: 01.10.2009 07:35
ANI4KA
раз поставили, значит надо учить Это не марксизм-ленинизм, и изучается легче )))
Поищи книжку Уокенбаха - самая доходчивая и очень полезная.
Автор: Vadim SVN
Дата сообщения: 02.10.2009 14:37
Добрый день.

Прошу помощи в вопросе массового изменения гиперссылок в документах.

У пользователя есть несколько десятков документов Excel с ссылками на другие документы, находящиеся на расшаренных ресурсах.
В документах по несколько листов, ссылок море вида (как на картинке):
file:///\\ИП_сервера\...
либо
\\имя_сервера\...



Необходимо изменить ИП и имя сервера на другое (а то этот пользователь нам переезд сервера задерживает)

Находил по поиску ссылку с подобным скриптом, но на рапиде она уже померла
К сожалению, в vba вообще не силен.
Спасибо.
Автор: Mishel971
Дата сообщения: 05.10.2009 00:54
Всем доброе время суток!

Есть такой вопрос:
Как програмно из активной книги Excel определить (если возможно) адрес (номер) строки активной ячейки в другой (деактивированной) открытой книги Excel ?
Код для активной книги
intI=Workbooks("Другая книга").ActiveSheet.ActiveCell.Row
не работает.
Автор: ZlydenGL
Дата сообщения: 05.10.2009 09:39
Mishel971, если книга в ФОНЕ, у нее не может быть ActiveSheet. Промежуточное решение может быть таким:


Код: Application.ScreenUpdating = False ' Отключаем "мерцание" окна
Workbooks("Другая книга").Activate ' Активируем нужную книгу
intI=Workbooks("Другая книга").ActiveSheet.ActiveCell.Row ' Нужное свойство становится доступным
ThisWorkbook.Activate ' Возвращаем указатель текущему приложению (для избежания различных глюков)
Application.ScreenUpdating = True ' Возвращаем режим обновления экрана при изменении
Автор: ANI4KA
Дата сообщения: 05.10.2009 23:00
visual73

спасибо большое, книга действительно очень хорошая............
Автор: mp3exchanger
Дата сообщения: 05.10.2009 23:06
В шапке примера нет, поэтому пишу вопрос тут. Помогите написать макрос, который создаёт обычный текстовый файл (не Word) и сохраняет в нём значения шести ячеек.
Автор: ferias
Дата сообщения: 06.10.2009 02:04
Возможно это не на совсем правильно. У меня работает.
[more=Код для кнопки]
Sub ExportText()
Dim i As Long, h As String, s As Long, j as Long
Open "C:\Users\vasyl\Desktop\primer.txt" For Output As #1 ' Открытие файла для сохранения, желательно изменить путь "C:\Users\vasyl\Desktop\" на желаемый
s = 4 'номер столца
j = 6 'количество строк
For i = 1 To j
h = Cells(i, s).Value
Print #1, h; ' Запись содержимого переменной "h"
If i <> j Then Print #1, ' Начнем новую строку в файле
Next i
Close #1 ' Не забываем закрыть файл
End Sub
[/more]
Автор: SAS888
Дата сообщения: 06.10.2009 06:02
mp3exchanger
Проще это сделать с помощью объекта FileSystemObject. Например, так:

Код: Sub Main()
Dim ts, i As Long, j As Long: j = 4: Application.ScreenUpdating = False
Set ts = CreateObject("Scripting.FileSystemObject").OpenTextFile("D:\Temp\result.txt", 2, True)
For i = 1 To 6: ts.Write Cells(i, j) & Chr(10): Next: ts.Close
End Sub
Автор: jSergey
Дата сообщения: 06.10.2009 06:07
Вопрос: можно ли сделать, чтобы при сортировке ячеек, содержащих текстовую информацию, пустые ячейки оказывались вверху, а не внизу? Или лучше написать собственную прцедуру сортировки? Excel из Office 2003.
Автор: mp3exchanger
Дата сообщения: 06.10.2009 07:21
ferias, SAS888, спасибо вам большое. Оба варианта прекрасно работают.
Раз всё так просто, может можно реализовать и остальное...

Этот .xls файл будет открываться батником. Далее надо одной кнопкой (одним макросом) сделать следующее:
1. Скопировать в определённую ячейку текстовую строку из буфера (если есть возможнось, то проверить, что вставляемая строка содержит определённое слово и в противном случае выдать ошибку, но эта проверка необязательна);
2. Создать текстовый файл (это вы уже реализовали);
3. Скопировать несколько ячеек (идущие одна за одной столбцом, всего 81) в буфер. Это что-то вроде 2 пункта, только сохранить надо не в файле а в буфере;
4. Сохранить этот открытый файл .xls (обязательно) и закрыть его (опционально).

Таким образом далее продолжится выполняться батник. В идеале нужно чтобы батник запускал .xls, а в нём автоматом выполнялся макрос (все четыре пункта выше, можно без автозакрытия файла) и передавал управление батнику вновь, т.е. полностью автоматически. Возможно ли такое?
Автор: SIgor33
Дата сообщения: 06.10.2009 08:09
Возник такой вопрос
Скажите как сделать на vba для excel склонировать несколько раз один столбец в книге приэтом столбец может быть составным например
_продажа_
2008|2009
|
|
А то я несилен в vba
Автор: Peen
Дата сообщения: 06.10.2009 16:28

Проблема с реализацией задумки.
Есть ф-ция добавляющая строки в список,по какому то определенному критерию.В этих строках содержатся ФИО - номер - ....- деньги
Все представляется в html для выравнивания в колонках.
Задача состоит в сортьировке этого списка по ФИО
Загнать в массив и отсортировать

Ниже фун-ция добавления:

Function general(namemanager As String, res As Double, level As Integer, samelevel As Integer) As Double
Dim a As Integer
Dim B As Integer
Dim z As Double
Dim indexstart As Integer
Dim indexnumb As Integer
Dim flag As Integer
Dim f As Integer
flag = 0

a = estmanager(namemanager)
If a = 0 Then
B = indexemployee(namemanager)
general = 0
Else
indexstart = indexmanager(namemanager)
indexnumb = nummanager(namemanager)
For i = indexstart To (indexstart + indexnumb - 1)
If namemanager = Cells(i, 7) Then
flag = 1
Else: flag = 0
M = 0
End If
If flag <> 1 Then

If namemanager <> Cells(i, 7) Then
z = 0
W = infmanager(Cells(i, 7), z)
f = M
zatratimanager = c
End If

If level >= samelevel Then GoTo jump
strbody = strbody & "<tr><td>" & Cells(i, 7) & "</td><td>" & Cells(i, 11) & "</td><td>" & level + 1 & "</td><td>" & Cells(i, 25) & "$" & "</td><td>" & f & "</td><td>" & W & "$" & "</td></tr>"
' strbody = strbody & Cells(i, 7) & Cells(i, 11) & level + 1 & Cells(i, 25) & "$" & f & W & "$" & vbNewLine


jump:

kol = kol + 1


'End If
res = res + Cells(i, 25)
general = general(Cells(i, 7), res, level + 1, samelevel) + res
End If
Next i
End If
general = res
End Function
Автор: MORB_id
Дата сообщения: 07.10.2009 08:53
Можно ли отправить e-mail средствами VBA, или придётся использовать WSH?
Автор: visual73
Дата сообщения: 07.10.2009 10:35
Возможно ли получить доступ к исходному коду COM-надстройки Excel?

MORB_id
можно с помощью VBA получить доступ к Outlook и отправить письмо.


Код: Sub Pismo()
Dim MyOutlook As Outlook.Application
Dim Мыло As Outlook.MailItem

Set MyOutlook = New Outlook.Application
Set Мыло = MyOutlook.CreateItem(olMailItem)

With Мыло
.To = "dedushka@derevnia.ru"
.Subject = "Здарова Дед!"
.Body = "Забери меня отсюдыва дедушка Константин Макарыч!"
.Send
End With

End Sub
Автор: InSe0F
Дата сообщения: 07.10.2009 21:28
Hi a11.
Столкнулся с небольшим траблом... Нужен простецкий скриптик
Вбивается большое количество емайлов (копированием) но они не превращаются в гиперссылки,
нужен скриптик чтобы во всех выделенных ячейках забивались гиперссылки на данные в них
Автор: SAS888
Дата сообщения: 08.10.2009 07:15
mp3exchanger
Посмотрите Этот пример.
При открытии файла, запускается макрос, который анализирует буфер обмена, и если находит в нем слово, определенное переменной "text" в макросе, то данные из буфера обмена копируются в ячейку "A1", по указанному пути создается текстовый файл, содержащий значения ячеек "D1:D81", и эти же значения помещаются в буфер обмена. Приложение закрывается. Если же искомого слова в буфере нет, то ничего этого не происходит, появляется сообщение и файл остается открытым.
"Заточите" под себя. При создании своего файла, не забудьте подключить библиотеку "Microsoft Forms 2.0 Object Library".
Автор: mp3exchanger
Дата сообщения: 08.10.2009 12:02
SAS888, спасибо, макрос под себя настроил.
Автор: InSe0F
Дата сообщения: 08.10.2009 22:59
может быть тривиальная задача.. но как решить, линканите куда надо плз

http://narod.ru/disk/13948226000/Archive.rar.html
нужно чтобы при вводе нового значения на Лист1 - автоматически расширялся список на листе2
Сказали без макросов не получитьсо(
Автор: SAS888
Дата сообщения: 09.10.2009 04:21
InSe0F

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

Можно так:

Код: Dim Cell As Range: Application.ScreenUpdating = False: On Error Resume Next
For Each Cell In Selection
ActiveSheet.Hyperlinks.Add Anchor:=Cell, Address:="mailto:" & Cell.Value, TextToDisplay:=Cell.Value
Next
Автор: alin
Дата сообщения: 09.10.2009 09:04
Возможно ли создать график отпусков для сотрудников (людей много и распределять вручную хлопотно), чтобы автоматически формировался отпуск по сезонам. Если человек был весной в этот год, то на следующий год летом, через 2 года осенью, через 3 года зимой?
Заранее благодарен!
PS: Возможно есть другие, более удобные варианты, дабы не обидеть коллег?
Автор: nk313
Дата сообщения: 09.10.2009 10:40
Помогите решить задачку:
Таблица с тремя столбцами
первый столбец:суть претензии(недостача или излишки)
второй столбец:сумма(числовое значение)
третий столбец:результат(да или нет)

необходимо автоматически вычислять сумму подтвержденных излишков и подтвержденной недостачи
Автор: MORB_id
Дата сообщения: 09.10.2009 10:43
К сожелению, не знаю, почему отправка электронной почты в VBA не работает, пришлось писать макрос на VBA для того, чтобы вывести список всех e-mail'ов в текстовый файл, и на C#'е ваять программу для отправки электронной почты, потому что нормально у меня не один из двух примеров не заработал.
Автор: visual73
Дата сообщения: 09.10.2009 10:49
MORB_id
Ты просто не тем концом вставляешь Мой пример прекрасно отправил моё письмо на деревню дедушке. Внимательно читай что я написал и у тебя всё получится. Если уж ты пишешь на си, то и на vba не составит труда разобраться. Пример рабочий!

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

Код:
Function Отпуск(Номер)
ГодКварт = Year(Date) / 4
ГодКварт = ГодКварт - Fix(ГодКварт)
Номер = Номер / 4 + 0.75
Распис = Номер - ГодКварт
Распис = Распис - Fix(Распис)
Select Case Распис
Case 0.75
Отпуск = "зима"
Case 0.5
Отпуск = "весна"
Case 0.25
Отпуск = "лето"
Case 0
Отпуск = "осень"
End Select
End Function
Автор: Peen
Дата сообщения: 09.10.2009 13:21
Никто не в курсе как отсортировать список по имени???


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

Ниже фун-ция добавления:

Function general(namemanager As String, res As Double, level As Integer, samelevel As Integer) As Double
Dim a As Integer
Dim B As Integer
Dim z As Double
Dim indexstart As Integer
Dim indexnumb As Integer
Dim flag As Integer
Dim f As Integer
flag = 0

a = estmanager(namemanager)
If a = 0 Then
B = indexemployee(namemanager)
general = 0
Else
indexstart = indexmanager(namemanager)
indexnumb = nummanager(namemanager)
For i = indexstart To (indexstart + indexnumb - 1)
If namemanager = Cells(i, 7) Then
flag = 1
Else: flag = 0
M = 0
End If
If flag <> 1 Then

If namemanager <> Cells(i, 7) Then
z = 0
W = infmanager(Cells(i, 7), z)
f = M
zatratimanager = c
End If

If level >= samelevel Then GoTo jump
strbody = strbody & "<tr><td>" & Cells(i, 7) & "</td><td>" & Cells(i, 11) & "</td><td>" & level + 1 & "</td><td>" & Cells(i, 25) & "$" & "</td><td>" & f & "</td><td>" & W & "$" & "</td></tr>"
' strbody = strbody & Cells(i, 7) & Cells(i, 11) & level + 1 & Cells(i, 25) & "$" & f & W & "$" & vbNewLine


jump:

kol = kol + 1


'End If
res = res + Cells(i, 25)
general = general(Cells(i, 7), res, level + 1, samelevel) + res
End If
Next i
End If
general = res
End Function
Автор: visual73
Дата сообщения: 09.10.2009 14:53
Peen
Тут ведь как, нужно обязательно пятнадцать раз написать в тему, что бы наконец то обратили внимание и сделали )))

Автор: Mishel971
Дата сообщения: 10.10.2009 13:51
ZlydenGL
ZlydenGL спасибо за отклик !
Проверил. Код

intI=Workbooks("Другая книга").ActiveSheet.ActiveCell.Row ' Нужное свойство становится доступным

не работает и при

Workbooks("Другая книга").Activate ' Активируем нужную книгу

Работает так:
intI=Workbooks("Другая книга").ActiveSheet.Cells(1,1).Value ,

однако необходимо ещё записать в "Другая книга" такой код:

Cells(1,1).Value=ActiveCell.Row

т. е. для передачи значения строки активной ячейки используется ячейка на листе.
Использование ячейки листа не заметно для пользователя.
Вопрос может быть таким - как передать значения переменной, например типа Single, Integer, из одной книги Excel в другую, не используя объект Cells ? Приблизительно так:

intI=Workbooks("Другая книга").ActiveSheet.Объект.Value

Может ещё возможно в первом коде что-то изменитть ?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

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


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