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

» Excel VBA (часть 2)

Автор: chalvs
Дата сообщения: 21.07.2007 18:41

Цитата:
Заканивая работу в Excel нада чтобы делала резервную копию допустим в
F:\Бухгалтерия\автобухгалтер.xls
Такое реально!


SERGE_BLIZNUK


Цитата:
( Private Sub Workbook_BeforeClose(Cancel As Boolean) )
думаю, что проблем не должно быть, но у меня лично опыта использования данного события нет...
Кстати,, Отпишитесь сюда о полученных результатах!


Получилось так, резервную сохраняет а та что открыта нет, я дописал такой же код
только на рабочую

Sub Резерв ()
ActiveWorkbook.SaveAs Filename:= _
"F:\Бухгалтерия\автобухгалтер.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

ActiveWorkbook.SaveAs Filename:= _
"D:\Бухгалтерия\Резерв_автобухгалтер.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
End Sub

Если есть другие варианты то подскажите!
Автор: SERGE_BLIZNUK
Дата сообщения: 21.07.2007 22:17
chalvs
1) посмотри в ПМ

2) Из книги А. Гладкий, А. Чиртик Excel. Трюки и эффекты
[more=кусочек из Глава 2. Быстрое размножение рабочей книги]

Быстрое размножение рабочей книги
Используя средства VBА, можно сохранить текущую рабочую книгу сразу в несколь-
ких разных папках. Для этого следует написать и выполнить макрос, код которого
приведен в листинге 2.1.
Глава 2. Рабочая область Microsoft Excel
ПРИМЕЧАНИЕ
Все приведенные в книге листинги можно загрузить с сайта издательства
«Питер» по адресу http://www.piter.com/download/978546901223/.

Код: Листинг 2.1. Размножение рабочей книги
Sub DuplicateBook()
Dim avarFileNames As Variant
' Формирование массива из путей для копий книги
avarFileNames = Array("С:\" &
ActiveWorkbook.Name, "D:\" & ActiveWorkbook.Name)
' Сохранение книги
ActiveWorkbook.SaveAs avarFileNames
End Sub
Автор: chalvs
Дата сообщения: 21.07.2007 23:49
SERGE_BLIZNUK


Цитата:
2) Из книги А. Гладкий, А. Чиртик Excel. Трюки и эффекты
кусочек из Глава 2. Быстрое размножение рабочей книги


Огромное спасиба!
Быстрое размножение рабочей книги, просто супер.
Автор: dummy84
Дата сообщения: 23.07.2007 10:57
Добрый день, помогите пожауста новичку далекому от програмирования. Задача следующая: имееться таблица с такими столбцами

Код \счет \ кoppеспондент\ назначения платежа\ Дата\ Дебет\ Кредет\ МФО
необходимо найти суму платежей по кредиту в назначении который допустим есть слово начинающееся на возвр или пере.

Sub proba()
'

Dim i As Integer
Dim s As Double
Dim n As Integer
' находим последнюю строку
Range("A65536").End(xlUp).Select
ActiveCell.Offset(2, 0).Value = "Всего"
n = Application.CountA(Sheets("Ëèñò1").Range("A:A"))
Cells(n + 5, 1).Value = n
'тут я нашел столбец или точнее ячейку которая содержит слово кредет, а вот
'правильно отсортировать этот столбец удалив соответственно с таблицы строки с нулями незнаю
Cells.Find(What:="кредет", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Columns("G:G").Select
' тут необходимо обратиться к диапазону который начинался б в а1 а заканчивался в нижнем правом углу, тоже не знаю как!
Range("A1:h275").Sort Key1:=Range("G2"), Order1:=xlDescending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
' тут я пытаюсь в столбце назначение найти нужные мне слова
Cells.Find(What:="назначение", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
Columns("D:D").Select
тут я пытаюсь в цикле найти эти слова, но даже не знаю как зделать их не чуствительными к регистру!
For i = 2 To n
If InStr(Cells(i, 4).Value, "возвр") <> 0 Or InStr(Cells(i, 4).Value, "пере"<> 0 Then Cells(i, 7).Interior.ColorIndex = 8
End If
If Cells(i, 7).Interior.ColorIndex = 8 Then
s = s + Cells(i, 7).Value
End If
Next i
Cells(n + 2, 7).Value = s
End Sub

Люди если можете помогите очень нужно, а сам к сожалению не могу, наверное не дано да и некому подсказать. Все у нас такие же...
Автор: vasiliy74
Дата сообщения: 23.07.2007 15:02
SERGE_BLIZNUK - босс рубрики
Вопрос по синтаксису например хочу выделить столбец но начиная с третей строки такое возможно?
Worksheets("List").Range("A3:A)- это VBA не понимает
Автор: SERGE_BLIZNUK
Дата сообщения: 23.07.2007 15:49
vasiliy74
а если так?
Worksheets("List").Range("A3:A65536").Select

dummy84
внимательнее смогу посмотреть вашу функцию только вечером (дома)...
А пока, навскидку?
1) Вы уверены, что задача не решается без программирвоания банальными формулами (например, через СУММЕСЛИ(...)
2) верхний регистр в VBA - UCase()
т.е. Ваш код будет выглядеть так:
InStr(UCase(Cells(i, 4).Value), "ВОЗВР") <> 0

3) писать лучше - Кредит
Автор: dummy84
Дата сообщения: 23.07.2007 16:07
1) я попробывал InStr(UCase(Cells(i, 4).Value), "ВОЗВР") <> 0, не получилось
тоесть ячейку в 7 столбце не выделяет если возвр начинаеться с большой буквы, навероне я чего то не догоняю,
2) а вот как обратися ко всей таблице при сортировке понял как Range("a1", Cells(LastRow - 1, LastColumn)) а перед этим соответственно было
If WorksheetFunction.CountA(Cells) > 0 Then
'Search for any entry, by searching backwards by Rows.
LastRow = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
'Search for any entry, by searching backwards by Columns.
LastColumn = Cells.Find(What:="*", After:=[A1], _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End If

3) а вот писать все таки нужно кредет (Дебет-кредет) это не кредит, хотя имено кредитами я и занимаюсь. Хотя спорить сильно не буду в руском я не очень - живу в Украине просто.

4) огромное Вам спасибо не думал что мне кто то поможет даже, я просто впервые на форуме. Судьба заставила - учебники не помогают, а очень хочеться научиться да и рядом человека разбирающегося в этом нет.


Автор: Riccio
Дата сообщения: 23.07.2007 16:15
многие позиции (например - эта) не классифицируется. то есть мы отбираем только моторные и индустриальные масла. как один из способов - по маркам соответствий, которые как раз в файле!

ещё один маленький вопрос! на 2ггц процессоре и 512 мб оперативки как быстро должен работать эксель с 76000 позиций? у меня например приходится ждать даже обработки протягивания формул с первой до 76000 позиции минуты по 4!
Автор: dummy84
Дата сообщения: 23.07.2007 16:36
Abs (функция) - возвращает абсолютное значение числа
And (операция) - логическое И
AppActivate (оператор) - активизирует окно приложения
Array (функция) - создает массив из параметров и возвращает его как переменную типа Variant
Asc (функция) - возвращает числовой код первого символа строки аргумента
Atn (функция) - возвращает арктангенс числа в радианах
Веер (оператор) - проигрывает звуковой сигнал через динамик компьютера
Call (оператор) - передает управление процедуре модуля (Sub), функции модуля (Function) или подпрограмме DLL
CBool (функция) - приводит выражение к типу Boolean
CByte (функция) - преобразует выражение к типу Byte
CCur (функция) - преобразование выражения к типу Currency
CDate (функция) - преобразование выражения к типу Date
CDbl (функция) - преобразование к типу Double
ChDir (оператор) - изменяет текущий каталог на устройстве
ChDrive (оператор) - изменяет текущее устройство
Choose (функция) - возвращает значение из списка аргументов с определенным порядковым номером
Chr (функция) - возвращает символ, связанный с определенным числовым кодом
CInt (функция) - преобразование выражения к типу Integer
CLng (функция) - преобразование выражения к типу Long
Close (оператор) - закрывает файл, открытый оператором Open
Command (функция) - возвращает командную строку, используемую для запуска Visual Basic или приложения на Visual Basic
Const (оператор) - объявления констант
Cos (функция) - возвращает косинус числа
Create Object (функция) - создать OLE Automation объект
CSng (функция) - преобразование выражения к типу Single
CStr (функция) - преобразование выражения к типу String
CurDir (функция) - возвращает текущий каталог логического устройства
CVar (функция) - преобразование выражения к типу Variant
CVErr (функция) - возвращает подтип ошибки, для определенного пользователем номера ошибки
Date (оператор) - устанавливает значение системной даты
Date (функция) - возвращает значение системной даты
DateAdd (функция) - возвращает переменную типа Variant, содержащую дату, отличающуюся от заданной на определенный интервал времени
DateDiff (функция) - возвращает число временных интервалов, между двумя датами
DatePart (функция) - возвращает определенную часть заданной даты
DateSerial (функция) - возвращает дату для заданного года, месяцами, дня
DateValue (функция) - возвращает дату
Day (функция) - возвращает число от 1 до 31, соответствующее текущему дню месяца
DDB (функция) - возвращает значение амортизационных потерь за определенный период
Declare (оператор) - на уровне модуля объявляет ссылки к внешним подпрограммам в DLL
Deftype (операторы) - устанавливает тип данных по умолчанию на уровне модуля для переменных, параметров подпрограмм, а также возвращаемых значений для функций и операторов Property Get, начинающихся с определенных символов
Dim (оператор) - объявляет переменные и выделяет память под них
Dir (функция) - возвращает имя файла или каталог, подходящий для данного шаблона или атрибута файла, или метку тома устройства
DoEvents (функция) - прерывает выполнение приложения
Do... Loop (оператор) - повторяет блок команд до тех пор, пока условие верно или до тех пор, пока условие не станет верным
End (оператор) - заканчивает подпрограмму или блок команд
Environ (функция) - возвращает строку, связанную с переменной окружения операционной системы
EOF (функция) - возвращает значение, указывающее, достигнут ли конец файла
Eqv (оператор) - проверяет логическое равенство двух выражений
Erase (оператор) - повторно инициализирует элементы массивов фиксированного размера и перераспределяет память под динамические массивы
Error (оператор) - эмулирует возникновение ошибки
Error (функция) - возвращает текст сообщения данного номера ошибки
Exit (операторы) - осуществляет выход из циклов Do ... Loop, For... Next, функции и процедур
Ехр (функция) - возвращает экспоненту числа
FileAttr (функция) - возвращает режим открытия или номер (handle) файла
FileCopy (оператор) - копирует файл
FileDateTime (функция) - возвращает дату и время создания или последней модификации файла
FileLen (функция) - возвращает длину файла в байтах
Fix (функция) - возвращает целую часть числа
For Each...Next (оператор) - повторяет одну и ту же последовательность команд для каждого элемента массива или коллекции
For...Next (оператор) - повторяет последовательность команд определенное число раз
Format (функция) - форматирует выражение в соответствии с заданным форматом
FreeFile (функция) - возвращает следующий не занятый номер файла для использования в операторе Open
Function (оператор) - объявляет имя, аргументы и код подпрограммы, возвращающей значение (функции)
FV (функция) - возвращает значение ренты, основываясь на периодических взносах и постоянной норме капиталовложений
Get (оператор) - читает данные из открытого файла в переменную
GetAttr (функция) - возвращает атрибуты файла, каталога или метки тома
GetObject (функция) - возвращает OLE Automation объект для файла сданным расширением
GoSub... Return (оператор) - выполняет подпрограмму
GoTo (оператор) - передает управление определенной строке подпрограммы без возврата контроля
Hex (функция) - возвращает строку, представляющую шестнадцатеричное значение числа
Hour (функция) - возвращает целое число в диапазоне 0 - 23 включительно, представляющее определенный час дня
If...Then... Else (оператор) - выполнение групп команд в зависимости от значения выражения
Iff (функция) - возвращает одно из двух значений в зависимости от значения выражения
Imp (операция) - импликация двух выражений
Input (функция) - возвращает символы из файла, открытого для последовательного доступа или как двоичный файл
Input # (оператор) - считывает данные из открытого файла в переменные
InputBox (функция) - показывает диалоговое окно ввода, ожидает ввода текста и возвращает содержимое введенного текста, после закрытия окна
InStr (функция) - возвращает позицию первой найденной подстроки в строке
Int (функция) - возвращает целую часть числа
Is (операция) - сравнение двух ссылок на объекты
IsArray (функция) - возвращает булево значение, указывающее, является ли данная переменная массивом
IsDate (функция) - возвращает булево значение, указывающее, может ли выражение быть преобразовано к типу Date
IsEmpty (функция) - возвращает булево значение, указывающее, инициализировано ли значение данной переменной
IsError (функция) - возвращает булево значение, указывающее, является ли выражение значением кода ошибки
IsMissing (функция) - возвращает булево значение, указывающее, был ли передан данный необязательный параметр в подпрограмму
IsNull (функция) - возвращает булево значение, указывающее, не содержит ли выражение недопустимое (Null) значение
IsNumeric (функция) - возвращает булево значение, указывающее, может ли данное выражение рассматриваться как число
IsObject (функция) - возвращает булево значение, указывающее, является ли выражение объектом OLE Automation
Kill (оператор) - удаляет файл
LBound (функция) - возвращает значение нижней границы индекса массива
LCase (функция) - возвращает строку в нижнем регистре
Left (функция) - возвращает определенное число символов с начала строки
Len (функция) - возвращает число символов строки или число байт, необходимых для хранения переменной
Let (оператор) - присваивает значение выражения переменной или свойству
Like (операция) - сравнение двух строк
Line Input # (оператор) - считывает строку из файла в переменную
Load (оператор) - загружает в память форму или элемент управления
LoadPicture (функция) - загружает графический образ в объекты: Form,
Loc (функция) - возвращает текущую позицию чтения/записи в открытом файле
Lock (оператор) - контролирует доступ других процессов ко всему или части открытого файла
LOF (функция) - возвращает размер в байтах открытого файла
Log (функция) - возвращает натуральный логарифм числа
LSet (оператор) - копирует строку в строковую переменную, а также копирует значение переменной одного специализированного типа в переменную другого специализированного типа
LTrim (функция) - возвращает копию строки без лидирующих пробелов
Mid (оператор) - замещает определенное число символов в строке на символы из другой строки
Mid (функция) - возвращает определенное число символов с определенной позиции строки
Minute (функция) - возвращает целое число в диапазоне 0 - 59, представляющее минуту часа
MkDir (оператор) - создает новый каталог
Mod (операция) - возвращает остаток от деления двух чисел
Month (функция) - возвращает целое число в диапазоне 1 - 12, представляющее номер месяца
MsgBox (функция) - показывает сообщение в диалоговом окне, ожидает выбор одной из кнопок пользователем и возвращает значение, указывающее, какая кнопка была выбрана
Name (оператор) - переименовывает файл или каталог
Not (операция) - логическое отрицание
Now (функция) - возвращает текущие значения даты и времени
Oct (функция) - возвращает строку, представляющую восьмеричное представление числа
On Error (оператор) - устанавливает обработчик ошибок и задает местоположение подпрограммы обработки; используется также для отмены обработки ошибок подпрограммой обработчика
Оn..GoSub, On...GoTo (операторы) - передача управления на одну из нескольких определенных строк (меток), в зависимости от значения выражения
Open (оператор) - скрывает файл для ввода/вывода
Option Base (оператор) - используется для объявления значения нижней границы размерности индексов массивов по умолчанию
Option Compare (оператор) - используется на уровне модуля для объявления метода сравнения по умолчанию при сравнении строк
Option Explicit (оператор) - используется на уровне модуля для установки проверки наличия объявлений для всех переменных в данном модуле
Option Private (оператор) - используется на уровне модуля для указания, что весь модуль является Private
Or (операция) - логическое ИЛИ
Partition (функция) - возвращает строку, указывающую, сколько раз встретились числа из заданного диапазона
Print # (оператор) - записывает форматированные данные в файл
Private (оператор) - используется на уровне модуля для объявления Private переменных и выделяет место в памяти для их хранения
Property Get (оператор) - объявляет имя, аргументы и код подпрограммы получения значения свойства
Property Let (оператор) - объявляет имя, аргументы и код процедуры установки значения свойства
Property Set (оператор) - объявляет имя, аргументы и код процедуры установки ссылки на объект
Public (оператор) - используется на уровне модуля для объявления Public переменных и выделяет место в памяти для их хранения
Put (оператор) - записывает переменную в файл
QBColor (функция) - возвращает RGB код, соответствующий номеру цвета
Randomize (оператор) - инициализирует генератор случайных чисел
RGB (функция) - возвращает целое число, представляющее значение RGB кода
ReDim (оператор) - используется на уровне подпрограммы для переопределения размера динамических массивов и выделения под них места в памяти
Rem (оператор) - вставка комментариев в программу
Reset (оператор) - закрывает все открытые программой файлы
Resume (оператор) - продолжает выполнение программы после завершения процедуры обработчика ошибок
Right (функция) - возвращает определенное число символов с правой стороны строки
RmDir (оператор) - удаляет каталог
Rnd (функция) - возвращает случайное число
RSet (оператор) - копирует правую часть строки в строковую переменную
RTrim (функция) - возвращает копию строки без конечных пробелов
SavePicture (оператор) - сохраняет в файл графический образ объекта Form, элементов управления PictureBox или Image
Second (функция) - возвращает целое значение в диапазоне 0 - 59,представляющее секунду в минуте
Seek (оператор) - устанавливает позицию для следующей операции чтения или записи в открытый файл
Seek (функция) - возвращает текущую позицию чтения/записи открытого файла
Select Case (оператор) - выполняет одну или несколько команд, в зависимости от значения выражения
SendKeys (оператор) - посылает одно или несколько нажатий клавиш активному окну, как если бы они были введены пользователем с клавиатуры
Set (оператор) - связывает ссылку на объект с переменной или свойством
SetAttr (оператор) - устанавливает атрибуты файла
Sgn (функция) - возвращает знак числа
Shell (функция) - запускает внешнюю программу на выполнение
Sin (функция) - возвращает значение синуса угла
Space (функция) - возвращает строку, содержащую определенное число пробелов
Spc (функция) - позиционирование в строке вывода
Sqr (функция) - подсчет значения квадратного корня числа
Static (оператор) - используется на уровне модуля для объявления переменных и выделяет место в памяти для их хранения. Переменные сохраняют значения до завершения программы
Stop (оператор) - приостанавливает выполнение программы
Str (функция) - возвращает строковое представление числа
StrComp (функция) - возвращает результат сравнения строк
StrConv (функция) - возвращает преобразованную строку
String (функция) - возвращает строку заданной длины из одинаковых символов
Sub (оператор) - объявляет имя, параметры и тело процедуры
Switch (функция) - подсчитывает значения списка выражений и возвращает значение или выражение, связанное с выражением из списка, значение которого равно True
Tab (функция) - позиционирование в строке вывода
Tan (функция) - возвращает значение тангенса угла
Time (оператор) - устанавливает значение системных часов
Time (функция) - возвращает значение типа Date, указывающее текущее системное время
Timer (функция) - возвращает число секунд, прошедших после полуночи
TimeSerial (функция) - возвращает значение типа Date, содержащее время для заданного часа, минуты и секунды
Time Value (функция) - возвращает значение типа Date, содержащее время суток
Trim (функция) - возвращает копию строки без начальных и конечных пробелов
Type (оператор) - объявляет на уровне модуля специализированный тип данных
TypeName (функция) - возвращает строку информации о заданной переменной
UBound (функция) - возвращает значение наибольшего индекса для данной размерности массива
UCase (функция) - возвращает строку, преобразованную в верхний регистр
Unload (оператор) - выгружает форму или элемент управления из памяти
Unlock (оператор) - контролирует доступ других процессов ко всему или части открытого файла
Val (функция) - возвращает числовое представление строки
VarType (функция) - возвращает значение, указывающее тип переменной
Weekday (функция) - возвращает целое число, представляющее день недели
While...Wend (оператор) - выполняет в цикле последовательность команд до тех пор, пока верно условие
Width # (оператор) - назначает ширину строки вывода для операции записи в открытый файл
With (оператор) - выполняет последовательность команд для конкретного объекта или переменной специализированного типа
Write # (оператор) - записывает данные в файл
Хоr (операция) - исключающее ИЛИ
Year (функция) - возвращает целое число, представляющее год
_________________
всем начинающим чайникам таким как я это может пригодиться!!!

Добавлено:

Цитата:
SERGE_BLIZNUK


еще раз спасибо, благодоря вам я додумался найти список функций или операторов не знаю как правильно назвать, так вот чтобы в ячейке найти текст не зависимо от региста необходимо воспользоваться не Ucase a Lcase - пробывал помогло так что на проблему меньше.
Автор: vasiliy74
Дата сообщения: 23.07.2007 17:23
SERGE_BLIZNUK
да помогло;)


Добавлено:
Как в цикле

Код: For Each c1 In out_r1
If c1 = 0 Then
If IsEmpty(c1) Then Exit For
Rows(c1.Row).Select
Selection.Delete Shift:=xlUp
'Set c1 = c1.Offset(-1, 0) - не работает
End If
Next c1
Автор: SERGE_BLIZNUK
Дата сообщения: 23.07.2007 19:58
dummy84

Цитата:
не Ucase a Lcase - пробывал помогло

вы не обратили в моём посте я значение в строке сравнения перевёл в верхний регистр!!! (т.е. не "возвр", а "ВОЗВР" ) но совершенно забыл подчернуть это. Впрочем, ваше решение с LCase - это тоже самое (только теперь сравниваемое значение ОБЯЗАТЕЛЬНО должно быть строчными буквами!) ладно, это всё лирика.

Лучше скажите, задача решена? Можно лоб не морщить? ;-))

Кстати, лучше бы Вы функции убрали за тегами [no] [MORE] ... большой список функции [/MORE] [/no] Это можно сделать, нажав редактировать на вашем сообщении...

vasiliy74
долго смотрел на Ваш код...
1) может быть, проще Вам будет сказать, что именно вы хотите удалить?!
Т.сказать — постановку оригинальной задачи?...
2) так и не понял, что у вас за диапазон out_r...
3) Для удаления удобно просто напросто сделать цикл снизу вверх - т.е. от последней записи к первой.
Кстати, если хотите удалять строчку целиком, то это можно сделать так
Rows(i).Delete -
или так
Cells(i, 1).EntireRow.Delete
(i - номер строки)



Riccio

Цитата:
многие позиции (например - эта) не классифицируется. то есть мы отбираем только моторные и индустриальные масла. как один из способов - по маркам соответствий, которые как раз в файле!

ладно, сейчас у Вас крестик ставится по вхождению слов "МОТОР" или "ИНДУСТР" в наименование масла. Это чем то не устраивает Вас? Какой поиск по типу должен быть?
(приведите пример для конктретного масла и конретного типа)...
И поймите, что требовать от программы зачатков искусственного интеллекта по крайней мере наивно. Пока я ещё не понял, как приведённые в таблице списки моторных и индустриальных масел (столбцы L M N) должны влиять на крестики...

Теперь по поводу скорости. я уже говорил, что если нужно скорость - то Excel не самый лучший выбор. Для ускорения можете временно выключить автоматические вычисление в параметрах программы. но это, конечно, не радикальное решение.
Переход на любую СУБД (хотя бы тот же Access), с грамотно спроектириванной структурой БД даст многократный выигрыш по скорости!








Автор: dummy84
Дата сообщения: 23.07.2007 21:55
SERGE_BLIZNUK
Да не совсем задачка решена кое что еще не сделано:
1) хочется с помощью наверное inputbox задать возможность введения с клавиатуры названий фирм которые должны искаться в столбце кореспондент, а при нахождении так же как и в случае с назначением платежа ячейка этой же строки cells(i, 7) должна выделяться цветом.
2) а так же хочеться чтобы макрос сам открывал другую книгу и с нее вытягивал данную таблицу даже если она находтться не в ячейке А1, но этот момент я где то в книжке видел попробую найти что-то подобное.

и спасибо за морщины
Автор: vasiliy74
Дата сообщения: 24.07.2007 07:11
SERGE_BLIZNUK

Цитата:
vasiliy74
долго смотрел на Ваш код...
1) может быть, проще Вам будет сказать, что именно вы хотите удалить?!
Т.сказать — постановку оригинальной задачи?...
2) так и не понял, что у вас за диапазон out_r...
3) Для удаления удобно просто напросто сделать цикл снизу вверх - т.е. от последней записи к первой.
Кстати, если хотите удалять строчку целиком, то это можно сделать так
Rows(i).Delete -
или так
Cells(i, 1).EntireRow.Delete
(i - номер строки)

out_r один столбец таблицы в котором я нахожу значение равное 0 и удаляю строку таблицы со смещением в верх
пока что таблица состоит из 3 столбцов, удаление строки не подходит поскольку у меня есть кнопка и как оказалось она тоже удаляется поэтому есть желание работать только с ячейками таблицы
да а я както и неподумал что обратный цикл может будет эфиктивнее и навено единственным решением
Автор: XOPEK HAPKOMAH
Дата сообщения: 24.07.2007 09:20
Люди, почему справка VBA на английском, если офис русский. Где можно русский файл справки скачать?
Автор: Riccio
Дата сообщения: 24.07.2007 09:54

Цитата:
ладно, сейчас у Вас крестик ставится по вхождению слов "МОТОР" или "ИНДУСТР" в наименование масла. Это чем то не устраивает Вас? Какой поиск по типу должен быть?
(приведите пример для конктретного масла и конретного типа)...
И поймите, что требовать от программы зачатков искусственного интеллекта по крайней мере наивно. Пока я ещё не понял, как приведённые в таблице списки моторных и индустриальных масел (столбцы L M N) должны влиять на крестики...


"Мотор" и "Индустр" - не всегда встречаются в столбце В! а марка написана всегда! например возьмём строку №8 -
ВСЕСЕЗОННОЕ ТРАНСМИССИОННОЕ МИНЕРАЛЬНОЕ МАСЛО "MOBIL ATF (AUTOMATIC TRANSMISSION FLUID) 220", ПРИМЕНЯЕТСЯ В СИСТЕМАХ ПЕРЕДАЧ АВТОМОБИЛЕЙ. СОДЕРЖИТ ПО МАССЕ БОЛЕЕ 70 % БИТУМИНОЗНЫХ НЕФТЕПРОДУКТОВ (ТЯЖЕЛЫХ ДИСТИЛЛЯТОВ)
здесь нет маркёра МОТОР или ИНДУСТР, а есть марка MOBIL ATF! эта же марка есть в столбце "Список масел моторных - коммерческих" (№19-20 - MOBIL ATF)
Таким образом однозначно - это моторное масло и тд...
Автор: dummy84
Дата сообщения: 24.07.2007 15:30
Добрый день, может ли мне кто-нибуть помочь с функией inputbox?
необходимо чтобы пользователь задал имя компании или часть имени
а потом это имя или его часть должно искться во всех строхках одного из столбцов и при совпадении ячейка в другом столбце этой же строки должна выделяться цветом.
Автор: SERGE_BLIZNUK
Дата сообщения: 24.07.2007 15:36
Riccio
1) помните, я чуть выше писал насчёт искусственного интелекста?
так вот, пример со строчкой №8 показателен!
в строке (я чуть обрежу начало и конец для наглядности) МАСЛО "MOBIL ATF (AUTOMATIC TRANSMISSION FLUID) 220", нет вхождения строчки с типом масла из строки M20 - напомню, что там находится значение MOBIL ATF 220!!!!
Таким образом возникает дополнительно условие - "эвристика" - отбрасывать цифры в конце типа масла. Но так нельзя, т.к. один и тот же тип входит и в моторные и в индустриальные.
Я вам больше скажу, задача вообще вряд ли решаема, т.к. данные в столбцах L M N
противоречат друг другу!!!
посмотрите, например на строчку №9, оно вроде как индустриальное.
но, поиск по "MOBILGREASE XHP" даёт нам нахождение и в столбце N34
и в столбце M165 (Список масел моторных - коммерческих )
а кстати, типа "MOBILGREASE XHP 222" из строки №9 вообще нет в L M N ...

если Вам действительно нужно решить задачу, то нужно:
1) выделить тип масла/смазки в отдельный столбец
2) для всех типов обеспечить таблицу (L M N) с однозначным соответствием ->
Моторное или Индустриальное






Добавлено:
dummy84

Цитата:
Добрый день, может ли мне кто-нибуть помочь с функией inputbox?
необходимо чтобы пользователь задал имя компании или часть имени

дык и в чём вопрос?
пишите в своём макросе:
CompanyName = LCase(InputBox("Enter Company Name:"))
' сразу приводим к маленьким буквам, раз уж они вам нравятся больше, чем БОЛЬШИЕ
цикл по строчкам, проверяем, например, столбец 4
if InStr(LCase(Cells(i, 4)).Value, CompanyName) >0 then
With Cells(i, 4).Interior
.ColorIndex = 3
.Pattern = xlSolid
End With

где-то так... писал прямо в форуме, так что не обессудьте
Автор: dummy84
Дата сообщения: 24.07.2007 18:42
SERGE_BLIZNUK
Благодарю, я пробывал сделать так же но без Lcase, просто ставил скобки не там вот и не получалось, уже думал что надо как то подругому подходить к этой проблеме...
спасибо
Автор: nick7inc
Дата сообщения: 25.07.2007 10:19
vasiliy74

Цитата:
Вопрос по синтаксису например хочу выделить столбец но начиная с третей строки такое возможно?
Worksheets("List").Range("A3:A)- это VBA не понимает


Во-первых, пропущена закрывающая кавычка,а во-вторых, да, в одну строчку не уложишься. Можно выделить весь столбец до максимально возможной строки, как было предложено:
SERGE_BLIZNUK

Цитата:
а если так?
Worksheets("List").Range("A3:A65536").Select


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

Лучше всё-таки делать через Cells.SpecialCells(xlCellTypeLastCell).Row , уточняя последюю используемую строку.
Автор: vasiliy74
Дата сообщения: 25.07.2007 14:13
кто вставлял курс валюты в Excel?
Автор: Gavrik
Дата сообщения: 25.07.2007 15:25
Есть книга с листами вида "01","02" то есть имя которых можно преобразовать в цифру и другие типа "Шаблон", "Декада". Надо удалить первые все.

Листы защищены.


Код:
ActiveWorkbook.Sheets("Шаблон").Visible = True ' Этот лист был скрыт

For Each Лист In ActiveWorkbook.Sheets

If IsNumeric(Лист.Name) Then

Application.DisplayAlerts = False
Лист.Unprotect
Лист.Delete
Application.DisplayAlerts = True

End If
Next

Автор: Riccio
Дата сообщения: 25.07.2007 17:05

Цитата:
Riccio
1) помните, я чуть выше писал насчёт искусственного интелекста?
так вот, пример со строчкой №8 показателен!
в строке (я чуть обрежу начало и конец для наглядности) МАСЛО "MOBIL ATF (AUTOMATIC TRANSMISSION FLUID) 220", нет вхождения строчки с типом масла из строки M20 - напомню, что там находится значение MOBIL ATF 220!!!!
Таким образом возникает дополнительно условие - "эвристика" - отбрасывать цифры в конце типа масла. Но так нельзя, т.к. один и тот же тип входит и в моторные и в индустриальные.
Я вам больше скажу, задача вообще вряд ли решаема, т.к. данные в столбцах L M N
противоречат друг другу!!!
посмотрите, например на строчку №9, оно вроде как индустриальное.
но, поиск по "MOBILGREASE XHP" даёт нам нахождение и в столбце N34
и в столбце M165 (Список масел моторных - коммерческих )
а кстати, типа "MOBILGREASE XHP 222" из строки №9 вообще нет в L M N ...

если Вам действительно нужно решить задачу, то нужно:
1) выделить тип масла/смазки в отдельный столбец
2) для всех типов обеспечить таблицу (L M N) с однозначным соответствием ->
Моторное или Индустриальное


Насчёт MOBIL ATF 220 - мы же можем задать, что при нахождение в строке всех этих 3 слов одновременно (MOBIL ATF 220) - однозначно масло посылается в моторные!!?? подскажите хотя бы алгоритм!? - если допустить, что у меня есть строгое соответствие марок и масел (и таблица с однозначным соответствием - пусть например в L - моторные, в N - индустриальные)!
Автор: dummy84
Дата сообщения: 25.07.2007 17:44
пожалуста помогите я три раза выполнил макрос который создает менюшку
а теперь хочу избавиться от двух лишних и что то у меня не получаеться, не подскажите рецепт??

макрос по созданию:
Sub Макрос4()
Dim menuobject As CommandBarPopup
Dim menuitem As Object
Dim submenuitem As Object

Set menuobject = Application.CommandBars(1). _
Controls.Add(Type:=msoControlPopup, before:=10, temporary:=True)
menuobject.Caption = "ukrsibbank"
Set menuitem = menuobject.Controls.Add(Type:=msoControlButton)
menuitem.OnAction = "macros"
menuitem.Caption = "очистка поступлений"
End Sub
Автор: SERGE_BLIZNUK
Дата сообщения: 25.07.2007 20:50
dummy84

Цитата:
помогите я три раза выполнил макрос который создает менюшку


А в чём проблема то?
у меня закрытие Excel и повторное открытие решило проблему - добавленные пункты меню исчезли! (скорее всего, работает " temporary:=True)" )
Автор: dummy84
Дата сообщения: 25.07.2007 22:10
SERGE_BLIZNUK
да у меня тоже проблема исчезла когда закрыл книгу извените затупил и то жестко.

господа кто знает как можно удалить строки в цикле по критерию
я сочинил вот такую вот пургу, но она удаляет только каждую вторую строку или точнее сказать первую а вторая становиться на ёё место и уже не проверяеться так как цикл переходит к следующему в даном случае j
For j = 2 To n
If Cells(j, 7).Value = 0 Then Rows(j).Delete
Next j
это мне только для внешнего вида на результат не влияет, но на будущее неплохо было бы разобраться.
Автор: Doctor_Livsi
Дата сообщения: 26.07.2007 10:43
День добрый.

Стоит задача следующего плана.
Visual Basic для Экселя

Нужно получить при обращении к Картинке, в частности jpg , размер картинки, а имеено Height & Width ,
Подскажите на примере как это можно сделать.
Заранее благодарен
Автор: Gavrik
Дата сообщения: 26.07.2007 13:01
Есть таблица с зафиксированой шапкой (в строках 1-4).

Само тело таблицы с помощью Rows(":").EntireRow.Hidden
Делится на куски которые видны и которые скрыты.
При визуальном просмотре все ок. Видим только ту информацию которая нужна.
Но при попытке печати в случае когда сразу фактические строки за шапкой скрыты (с 5 по 60), а показаны строки с 61 и дальше на печать вылазит только сама шапка. Строк вообще не видно никаких....
Если показать с 5 по 60, а скрыть те что еще ниже то тогда все ок.
Автор: Oyger
Дата сообщения: 26.07.2007 15:15
Люди. Есть переменная - дробное значение (к примеру: 125,6551)
Нужно в переменную х1 записать целую часть, а в х2 дробную.
Какие операторы за это отвечают?

Всем спасибо.

Добавлено:
Gavrik

А может все дело в банальной разметке страницы?
Автор: SERGE_BLIZNUK
Дата сообщения: 26.07.2007 16:36
Oyger
ОТБР - Усекает число до целого, отбрасывая дробную часть числа, так что остается целое число.
Синтаксис: ОТБР(число;число_разрядов)

а дробную часть можно получить через
=Число-ОТБР(Число)
но тогда, например, из вашего числа 125,6551 получится 0,6551
Пойдёт?



Добавлено:

Ой сорри... совсем не обратил внимание на то, что это нужно в VBA!!

тогда
Int(number)
Fix(number)
- Returns the integer portion of a number
(разницу применения смотрите в хелпе - грубо говоря, они по разному рубят отрицательные числа!)

Автор: Gavrik
Дата сообщения: 26.07.2007 17:22
Oyger
А что ты подразумеваеш под разметкой ?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133

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


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