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

» Excel VBA (часть 2)

Автор: automail
Дата сообщения: 25.05.2007 15:02
Помогите плиз ! Такая проблема:
использую групировку для сокрытия не нужных строк, создаю диапазоны защищаемых ячеек (чтоб не ломали формулы), защищаю книгу - на заданый диапазон спрашивает пароль на остальное посылает (так и должно быть!), НО команды группировки не работают (не разворачиваются плюсики...) !!!! Ладно поискал нашел VBA скрипт для обхода :

Private Sub Workbook_Open()
Dim iWorksheet As Worksheet
Application.ScreenUpdating = False
For Each iWorksheet In Me.Worksheets 'Workshees
iWorksheet.EnableOutlining = True
iWorksheet.Protect Password:="myPassword", UserInterfaceOnly:=True
Next
Application.ScreenUpdating = True
End Sub

( Файл с примером по адресу http://www.rapidshare.ru/291013 )

Ура заработало !!! Теперь делаю книгу общей и опять ж..... !! пишет ошибка VBA ........
Че не так ??? как обойти ???? Помогите сам не справлюсь !!!
Автор: alfer1979
Дата сообщения: 25.05.2007 23:41
Добрый день!
Нужна ваша помощь.
Имееться файл формата txt:
Иванов; 45,16; 54,13; 56,12
Петров; 5,16; 5.14; 46,12
и т.д.
Нужно перенести файл в Excel с разбивкой по ячейкам.Например:ячейка A2 - Иванов, B2 - 45,16 и т.д.
Большое спасибо за помощь!
Автор: AndVGri
Дата сообщения: 26.05.2007 04:23
alfer1979
А в чём проблема? Открываешь этот файл в Excel, в мастере импорта указываешь разделители ";" и " ", потом копируешь нужное по назначению
Если нужно программно, то пишешь макрос чтения файла, типа

Код:
Dim fNum as Integer, subStrs() As String, i As Long, sRead As String
'...
Open FileName For Input As #fNum
i = 1&
Do Until Eof(fNum)
Line Input #fNum, sRead
subStrs = Split(sRead, ";")
i = i + 1&
Cells(i, 1&).Value = Trim$(subStrs(0&))
'...
Loop
Close #fNum
Автор: alfer1979
Дата сообщения: 26.05.2007 10:28
AndVGri
А полный скрипт можно. Я пока не очень силен в VBA.
Что означает '... ?
Большое спасибо за помощь!
Автор: GFSGF
Дата сообщения: 26.05.2007 10:45
AndVGri

Добрый день. Вопрос такой. Можно ли системные часы установить на рабочем листе и чтобы они всегда работали.
Вот такой код не подойдёт? Range(“A1”).Value=Time если подойдёт то куда его вставить?
Автор: AndVGri
Дата сообщения: 26.05.2007 11:42
GFSGF
Встроенного таймера в Excel нет. Вот в Google по "timer in excel" нашёл там реализацию таймера средствами Excel. Посмотри сам никогда не пользовался ничем подобным
Excel Timer - let Excel perform periodical tasks!
P. S. GFSGF - тебя родители спасибо говорить за помощь не научили?

alfer1979

Цитата:
Что означает '... ?
пропущено, в силу аналогичности или второстепенности

Цитата:
А полный скрипт можно. Я пока не очень силен в VBA

Так тебе осталось 4 строчки дописать. F1 над элементами кода в VBA - прочтёшь - будешь сильнее
Автор: alfer1979
Дата сообщения: 26.05.2007 21:04
AndVGri
Спасибо большое всё получилось.
Ещё один вопросик
Имеються в Excel колонка с цифрами, необходимо раставить рядом в соседней колонки их номер начиная с максимального. Например:
45,60 2
46,10 1
41,15 4
42,45 3
и т.д.
Большое спасибо за помощь!
Автор: gyurza2000
Дата сообщения: 27.05.2007 00:19
Как сделать так что бы при закрытии(или при открытии) файла Excel содержимое определённых ячеек удалялось (автоматически, без нажатий на что либо)
Автор: AndVGri
Дата сообщения: 27.05.2007 02:27
gyurza2000
Пишешь в процедурах обработчиках событий книги Open/BeforeClose
Range("АдресаОпределённыхЯчеек").ClearContents

alfer1979
Например, так:

Код:
Dim i As Long, vBeginCol As Long, vOffset As Long

i = UsedRange.Row
'...
Do Until IsEmpty(Cells(vBeginCol, i).Value)
Cells(i, vBeginCol + 1&).Value = i - vOffset
i = i + 1&
Loop
Автор: GFSGF
Дата сообщения: 27.05.2007 07:18
AndVGri
Конечно же огромнейшее спасибо.Я извиняюсь.

Как то ты писал мне что если текст большой то изпользуй тэг [more].....[/more] .А что конкретно этот тэг делает.что то я так и не понял Спасибо


Добавлено:
AndVGri
Тэг такой [more] большой обьём текста [/more]

Добавлено:
AndVGri

Цитата:
[more]Большой объём текста[/more]

чт-то не могу тут эт тэг прписать.Вот вставил цитату

Добавлено:
AndVGri
короче не получается прописать
Автор: AndVGri
Дата сообщения: 27.05.2007 08:11
GFSGF
Прочитай FAQ ПО ТЕГУ MORE, или, для примера, найти пост, имеющий надпись "Подробнее" и нажми "редактировать" в строке на постом, чтобы посмотреть, как это всё организовано.
Прочие тэги в сообщениях
Автор: alfer1979
Дата сообщения: 27.05.2007 11:23
AndVGri
спасибо. Но у меня получилось только.пронумеровать строки, а мне надо найти максимальное число и там поставить 1, потом чуть меньшее и там 2 и т.д. до минимального
Автор: AndVGri
Дата сообщения: 27.05.2007 12:30
alfer1979
Э, а - сортировка - извини, недо читал

Код:
Dim vArray() As Double, i As Long, vOffset As Long
Dim vBeginCol As Long, vLastRow As Long, k As Long
Dim vChange As Double

'...
For i = UsedRange.Row To vLastRow
vArray(i - vOffset, 1&) = Cells(i, vColumn).Value
vArray(i - vOffset, 2&) = i 'индекс строки
Next i
'сортировка "пузырёк"
For i = 2& to vLastRow - vOffset
For k = i To 2& Step -1&
If vArray(k, 1&) > vArray(k - 1&, 1&) Then
vChange = vArray(k - 1&, 1&)
vArray(k - 1&, 1&) = vArray(k, 1&)
vArray(k - 1&, 1&) = vChange
'... аналогично переставляем индексы строк (по 2)
End If
Next k
Next i

For i = 1& to vLastRow - vOffset
Cells(CLng(vArray(i, 2&)) + vOffset, vColumn + 1&).Value = i
Next i
Автор: GFSGF
Дата сообщения: 27.05.2007 17:42
AndVGri
Так я теперь понял что это чисто для форума. А я то сначала понял тебя что это для написания кода в VBA,поэтому мне и непонятно было какую роль этот тег играет в VBA.

ну теперь всё понятно .Спасибо.
Автор: alfer1979
Дата сообщения: 27.05.2007 20:21
AndVGri
А попроще метода нету. А то у меня ничего не получаеться.
Что означает vOffset ?
Автор: gyurza2000
Дата сообщения: 27.05.2007 22:59

Цитата:
alfer1979
Например, так:

Код:

Dim i As Long, vBeginCol As Long, vOffset As Long

i = UsedRange.Row
'...
Do Until IsEmpty(Cells(vBeginCol, i).Value)
Cells(i, vBeginCol + 1&).Value = i - vOffset
i = i + 1&
Loop


Я не программаю ни в чём, если не сложно, чиркани код для конкретной задачи:
очищать при закрытии файла ячейки:
C1, E1:G1, I1:L1, A3:B13, D3:U13
Автор: AndVGri
Дата сообщения: 28.05.2007 01:00
alfer1979
vOffset - величина, которую нужно вычесть из номера строки, что бы получить номер первого индекса массива. Пусть 1 строка = 2, а первый индекс массива = 1, тогда vOffset = 1.
Проще?! Записываешь макрос сортировки по убыванию и используешь предыдущий код для нумерации.

gyurza2000

Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
wks.Range("C1,E1:G1,I1:L1,A3:B13,D3:U13").ClearContents
Next wks
End Sub
Автор: automail
Дата сообщения: 28.05.2007 07:02
Я дико извиняюсь, но ни кто мне не помог, обращаюсь еще раз

Цитата:
Помогите плиз ! Такая проблема:
использую групировку для сокрытия не нужных строк, создаю диапазоны защищаемых ячеек (чтоб не ломали формулы), защищаю книгу - на заданый диапазон спрашивает пароль на остальное посылает (так и должно быть!), НО команды группировки не работают (не разворачиваются плюсики...) !!!! Ладно поискал нашел VBA скрипт для обхода :

Private Sub Workbook_Open()
Dim iWorksheet As Worksheet
Application.ScreenUpdating = False
For Each iWorksheet In Me.Worksheets 'Workshees
iWorksheet.EnableOutlining = True
iWorksheet.Protect Password:="myPassword", UserInterfaceOnly:=True
Next
Application.ScreenUpdating = True
End Sub

( Файл с примером по адресу http://www.rapidshare.ru/291013 )

Ура заработало !!! Теперь делаю книгу общей и опять ж..... !! пишет ошибка VBA ........
Че не так ??? как обойти ????

Спецы по VBA где вы ?? помогите не справляюсь !!!
Автор: AndVGri
Дата сообщения: 28.05.2007 07:25
automail

Цитата:
на заданый диапазон спрашивает пароль

На какой, у тебя по моему, все ячейки защищены - куда должен вводить данные пользователь? Да и об задаче поподробнее - что-то я туповат, телепатия сегодня не работает
Автор: automail
Дата сообщения: 28.05.2007 07:45
AndVGri
Реальная книга другая с десяток мегабайт, а это просто пример с групировкой, найденый в инете (на его базе отрабатываю вопрос), там нет разрешения диапазона, залочено все, но если создать будет работать.
Разреши в нем совместный доступ и все поймеш ....

Если кратко мне надо чтоб группировка работала в защищенной книге с совместным доступом !!!
Автор: AndVGri
Дата сообщения: 28.05.2007 08:01
automail
Блин, у тебя свойства всех ячеек на "Лист1" стоят в защищённая, то есть пользователь не сможет вводить туда данные для твоих формул. Если же снять защиту по паролю myPassowd, то любая ячейка будет доступна для редактирования. Вот я и спрашиваю о цели

Цитата:
Разреши в нем совместный доступ и все поймеш ....

А это моя проблема - разбираться, чтобы попытаться помочь?
Автор: automail
Дата сообщения: 28.05.2007 09:45
AndVGri
Че то я не понял .... снимаю защиту листа, устанавливаю защиту диапазона (по другому паролю, напр. "1"), устанавливаю защиту листа и все работает ...........
Видимо мы друг друга не понимаем ......

Цитата:
надо чтоб группировка работала в защищенной книге с совместным доступом !!!

Я тут почитал что Protect вроде не работает с совместным доступом, че делать ????
Автор: GFSGF
Дата сообщения: 28.05.2007 09:49
AndVGri

Добрый день. Вопрос такой.С помощью кода Application.Dialogs(xlDialogPrint).Show
открываю стандартный диалог на печать. Как привязать мне к кнопкам “OK”и “ОТМЕНА” стандартного диалога ещё и свой код. Заранее Спасибо.
Автор: AndVGri
Дата сообщения: 28.05.2007 10:11
GFSGF
Стандартно

Код:
Public Sub PrintSwitch()
If Application.Dialogs(xlDialogPrint).Show() Then
MsgBox "Print Ok"
Else
MsgBox "Print Cancel"
End If
End Sub
Автор: automail
Дата сообщения: 28.05.2007 11:08
AndVGri
Так как может Protect работаеть с совместным доступом ??? Что можно вместо него использовать ???
Неужели ни кто не делал группировку в защищенной книге с совместным доступом ??? Я что один такой ???
Автор: AndVGri
Дата сообщения: 28.05.2007 12:23
automail

Цитата:
Неужели ни кто не делал группировку в защищенной книге с совместным доступом ?

Нет, не делал. Я вообще, группировку делу только над вычислениями.

Цитата:
Так как может Protect работаеть с совместным доступом

Получается, что нет.
Автор: automail
Дата сообщения: 28.05.2007 14:51
AndVGri
А есть какие нибудь другие методы кроме Protect ?

Цитата:
Я вообще, группировку делу только над вычислениями.

это как ??

Должен быть способ обойти эту лажу !!!!! Надо искать !!! по зарез млять надо .........
Автор: AndVGri
Дата сообщения: 28.05.2007 15:11
automail
Это когда некоторые поля в таблице являются вычисляемыми по данным предшествующих полей. А обойти - ищи, найдёшь - поделись. Вопрос, конечно интересный, только времени нет ковырять.. если это ещё и возможно.
Автор: GFSGF
Дата сообщения: 28.05.2007 19:01

Цитата:

Public Sub PrintSwitch()
If Application.Dialogs(xlDialogPrint).Show() Then
MsgBox "Print Ok"
Else
MsgBox "Print Cancel"
End If
End Sub

AndVGri
Я извиняюсь за тупой вопрос, но я попробовал этот код в качестве примера и что-то ничего не происходит и опять же не совсем понятно как использовать кнопки на
стандартном диалоге. Мне нужно чтобы кроме печати выполнялся ещё и мой код.
Спасибо

Автор: gyurza2000
Дата сообщения: 28.05.2007 19:13

Цитата:
AndVGri


Цитата:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
wks.Range("C1,E1:G1,I1:L1,A3:B13,D3:U13").ClearContents
Next wks
End Sub


А как выглядит тоже самое, но что б выполнялось только на первом листе книги, а не на всех листах?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

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


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