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

» Excel VBA (часть 2)

Автор: SERGE_BLIZNUK
Дата сообщения: 26.07.2007 18:49
Gavrik

Цитата:
А что ты подразумеваешь под разметкой ?

Меню "Файл" - Область печати -Задать/Убрать
а увидеть разметку можно на предварительном просмотре, если выбрать разметка страницы (там синенькие пунктирные линии - границы листов)...
Автор: Gavrik
Дата сообщения: 26.07.2007 20:44
SERGE_BLIZNUK

О!! вот тут то собака и порылась. Если область непрерывна то все ок.
А если в средине есть скрытые строки то в область для печати попадает только шапка. Надо одновременно со скрытием задавать принудительно область печати.
Спасибо всем за подсказку
Автор: dummy84
Дата сообщения: 27.07.2007 11:52
добрый день, я вот мучался со своим циклом по удалению строк с нулем ина конецто догнал что не так должно быть

Цитата:
For j = 2 To n
If Cells(j, 7).Value = 0 Then Rows(j).Delete
Next j

а приблизительно вот так
For j = n To 2 Step -1
If Cells(j, 7).Value = 0 Then Rows(j).Delete
Next j
и тогда все получаеться.
Так что если долго мучаться что-нибуть получиться
Автор: vasiliy74
Дата сообщения: 27.07.2007 14:30
а разве не лзя использовать цикл в самописной функции for each?
пишу функцию со входящими данными в виде стоблбцов ячек и они должны перебираться.... так вот и подумал использовать эту а он ругается..

Добавлено:
нет сорри чего непонятное было просто each клеилась к for непонятно... но вроде прошло, только моя функция не то считает ка ей дебаг сделать и посмотреть?
Автор: vasiliy74
Дата сообщения: 27.07.2007 21:49
нашёл как делать дебаг незнаю правильно или нет, но работает, ф9 и вводишь её в ячейку
Автор: SERGE_BLIZNUK
Дата сообщения: 28.07.2007 04:15
Doctor_Livsi
Цитата:
Нужно получить при обращении к Картинке, в частности jpg , размер картинки, а имеено Height & Width

а поясните, пожалуйста, что означает конкретно фраза "при обращении к Картинке"?
Как это выглядит в коде на VBA? И какая задача вообще стоит? Есть имя файла JPG, нужно узнать высоту и ширину, чтобы указать при загрузке картинки? Или что надо то?


Добавлено:
Вот здесь - http://vbnet.ru/subscribe/showsubscribe.asp?id=25
нашёл [more=Определение типа рисунка и его размеров]

Определение типа рисунка и его размеров

По материалам сайта VBcode.FAQ
Данный пример позволяет узнать такие параметры файла рисунка в формате GIF или JPG как: тип картинки, размер по ширине и размер по высоте
Private Type ThePicInfo
Type As String
Width As Long
Height As Long
End Type

Private Function CheckPicSpecs(TheFile) As ThePicInfo
Dim TheContent, TheImageInfo As ThePicInfo, TheVar, TheFreeFile
TheFreeFile = FreeFile
Open TheFile For Binary As TheFreeFile
TheContent = Input(10, TheFreeFile)
Close TheFreeFile
If Mid(TheContent, 7, 4) = "JFIF" Then
TheImageInfo.Type = "JPG"
Open TheFile For Binary As TheFreeFile
TheContent = Input(167, TheFreeFile)
Close TheFreeFile
TheImageInfo.Height = Asc(Mid(TheContent, 165, 1)) + 256 * Asc(Mid(TheContent, 164, 1))
TheImageInfo.Width = Asc(Mid(TheContent, 167, 1)) + 256 * Asc(Mid(TheContent, 166, 1))
End If
If Mid(TheContent, 1, 3) = "GIF" Then
TheImageInfo.Type = "GIF"
TheImageInfo.Width = Asc(Mid(TheContent, 7, 1)) + 256 * Asc(Mid(TheContent, 8, 1))
TheImageInfo.Height = Asc(Mid(TheContent, 9, 1)) + 256 * Asc(Mid(TheContent, 10, 1))
End If
CheckPicSpecs = TheImageInfo
End Function

Private Sub Command1_Click()
Dim a As ThePicInfo
'в качестве параметра функции CheckPicSpecs установите путь к вашей картинке
a = CheckPicSpecs("D:\garbage\way2house.gif")
MsgBox a.Type
MsgBox a.Width
MsgBox a.Height
End Sub
[/more]
пойдёт?
Автор: LITMASTER
Дата сообщения: 29.07.2007 17:29
подскажите, пожалуйста, у меня такая проблема:имеется файл EXCEL c макросами.
Где в файле находится формула?
Автор: SERGE_BLIZNUK
Дата сообщения: 29.07.2007 19:03
LITMASTER
боюсь, что Вам никто не ответит... Потому что никто не поймёт, ЧТО Вы хотели узнать?!!!

Какая именно формула?!! И при чём здесь макросы?
Ответ - "формула находится внутри", Вас, очевидно, не удовлетворит?... ;-))))
Автор: dummy84
Дата сообщения: 29.07.2007 21:23
LITMASTER
я думаю вам просто следует открыть редактор alt+F11 там наверное и находится то что вы называете формулой, хотя может вам надо что то другое.

У меня есть вопрос кто то знает как например найти на листе непрерывный диапазон который начинается не в ячейке А1

вот так я находил последнюю строку и столбец,
LastRow = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row

LastColumn = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
тоесть нижний правый угол диапазона у меня есть а вот верхний левый.... помогите плиз
Автор: nick7inc
Дата сообщения: 30.07.2007 11:46
LITMASTER

Цитата:
Где в файле находится формула?

Скорее всего среди модулей книги (смотрите редактор VisualBasic, воспользуйтесь поиском), если вы имеете ввиду формулу, которую в ячейку пишут. Но, вполе возможно, она находится в каком-нибудь из AddIns...

Добавлено:
В последнем случае поиск бесполезен, т.к. эти макросы закрыты паролем (который, впрочем, легко узнаить).
Автор: LITMASTER
Дата сообщения: 30.07.2007 20:37
nick7inc
есть зависимость данных одного столбца от другого:если в любую ячейку данного столбца ввести набор цифр и букв ,то в требуемом столбце и будет результат.Вот эту зависимость и нужно установить.
Но где ее найти.В меню макрос просит ввести пароль,использовал ofiice recoveri и Advanced Office Password Recovery ,программа пишет,что пароля нет,но где найти в файле,в каком месте,эту зависимость или программму?
Спасибо.
Автор: SERGE_BLIZNUK
Дата сообщения: 30.07.2007 22:43
LITMASTER
в требуемом столбце (там, где появляются результирующие данные) никаких формул нет?!
Файл сильно секретный? выложить нельзя?
Попробуй включить безопасность в Excel - спрашивать загрузку макросов,
открыть свою книгу, если спросит "Отключить макросы" / "Разрешить макросы" - выбери отключить. После этого, в результирущем столбце что-нибудь появляется? Если нет, то точно макрос висит на изменение данных/смену фокуса(выделения)...
И ещё, проверьте, что у вас в папке
"C:\Documents and Settings\USER\Application Data\Microsoft\Excel\XLSTART\" ? (красным подсвечен пользователь - там должен быть ваш логин, под которым вы работаете в Windows.
Если там что есть - выйдите из Excel и всё, что там есть перенесите куда-нибудь в архив.
Зайдите в Excel и проверьте - заполняются ли данные....
Автор: LITMASTER
Дата сообщения: 31.07.2007 06:34

Цитата:
Если нет, то точно макрос висит на изменение данных/смену фокуса(выделения)...
Если макрос отключить,то изменения в результирующем столбце не происходит.

Цитата:
И ещё, проверьте, что у вас в папке
"C:\Documents and Settings\USER\Application Data\Microsoft\Excel\XLSTART\" ?

там две папки пустая-XLSTART и файл Excel,который пустой.

Автор: Drossel27
Дата сообщения: 31.07.2007 08:00
Dim TolkoTzifra As String 'Задаём тип переменной - символьная
Private Sub Worksheet_Change(ByVal Target As Range) 'Процедура запрета ввода символов
Application.EnableEvents = False
If IsNumeric(Range("B14")) <> True Then 'Если ячейка В14 не цифра то...
TolkoTzifra = MsgBox("Вводите только цифры", vbOKOnly + vbCritical, "Ошибка") 'Месадж бокс...
Cells(Target.Row, Target.Column).Select 'после закрытия месаджбокс выделение старой ячейки
Selection.ClearContents 'очистка значения старой ячейки
Selection.NumberFormat = "0.0" 'установка формата ячейки
Else:
Cells(Target.Row, Target.Column + 1).Select 'иначе переход на следущую по строчке ячейку
End If
Application.EnableEvents = True
End Sub
*****************************
Подскажите плиз как реализовать данное условие для области B14:L14 не повторяя его 12 раз.
Автор: kolesnik75
Дата сообщения: 31.07.2007 08:56
Подскажите, плис, каким образом решить след-ю задачку: есть некий реестр операций в excel, в строках есть как данные так и формулы, так и значения получаемые с помощью макросов. Необходимо после ввода данных по строке запретить изменение данных в строке, т.е. чтобы она стала только в режиме просмотра, а не редактирования. Оттолкнуться при этом нужно от наличия данных в определенной ячейке, или и от перехода на другой лист.
Автор: SERGE_BLIZNUK
Дата сообщения: 31.07.2007 12:04
Drossel27
1)
такой код:
Код:
Dim TolkoTzifra As String 'Задаём тип переменной - символьная
Private Sub Worksheet_Change(ByVal Target As Range) 'Процедура запрета ввода символов
If (Target.Rows.Count = 1) And (Target.Columns.Count = 1) Then
If (Target.Row = 14) And (Target.Column >= 2) And (Target.Column <= 12) Then
Application.EnableEvents = False
If IsNumeric(Target.Value) <> True Then 'Если ячейка не цифра то...
TolkoTzifra = MsgBox("Вводите только цифры", vbOKOnly + vbCritical, "Ошибка") 'Месадж бокс...
Cells(Target.Row, Target.Column).Select 'после закрытия месаджбокс выделение старой ячейки
Selection.ClearContents 'очистка значения старой ячейки
Selection.NumberFormat = "0.0" 'установка формата ячейки
Else:
Cells(Target.Row, Target.Column + 1).Select 'иначе переход на следущую по строчке ячейку
End If
Application.EnableEvents = True
End If
End If
End Sub
Автор: nick7inc
Дата сообщения: 31.07.2007 12:06
LITMASTER

Цитата:
Если макрос отключить,то изменения в результирующем столбце не происходит.

Макрос находится в этой же книге, как сказал SERGE_BLIZNUK поставлено событие на изменение диапазона. Надо войти в редактор Visual Basic и смотреть код листов, событие Worksheet_Change

Добавлено:
kolesnik75

Цитата:
Необходимо после ввода данных по строке запретить изменение данных в строке,

Можно защитить лист от изменения и пользоваться свойством "защищаемая ячейка".
Если в последнем задать Ложь, то ячейку можно редактировать, если Истина - то нельзя.
Автор: vasiliy74
Дата сообщения: 31.07.2007 13:20
Помогите как проверить на листе создан ли список или нет?
Например(это не работает):

Код:
If total_sheet.ListObjects("list1") = thrue Then
....
End If
Автор: nick7inc
Дата сообщения: 31.07.2007 13:50
vasiliy74

Цитата:
thrue
вместо true

Для управляющих элементов выводит их имена (кнопки, списки, но не линии и диаграммы):

Код: Dim obj As Object
For Each obj In Worksheets("Лист1").OLEObjects
MsgBox obj.Name
Next obj
Автор: Yuryeva
Дата сообщения: 31.07.2007 14:07
ПОдскажите, кто знает! Как создать макрос для автоматической нумерации строк в EXCEL???
Автор: nick7inc
Дата сообщения: 31.07.2007 15:28
Yuryeva
Можно по-конкретнее. Все строки в Excel и так нумерованы.

Добавлено:
Можно и без макросов сделать формулой, скажем, в A2 вводим:
=Если(епусто(B2);"";A1+1)
Нумерует, если в соседней ячейке B2 что-то есть.
В A1 ничего не ставим или начальный номер.
Размножаем эту формулу на несколько строк.
Автор: vasiliy74
Дата сообщения: 31.07.2007 17:27
nick7inc

Цитата:
Dim obj As Object
For Each obj In Worksheets("Лист1").OLEObjects
MsgBox obj.Name
Next obj

спасибо заработало!
хочу выключить авто фильтр у списка List1, не как не могу понять как его отключить? зписал макрос посмотрел там всякие селекты мышкой прописанны не работает...

Код:
Set total_sheet = Worksheets("sheet1")
....
total_sheet.ListObjects("List1").Active
Selection.AutoFilter
или так пробовал
total_sheet.ListObjects("List1").AutoFilter
Автор: Drossel27
Дата сообщения: 01.08.2007 01:03
SERGE_BLIZNUK
Спасибо. Блин, век живи, век учись...

Добавлено:
SERGE_BLIZNUK
Только вот заковырка...кодом я её победил...когда вводится число через точку, а не запятую (1.3) эксель меняет формат ячейки и на место уже не возвращает...а это как победить?
Автор: SERGE_BLIZNUK
Дата сообщения: 01.08.2007 01:52
Drossel27

Цитата:
когда вводится число через точку, а не запятую (1.3) эксель меняет формат ячейки и на место уже не возвращает...а это как победить?

Извините, не понял в чём проблема то....
Разжуйте, что не так и ПОПОДРОБНЕЕ... (и, как мне кажется, макрос/проверка тут не при чём - когда в чистом листе вводите числа - что получается?...)
Пока, навскидку, проверяйте региональные настройки самой винды (десятичный разделитель в Панель управления / Язык и региональные стандарты ) и в Excel (Сервис / параметры - Международные)


Цитата:
век живи, век учись...

Это точно! я тут постоянно этим и занимаюсь. Ну, и иногда, когда сам научился чему-то, этому учу других ;-))

Добавлено:

Yuryeva
nick7inc
Цитата:
Можно и без макросов сделать формулой, скажем, в A2 вводим:
=Если(епусто(B2);"";A1+1)

А можно и макросом... у меня есть такой макрос - делал по себя, (хитрый документ, в нём постоянно заголовки групп, которые нумеровать не нужно, а остальные строки имеют сквозную нумерацию...) Если надо - поделюсь. Только его под себя нужно будет напильничком довести... ;-))
Если надо - пишите.
Автор: Drossel27
Дата сообщения: 01.08.2007 02:12
SERGE_BLIZNUK

Цитата:
Панель управления / Язык и региональные стандарты ) и в Excel (Сервис / параметры - Международные)

Ну поставлю я разделитель "/" или "," от этого ничего не изменится, мне же нужны ТОЛЬКО цифры. Нашёл выход - поставил формат ячеек числовой, но тогда при вводе числа через точку эксель выдает пятизначную цифру "1.3 - получается 39263"
Автор: SERGE_BLIZNUK
Дата сообщения: 01.08.2007 03:13
Drossel27

Цитата:
от этого ничего не изменится, мне же нужны ТОЛЬКО цифры.

1) проверяйте не IsNymeric, а тупо только ли цифры в строке, тогда можно будет ввести ТОЛЬКО цифры!!
2) так и не могу понять, почему Данные / Проверка / Целые числа вас не устраивает?!!!!
Автор: Drossel27
Дата сообщения: 01.08.2007 04:12
SERGE_BLIZNUK

Цитата:
проверяйте не IsNymeric, а тупо только ли цифры в строке, тогда можно будет ввести ТОЛЬКО цифры!!

как?

Цитата:
2) так и не могу понять, почему Данные / Проверка / Целые числа вас не устраивает?!!!!

Устраивает, даже очень...маросов нету...это хорошо...только раз уж взялся, надо доделать, верно?
Автор: SERGE_BLIZNUK
Дата сообщения: 01.08.2007 08:58
Drossel27

Цитата:
проверяйте не IsNymeric, а тупо только ли цифры в строке, тогда можно будет ввести ТОЛЬКО цифры!!

например, так - [more=Макрос]

Код:
Public Function IsOnlyDigits(ByVal SInput As String) As Boolean
Dim I As Long
IsOnlyDigits = True
For I = 1 To Len(SInput)
If (Mid(SInput, I, 1) < "0") Or (Mid(SInput, I, 1) > "9") Then
IsOnlyDigits = False
Exit Function
End If
Next I
End Function

Sub ПроверитьОднуВыделеннуюЯчейку()
If IsOnlyDigits(Selection.Value) = False Then
MsgBox "Есть не цифры"
Else
MsgBox "Усё в полном порядке, шеф! (пустая или только цифры)"
End If
End Sub

Автор: nick7inc
Дата сообщения: 01.08.2007 10:46
vasiliy74

Цитата:
хочу выключить авто фильтр у списка List1


Цитата:
ListObjects

У меня в Excell 2000 нет такого свойства. Я могу выключить афтофильтр на конкретном листе.
Автор: vasiliy74
Дата сообщения: 01.08.2007 11:38
Решил перед выполнением макроса очистить таблицу, в результате макрос стал выполнятся на много медленнее наверно нужно снять выделение??? или что

вот что я добавил:

Код:
Sheets("Лист1").Select
Cells.Select
Selection.ClearContents
Selection.ClearComments

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

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


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