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

» Excel VBA (часть 3)

Автор: Drazhar
Дата сообщения: 22.04.2010 16:22
Levitant
режим доступа то узнать не проблема, но тебе же нужен не он, а текущее состояние файла.
А что тебе мешает после проверки снова обработчик включить? Просто имхо самый простой и безголовняковый вариант
Автор: sivyy
Дата сообщения: 24.04.2010 16:32
Помогите пожалуйста скриптом или хотя б советом.

Проблема такая уже была здесь http://forum.ru-board.com:9000/topic.cgi?forum=33&topic=8273&start=1480 но со временем с рапиды все удалили

В папке лежал файл со списком договоров, с гиперссылками на их отсканированные версии. В какой-то момент (непонятно отчего) все ссылки изменились
с ".\Имя_папки\имя файла" на ../../../Documents%20and%20Settings/witalian/Local%20Settings/Temporary%20Internet%20Files/Content.MSO/MSE/...Имя_папки\имя файла.
Как исправить все ссылки обратно? Их несколько тысяч, вручную, сами понимаете. Мож какой макрос или типа того?.

По сути операция несложная- в адресе каждой гиперссылки отрезать кусок определенного образца, и вставить другой Подскажите кто что сможет!


http://rapidshare.com/files/379605118/dogovor.exe.html
Файл с примером. Первые шесть строчек- неправильные гиперссылки (на папку documents and settings) 7-8 для примера- как должно быть. Т.е. файлы на которые ссылаешься лежат в папке с самим екселевским файлом но в подпапках.
Автор: Hugo121
Дата сообщения: 24.04.2010 20:57
Я тут немного подредактировал, пока никто не видел

Код: Option Explicit

Sub tt()
Dim cc As Range
For Each cc In Selection
If cc.Hyperlinks.Count > 0 Then
cc.Hyperlinks(1).Address = Replace(cc.Hyperlinks(1).Address, "../../../Documents and Settings/witalian/Local Settings/Temporary Internet Files/Content.MSO/MSE/Закупка 1,07,09_ole", "договора")
cc.Hyperlinks(1).Address = Replace(cc.Hyperlinks(1).Address, "/", "\")
End If
Next
End Sub
Автор: QQ1
Дата сообщения: 24.04.2010 22:44
Добрый день, коллеги.

Посоветуйте, пожалуйста, по такому вопросу:

У меня есть excel-файл, в ячейках А1, А2, ..., Аn (т.е. в столбик) содержится информация такого вида:
2006.06.01,05:30,84.90,84.90,84.80,84.90,16 - это содержимое ячейки А1

Подскажите, пожалуйста, как мне написать макрос, чтобы данные
2006.06.01 05:30 84.90 84.90 84.90 84.90 16
располагались в отдельных ячейках A1, B1, C1, D1, E1, F1, G1?

То есть, как мне элементы строки, где разделителем является запятая, расположить в отдельных ячейках?

Заранее большое спасибо.
Автор: Hugo121
Дата сообщения: 24.04.2010 22:49
Включаете запись макроса, производите вручную Данные-Текст по столбцам, разделитель-запятая. Получаете код:

Код: Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 24.04.2010 ()
'

'
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1))
Range("A1").Select
End Sub
Автор: QQ1
Дата сообщения: 24.04.2010 23:02
Hugo121, спасибо вам большое.

Когда у вас будет время и возможность, посоветуйте, пожалуйста, как содержимому 3, 4, 5, 6, и 7 ячеек назначить формат числовых значений и заменить в них точку (".") на запятую (",").

Дело в том, что в дальнейшем необходимо будет с этими данными производить алгебраические расчеты.
Автор: Hugo121
Дата сообщения: 24.04.2010 23:13
Ну так и это можно вручную проделать и записать макрос (если конечно есть цель автоматизировать, а иначе зачем?). И в свете других ответов новая редакция:

Код: Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 24.04.2010
'

'
[A:A].TextToColumns [A1], xlDelimited, Comma:=True

Columns("C:G").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Selection.NumberFormat = "0.00"
End Sub
Автор: QQ1
Дата сообщения: 24.04.2010 23:32
Hugo121, спасибо вам огромное!!!
Выручили по-настоящему!!!
Автор: Ivanus8147rus
Дата сообщения: 27.04.2010 11:51
Господа, помогите пожалуйста. Задачка звучит так:
Написать код, который генерирует матрицу размерность 4*4 со случайными элементами (целочисленные, всего 2 знака), чтобы на главной диагонали стояли одни нули.

0 * * *
* 0 * *
* * 0 *
* * * 0

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

Добавлено:
АП как бы))
Был бы признателен за как можно более скорое решение проблемы)
Автор: Hugo121
Дата сообщения: 27.04.2010 15:32

Код: znac = Int(Rnd * 100) + 1 'значения в интервале 1-100
Автор: Frantishek
Дата сообщения: 28.04.2010 02:15
Заранее извиняюсь, что немного не по теме, в ветке FAQ не помогли, а тут спецов побольше..
Помогите решить, как такое может быть...
Есть две ячейки с формулами, одна ссылается на другую и выдает ошибку деления на ноль, при этом в первой ячейке результатами вычисления являются значения отличные от нуля. Когда ставлю эти же значения вручную убивая формулу ошибка сразу пропадает Т.е. как такое возможно (и как исправить!), что визуально отображается одно и тоже, но в одном случае это ошибка (т.к. считается по формуле), подозреваю проблему в кодировках..
Автор: Hugo121
Дата сообщения: 28.04.2010 08:22
Может это "визуальное" является строкой, а не числом? Умножьте его на 1. Или лучше "--":

Код: =--(PERSONAL.XLS!Substring(B36;;3))
Автор: vaulin
Дата сообщения: 28.04.2010 11:18
Frantishek
нужно смотреть конктретнее, возможно, это несовпадение типов данных или еще что-то

У меня вопрос. Я использую форму vba, при нажатии на кнопку формы вызывается подпрограмма некоего алгоритма, результаты расчетов хочу вывести на форму, но не могу это сделать из этой подпрограммы, т.к. объекты Label не видны из подпрограммы. Как сделать объекты формы видимыми в вызываемой подпрограмме?
Автор: Drazhar
Дата сообщения: 28.04.2010 12:20
vaulin
то есть UserForm1.Label1 не видно?
Автор: mflash123
Дата сообщения: 28.04.2010 12:22
битый час бьюсь...
нужно просто из икселя через макрос,активировать документ ворда. И чтобы документ ворда закрылся

With appWD
namedocument = "NAME.DOC"
.ActiveDocument.SaveAs Filename:=namedocument, FileFormat:= _
wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
Windows(namedocument).Activate
ActiveWorkbook.Close
End With

Ошибка ut of range %)
Автор: vaulin
Дата сообщения: 28.04.2010 12:24

Цитата:
то есть UserForm1.Label1 не видно?

Спасибо, Drazhar
Я пробовал вызывать Label.Caption без "UserForm1"
Теперь получается.
Автор: Drazhar
Дата сообщения: 28.04.2010 12:31
mflash123
полностью весь кусок можно(с определением word.application)
Автор: mflash123
Дата сообщения: 28.04.2010 12:40
ну как,можно непосрдественно фрагмент кода?
Автор: Drazhar
Дата сообщения: 28.04.2010 12:42
Можно. Его и жду
Автор: vaulin
Дата сообщения: 28.04.2010 12:44
Drazhar
теперь перенес следующий цикл в эту подпрограмму:

Код: For i = 1 To 9
Me.Controls("Label" & i).Caption = ""
Next
Автор: Drazhar
Дата сообщения: 28.04.2010 12:59
mflash123
Если я правильно понял, то

Код: Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim i As Integer
Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
Set wrdDoc = wrdApp.Documents.Add ' create a new document
' or
'appwd = CreateObject("word.application")
With wrdDoc
namedocument = "NAME.DOC"
.SaveAs Filename:=namedocument, FileFormat:= _
wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
.Close
End With
wrdApp.Quit
Автор: Frantishek
Дата сообщения: 28.04.2010 13:21
Hugo121
vaulin
http://slil.ru/29047737
Посмотрите пожалуйста пример с ошибкой. Спасибо!
Автор: Drazhar
Дата сообщения: 28.04.2010 13:26
Frantishek
Уберите кавычки в формуле вокруг 1 и будет счастье

Добавлено:
То есть
=ЕСЛИ($C$3=1;ЕСЛИ('1'!B5=0;'1'!B5+1;'1'!B5);1)
вместо
=ЕСЛИ($C$3=1;ЕСЛИ('1'!B5=0;'1'!B5+1;'1'!B5);"1")
Автор: Frantishek
Дата сообщения: 28.04.2010 13:38
Drazhar
Спасибо!!!))
Автор: Drazhar
Дата сообщения: 28.04.2010 14:13
И все-же. Кто-нить в курсе, есть ли Collection по переменным модуля. Очень бы пригодился к error handler
Автор: vlth
Дата сообщения: 28.04.2010 16:27
Drazhar

Цитата:
Вот только как подключиться к уже имеющемуся application я не знаю(((


Код: Set wrdApp = GetObject(,"Word.Application")
Автор: vaulin
Дата сообщения: 29.04.2010 06:56

Цитата:
есть ли Collection по переменным модуля

а использование выражений типа Me.Controls("UserForm1.Label" & i).Caption не эквивалентно использованию коллекций?
Автор: Drazhar
Дата сообщения: 29.04.2010 09:44
vlth
Круто. Буду знать

Добавлено:
vaulin
Ну вообще эквивалентно/ Но чем это правда помочь может, я не представляю.
Автор: NJCorp
Дата сообщения: 29.04.2010 13:16
Народ, помогите... достал меня етот кусочек кода...
Вибрасивает ерор91, немогу понять что не туда...


Код: Private Sub knOK_Click()
Dim rg As Range
If chekbox.Value Then

Set rg = Sheets("Form").[c:c].Cells.Find(OsKrt_klass.Text, , xlValues, xlWhole)
If Not rg Is Nothing Then
strt = rg.Address
Do
Zapovn (Sheets("Form").Range(rg.Address).Offset(0, 4).Value)
Set rg = Sheets("Form").[c:c].Cells.FindNext(rg)
Loop While Not rg Is Nothing And rg.Address <> strt
End If
Else

End If
End Sub
Автор: vaulin
Дата сообщения: 29.04.2010 13:47
NJCorp
трудно разобраться. попробуй упростить эту подпрограмму по максимуму, где-нибудь в отдельном проекте, до тех пор, пока ошибка будет еще появляться.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

Предыдущая тема: VS 2010


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