Общее·количество·просмотров·страницы

четверг, 12 августа 2010 г.

О нуляхи и сущетвовании

Значит так, господа, давайте разбиремся, что такое ноль, пустой, существут и заполнен...

0 - это ноль, число. [Такое же число, как и любое другое]
"" - это пустая строка. [Такая же строка, как и любая другая]
Null - переменная (ячейка) существует, но значения не имеет
Nothing - переменная (объект) не существует, но существовал когда-то раньше или может существовать в будущем.
Dose Not Exist - переменная не существует, никогда не сущесвовала и не может существовать в будщем.

Для меня, переменная заполнена, если она существует и Not IsNull.

пятница, 6 августа 2010 г.

Вставить данные из одной таблицы в другую по коду товара

Option Base 1
Dim LastColumnI As Integer, LastRowI As Variant
Dim TemplateFullNameS As String, TemplateSheetS As String, TemplateNameS As String
Dim TemplateDataArrV() As Variant, OrderDataArrV() As Variant
Sub Consolidation()
'On Error Resume Next
'открываем щаблон
Set FSO = CreateObject("Scripting.FileSystemObject")
ThisWorkbook.Worksheets("data").Range("a1").Select
TemplateFullNameS = ActiveCell.Offset(0, 1)
Set File = FSO.GetFile(TemplateFullNameS)

TemplateSheetS = ActiveCell.Offset(1, 1)
TemplateNameS = File.Name
Workbooks.Open Filename:=TemplateFullNameS
ActiveWorkbook.Worksheets(CStr(TemplateSheetS)).Range("a1").Select
LastRowI = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row
LastColumnI = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Column
TemplateDataArrV = ActiveCell.CurrentRegion.Offset(1, 0).Resize(LastRowI - 1, LastColumnI)
Workbooks(TemplateNameS).Close
'============================================================================================
TemplateFullNameS = ActiveCell.Offset(2, 1)
TemplateSheetS = ActiveCell.Offset(3, 1)
TemplateNameS = File.Name
Workbooks.Open Filename:=TemplateFullNameS
ActiveWorkbook.Worksheets(CStr(TemplateSheetS)).Range("a1").Select
LastRowI = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row
LastColumnI = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Column
OrderDataArrV = ActiveCell.CurrentRegion.Offset(1, 0).Resize(LastRowI - 1, LastColumnI)
ActiveWorkbook.Close
a = UBound(OrderDataArrV, 1)
b = UBound(TemplateDataArrV, 1)
c = LBound(TemplateDataArrV, 1)
For i = 1 To a
For j = 1 To b
'For k = 1 To c
If OrderDataArrV(i, 1) = TemplateDataArrV(j, 7) And OrderDataArrV(i, 2) = TemplateDataArrV(j, 8) Then
TemplateDataArrV(j, 2) = OrderDataArrV(i, 1)
End If
'Next c
Next j
Next i
End Sub

ссылка на задчку

среда, 28 июля 2010 г.

Deleting All VBA Code In A Project

Deleting All VBA Code In A Project

This code will delete ALL VBA code in a VBProject.

Sub DeleteAllVBACode()
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule

Set VBProj = ActiveWorkbook.VBProject

For Each VBComp In VBProj.VBComponents
If VBComp.Type = vbext_ct_Document Then
Set CodeMod = VBComp.CodeModule
With CodeMod
.DeleteLines 1, .CountOfLines
End With
Else
VBProj.VBComponents.Remove VBComp
End If
Next VBComp
End Sub

четверг, 6 мая 2010 г.

Current Region

Интервал A5:C11 заполнен единицами. Оператор MsgBox Range("A6").CurrentRegion.Row высвечивает
число 5 (номер первой строки интервала)
число 7 (количество строк интервала)
число 11 (номер последней строки интервала
число 6 (номер строки ячейки A6)

попытка присвоить 1 переменной типа Boolean

Переменная Y, описанная как Boolean, в процессе выполнения процедуры получила значение 1. Оператор MsgBox "Y=" & Y
выведет в диалоговое окно Y=1
выведет в диалоговое окно Y=True
выведет в диалоговое окно Y=False
вызовет прерывание программы при попытке вывести значение Y из-за несоответствия типа переменной и ее значения

среда, 5 мая 2010 г.

Правильная инициализация переменной типа Single

21. Процедура предполагает расчет произведения чисел, вводимых пользователем. Для получения произведения описана переменная Prod as Single. В результате вычислений произведение чисел равно нулю. Какая команда инициализации переменных приведет к корректному результату?
Prod="1"
Prod=0
Prod=""
Prod="0"
6. В режиме прерывания после обнаружения ошибки в процедуру добавлен новый оператор, начиная с которого можно было бы продолжить выполнение программы. Для этого необходимо установить внутрь этого оператора точку вставки и
выполнить команду Set Next Statement из меню Debug
выполнить команду Show Next statement из меню Debug
выполнить команду Run to Cursor из меню Debug
невозможно продолжить выполнение программы со вставленного оператора. Необходимо начать заново выполнение программы

Изменение значения переменной после прерывания программы

5. При прерывании программы в окне Watches высвечено значение переменной N равное 0. В контексте программы эта переменная должна иметь значение 1.
можно изменить значение переменной в окне Quick Watch
можно изменить значение переменной в окне локальных переменных
можно изменить значение переменной в окне Watches
ни в одном окне отладчика нельзя изменить значение переменной. Следует исправить ошибку и заново выполнить процедуру

Неправильный утверждения

4. Отметьте неправильные утверждения.
в настройках редактора VB нельзя изменить тип и размер шрифта текста программы
в настройках редактора VB нельзя установить порядок высвечивания процедур - по алфавиту или по категориям, т.е. сначала процедуры общего типа, затем процедуры-функции
в настройках редактора не предусмотрено исключение из процедур операторов, в записи которых имеются синтаксические ошибки
в настройках редактора предусмотрена корректировка кода, связанная с изменением регистра ключевых слов

CurrentRegion

14. Оператор Worksheets("Лист7").Range("A5:B10").CurrentRegion.Delete на листе с именем Лист7
удаляет ячейки диапазона, включающего в себя интервал A5:B10, сдвигая остальные ячейки рабочего листа влево
очищает интервал ячеек, включающий в себя диапазон A5:B10
очищает диапазон ячеек A5:B10, относительный для предварительно выделенного интервала ячеек
очищает полностью колонки A и B

Основные принципы и концепции программирования на языке VBA в Excel

24. Переменные объявлены оператором Dim X As Byte, S As String. Переменная X получила значение 1. В результате выполнения операторов S="": S=S & X
S равно "1"
S равно " 1"
S равно "01"
S равно "0""1"
произойдет прерывание программы из-за несоответствия типов переменных во втором операторе присваивания

вторник, 4 мая 2010 г.

Ошибки в тесте по (Основные принципы и концепции программирования на языке VBA в Excel)

14. Отметьте правильные утверждения
Worksheets(Array("Лист1", "Лист2")).Activate выделяет листы и активизирует Лист1
Worksheets(Array("Лист1", "Лист2")).Select выделяет листы и активизирует Лист1
Union(Worksheets(1), Worksheets(2)).Select выделяет листы и активизирует Лист1
ActiveSheet.Offset(2).Select активизирует второй лист по отношению к активному листу
15. Интервал A5:C11 заполнен единицами. Оператор MsgBox Range("A6").CurrentRegion.Row высвечивает
число 5 (номер первой строки интервала)
число 7 (количество строк интервала)
число 11 (номер последней строки интервала
число 6 (номер строки ячейки A6)
16. Ссылки на ячейки с данными записываются при записи макроса с помощью макрорекодера в стиле
R1C1
A1
$A$1
A$1
$A1
20. В программе имеются две процедуры Proc1 и Proc2. Процедура Proc1 запрашивает данные и высвечивает результат из переменной User_sum, а процедура Proc2 получает введенные данные из Proc1 и суммирует их в переменной User_sum. Переменную User_sum следует объявить
как локальную в процедуре Proc2
на уровне модуля, в котором расположены обе процедуры
как статическую в процедуре Proc2
как статическую в процедуре Proc1
21. Первый оператор процедуры A=A+1. Отметьте неверное утверждение.
возникнет ошибка, если переменная A описана как String
A получит значение False, если A описана как Boolean
A получит значение 1, если A описана как Integer.
A получит значение True, если A описана как Boolean
10. Язык VBA
процедурный, т.е.разработчик создает процедуры, которые могут вызываться другими процедурами
позволяет разработать программу, которая запускается командами запуска и не может быть вызвана никакими командами языка VBA
содержит стандартные процедуры обработки объектов приложения, которые автоматически вставляются на процедурные листы проекта
почему этот ответ правильный нужно разобраться.

среда, 31 марта 2010 г.

Как закрыть книгу и сохранить изменения?

Private Sub ckdis()
'Application.ScreenUpdating = False
'Set ActWbk = Workbooks("Êíèãà1.xlsx")
Workbooks("Название книги.xlsx").Close SaveChanges:=True

'Application.ScreenUpdating = True
End Sub

Usage range method to entern formula in specific range

Данный макрос был расположен в каждом листе файла.
Const MyFile = "'[Кадры АБТЭц.xls]6'"
Sub aaa()
Sheets("6").Select
Dim c As Range
Dim s As String
Dim myRange As Range
Set myRange = [L13:P40,E42:I43,E58:Q67,E79:M88,E102:H110,E122:H152]
For Each c In myRange
s = c.Formula
l2 = Len(s)
pos2 = InStr(1, s, "!")
pos3 = InStr(1, s, "+")
If pos2 <> 0 Then s1 = Mid(s, pos2, pos3 - pos2): s2 = s & "+" & MyFile & s1: _
c.Formula = s2
Next c
End Sub

вторник, 2 марта 2010 г.

Loop through folders

' Нижеприведённый кусок кода
' отобразит в окне Immediate список папок
' в корневой директории на диске С
Private Sub nji()
MyPath = "C:\"
MyName = Dir(MyPath, vbDirectory)
' Возвратит первую директорию.
Do While MyName <> "" ' Начало цикла
' Игнорируем текущую директорию или заключительную
If MyName <> "." And MyName <> ".." Then
' Используем битовое сравнение, чтобы определить
' что MyName есть директория (а не файл).
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
Debug.Print MyName ' Отобразим в окне Immediate MyName
End If
MyName = Dir
End If
Loop
End Sub

четверг, 25 февраля 2010 г.

вторник, 16 февраля 2010 г.

Workbook_open

Private Sub Workbook_Open()

End Sub