Visual Basic: новости сайтов, советы, примеры кодов.
Выпуск 63.


VBNet VBMania
Голосование:

Ваш голос отсылается по E-mail владельцу сайта, после чего голоса анализируются и на отдельной странице выводятся результаты.

Нет тем.

Рассылки Subscribe.Ru
Мир программирования на Visual BASIC 5.0 и HTML.
Новости сайта IgorykSoft и советы по программированию


Рассылки Subscribe.Ru
Старые игры

Доска почёта:

Sergey Y. Tkachev
Кононенко Роман
Kirill

Ссылки:

  • Улицы VB
  • Использование VB
  • Азбука VB
  • VB на русском
  • Улицы VB
  • Кирпичики VB
  • CообЧа VB
  • Snoozex Design
  • IgorykSoft
  • Господа!!! читайте MSDN!!!

    Несколько слов от автора:

       Новый 63-ий выпуск.
    Читайте!


    Содержание выпуска




    Книги

    Переход на VB .NET. Стратегии, концепции, код (цена ~ 158 руб.)

    Эта книга была задумана как одна из первых книг о.NET, которая ознакомит читателя с основными идеями новой архитектуры и подготовит его к знакомству с более детальной литературой, например документацией Microsoft и ее толкованиями, которая неизбежно появится на рынке. Она поможет вам взглянуть на эту технологию с позиций ваших собственных рабочих планов и быстро освоить те концепции, которые покажутся необычными для большинства прогр...

    Автор(ы): Дан Эпплман, Издательство: Питер, 2002 г.


    Программирование на VB.NET. Учебный курс (цена ~ 119 руб.)

    Эта книга является вводным курсом по изучению языка программирования Visual Basic .NET. Даны основные принципы объектно-ориентированного программирования в контексте языка VB .NET, поскольку без хорошей подготовки в этой области невозможно в полной мере пользоваться всеми преимуществами VB .NET.
    Изложены азы всех аспектов языка, которыми должен владеть любой профессиональный разработчик VB .NET

    Автор(ы): Г. Корнелл, Дж. Моррисон, Издательство: Питер, 2002 г.


    VB.NET для разработчиков (цена ~ 125 руб.)

    Основная задача книги - быстро ознакомить разработчиков Visual Basic с изменениями в .NET Framework. Программисты, использующие Java, C++, Delphi или другие инструменты разработки приложений и интересующиеся Visual Basic или технологией .NET Framework, также найдут эту книгу полезной. Хотя книга посвящена Visual Basic.NET, ее основная цель - продемонстрировать взаимодействие Visual Basic и ...

    Автор(ы): Кит Франклин, Издательство: Вильямс, 2002 г.




    Остальные книги о VB можно найти
    здесь.

    наверх


    Получение информации о Windows, используя GetSystemInfo.

    Расположите на форме элемент CommandButton.

    Private Type SYSTEM_INFO
    dwOemID As Long
    dwPageSize As Long
    lpMinimumApplicationAddress As Long
    lpMaximumApplicationAddress As Long
    dwActiveProcessorMask As Long
    dwNumberOrfProcessors As Long
    dwProcessorType As Long
    dwAllocationGranularity As Long
    dwReserved As Long
    End Type
    Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
    End Type
    Private Type MEMORYSTATUS
    dwLength As Long
    dwMemoryLoad As Long
    dwTotalPhys As Long
    dwAvailPhys As Long
    dwTotalPageFile As Long
    dwAvailPageFile As Long
    dwTotalVirtual As Long
    dwAvailVirtual As Long
    End Type
    Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (LpVersionInformation As OSVERSIONINFO) As Long
    Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)
    Private Declare Sub GetSystemInfo Lib "kernel32" (lpSystemInfo As SYSTEM_INFO)
    Const PROCESSOR_INTEL_386 = 386
    Const PROCESSOR_INTEL_486 = 486
    Const PROCESSOR_INTEL_PENTIUM = 586
    Const PROCESSOR_MIPS_R4000 = 4000
    Const PROCESSOR_ALPHA_21064 = 21064
    Sub SystemInformation()
    Dim msg As String ' Status information.
    Dim NewLine As String ' New-line.
    Dim ret As Integer ' OS Information
    Dim ver_major As Integer ' OS Version
    Dim ver_minor As Integer ' Minor Os Version
    Dim Build As Long ' OS Build
    NewLine = Chr(13) + Chr(10) ' New-line.
    ' Get operating system and version.
    Dim verinfo As OSVERSIONINFO
    verinfo.dwOSVersionInfoSize = Len(verinfo)
    ret = GetVersionEx(verinfo)
    If ret = 0 Then
    MsgBox "Error Getting Version Information"
    End
    End If
    'MsgBox verinfo.dwPlatformId
    Select Case verinfo.dwPlatformId
    Case 0
    msg = msg + "Windows 32s "
    Case 1
    msg = msg + "Windows 95 "
    Case 2
    msg = msg + "Windows NT "
    End Select

    ver_major = verinfo.dwMajorVersion
    ver_minor = verinfo.dwMinorVersion
    Build = verinfo.dwBuildNumber
    msg = msg & ver_major & "." & ver_minor
    msg = msg & " (Build " & Build & ")" & NewLine & NewLine

    ' Get CPU type and operating mode.
    Dim sysinfo As SYSTEM_INFO
    GetSystemInfo sysinfo
    msg = msg + "CPU: "
    'MsgBox sysinfo.dwProcessorType
    Select Case sysinfo.dwProcessorType
    Case PROCESSOR_INTEL_386
    msg = msg + "Intel 386" + NewLine
    Case PROCESSOR_INTEL_486
    msg = msg + "Intel 486" + NewLine
    Case PROCESSOR_INTEL_PENTIUM
    msg = msg + "Intel Pentium" + NewLine
    Case PROCESSOR_MIPS_R4000
    msg = msg + "MIPS R4000" + NewLine
    Case PROCESSOR_ALPHA_21064
    msg = msg + "DEC Alpha 21064" + NewLine
    Case Else
    msg = msg + "(unknown)" + NewLine
    End Select
    msg = msg + NewLine
    ' Get free memory.
    Dim memsts As MEMORYSTATUS
    Dim memory As Long
    GlobalMemoryStatus memsts
    memory = memsts.dwTotalPhys
    msg = msg + "Total Physical Memory: "
    msg = msg + Format(memory \ 1024, "###,###,###") + "K" + NewLine
    memory = memsts.dwAvailPhys
    msg = msg + "Available Physical Memory: "
    msg = msg + Format(memory \ 1024, "###,###,###") + "K" + NewLine
    memory = memsts.dwTotalVirtual
    msg = msg + "Total Virtual Memory: "
    msg = msg + Format(memory \ 1024, "###,###,###") + "K" + NewLine
    memory = memsts.dwAvailVirtual
    msg = msg + "Available Virtual Memory: "
    msg = msg + Format(memory \ 1024, "###,###,###") + "K" + NewLine
    MsgBox msg, vbOKOnly, "System Info"
    End Sub

    Private Sub Command1_Click()
    Call SystemInformation
    End Sub

    наверх


    Как узнать, какая операционная система установлена: Win98 или NT

    Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
    Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
    End Type
    Const VER_PLATFORM_WIN32s = 0
    Const VER_PLATFORM_WIN32_WINDOWS = 1
    Const VER_PLATFORM_WIN32_NT = 2
    Public Function WinNT() As Boolean
    Dim info As OSVERSIONINFO
    info.dwOSVersionInfoSize = Len(info)
    GetVersionEx info
    WinNT = (info.dwPlatformId = VER_PLATFORM_WIN32_NT)
    End Function
    Public Function Win98() As Boolean
    Dim info As OSVERSIONINFO
    info.dwOSVersionInfoSize = Len(info)
    GetVersionEx info
    Win98 = (info.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS And info.dwMinorVersion >= 10 And info.dwMajorVersion = 4)
    End Function

    Private Sub Form_Resize()
    bWindowsNT = WinNT()
    Print bWindowsNT
    bWindows98 = Win98()
    Print bWindows98
    End Sub

    наверх


    Определить, как долго запущена Windows

    'Этот пример покажет время в милисекундах (1000 миллисекунд = 1 секунда). Если хотите получить секунды - разделите на 1000.

    Private Declare Function GetTickCount Lib "kernel32" () As Long
    Private Sub Form_Load()
    MsgBox GetTickCount()
    End Sub

    'Более подробнее расписанная статистика.
    Private Declare Function GetTickCount Lib "kernel32" () As Long
    Private Sub Command1_Click()
    Dim a_hour, a_minute, a_second
    a = Format(GetTickCount() / 1000, "0") 'всего секунд
    a_hour = Int(a / 3600)
    a = a - a_hour * 3600
    a_minute = Int(a / 60)
    a_second = a - a_minute * 60
    MsgBox "Ваш компьютер работает в эту загрузку " & Str(a_hour) & " часов " & Str(a_minute) & " минут" & Str(a_second) & " секунд"
    End Sub

    'ИЛИ ТАКОЙ ПРИМЕР

    'Расположите на форме элемент ListBox и элемент Timer

    Private Declare Function GetTickCount& Lib "Kernel32" ()

    Private Sub Form_Load()
    Timer1.Interval = 1000
    End Sub

    Private Sub Timer1_Timer()
    MS = GetTickCount()
    SekGesamt = MS \ 1000
    Std = (SekGesamt \ 3600)
    Min = (SekGesamt - (Std * 3600)) \ 60
    Sek = (SekGesamt - (Std * 3600) - (Min * 60))
    t = Format(Std, "00") & ":" & Format(Min, "00") & ":" & Format(Sek, "00")
    Label1.Caption = t
    End Sub

    наверх


    Определить способ запуска Windows

    Данный пример покажет, в каком режиме запуска работает операционная система Windows

    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    Private Const SM_CLEANBOOT = 67
    Private Sub Form_Load()
    Select Case GetSystemMetrics(SM_CLEANBOOT)
    Case 1: MsgBox "Safe Mode"
    Case 2: MsgBox "Safe Mode with Network support."
    Case Else: MsgBox "Windows is running normally."
    End Select
    End Sub

    наверх


    Определение рабочей области Windows

    то есть часть экрана, не затененного панелью задач или другими прикладными областями Расположите на форме элемент CommandButton. Const SPI_GETWORKAREA = 48 Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Private Sub Command1_Click() Dim lngTop, lngLeft, lngRight, lngBottom As Long Dim typRect As RECT Call SystemParametersInfo(SPI_GETWORKAREA, vbNull, typRect, 0) With typRect lngTop = .Top lngLeft = .Left lngRight = .Right lngBottom = .Bottom End With Print lngTop Print lngLeft Print lngRight Print lngBottom End Sub

    наверх


    Выключение/перезагрузка Windows

    Как показывает практика, вопрос выключения и перезагрузки Windows программно интересует очень многих. Я бы тоже хотел внести свою лепту в ответ на этот вопрос. Уже долгое время я пользуюсь этим примером. Что примечательно: при использовании данного примера, система поочередно опрашивает все процессы в системе, и если требуется в какой-либо программе сохранения каких-либо данных, то вы всегда можете сделать отмену процесса выключения компьютера. При использовании данного примера вы можете использовать одну из EWX_-констант.

    EWX_LOGOFF - вход в систему под новым именем
    EWX_SHUTDOWN - выключение компьютера
    EWX_REBOOT -перезагрузка компьютера
    EWX_FORCE - принудительный вход под новым именем

    'КОД ФОРМЫ

    Private Sub mnuCompOff_Click()
    Call ShutDown(EWX_SHUTDOWN)
    End Sub

    Private Sub mnuCompReboot_Click()
    Call ShutDown(EWX_REBOOT)
    End Sub

    'КОД МОДУЛЯ

    Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
    Private Const READ_CONTROL = &H20000
    Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
    Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
    Private Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)

    Public Enum TokenRights
    TOKEN_ASSIGN_PRIMARY = &H1
    TOKEN_DUPLICATE = &H2
    TOKEN_IMPERSONATE = &H4
    TOKEN_QUERY = &H8
    TOKEN_QUERY_SOURCE = &H10
    TOKEN_ADJUST_PRIVILEGES = &H20
    TOKEN_ADJUST_GROUPS = &H40
    TOKEN_ADJUST_DEFAULT = &H80
    TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or TOKEN_DUPLICATE Or TOKEN_IMPERSONATE Or TOKEN_QUERY Or TOKEN_QUERY_SOURCE Or TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
    TOKEN_READ = (STANDARD_RIGHTS_READ Or TOKEN_QUERY)
    TOKEN_WRITE = (STANDARD_RIGHTS_WRITE Or TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
    TOKEN_EXECUTE = (STANDARD_RIGHTS_EXECUTE)
    End Enum

    Public Enum PrivilegeAttributes
    SE_PRIVILEGE_ENABLED_BY_DEFAULT = &H1
    SE_PRIVILEGE_ENABLED = &H2
    SE_PRIVILEGE_USED_FOR_ACCESS = &H80000000
    End Enum

    Public Enum ExitOptions
    EWX_LOGOFF = 0
    EWX_SHUTDOWN = 1
    EWX_REBOOT = 2
    EWX_FORCE = 4
    End Enum

    Public Enum TokenAccess
    TokenUser = 1
    TokenGroups = 2
    TokenPrivileges = 3
    TokenOwner = 4
    TokenPrimaryGroup = 5
    TokenDefaultDacl = 6
    TokenType = 8
    TokenImpersonationLevel = 9
    TokenStatistics = 10
    End Enum

    Type LUID
    lowPart As Long
    HighPart As Long
    End Type

    Type LUID_AND_ATTRIBUTES
    pLuid As LUID
    Attributes As PrivilegeAttributes
    End Type

    Type PTOKEN_PRIVILEGES
    PrivilegeCount As Long
    Privileges(0) As LUID_AND_ATTRIBUTES
    End Type

    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
    Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As TokenRights, ByRef TokenHandle As Long) As Long
    Private Declare Function LookupPrivilegeValueA Lib "advapi32" (ByVal lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LUID) As Long
    Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, ByRef NewState As PTOKEN_PRIVILEGES, ByVal BufferLength As Long, ByRef PreviousState As Long, ByRef ReturnLenght As Long) As Long
    Private Declare Function AdjustTokenPrivilegesOld Lib "advapi32" Alias "AdjustTokenPrivileges" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, ByRef NewState As PTOKEN_PRIVILEGES, ByVal BufferLength As Long, ByRef PreviousState As PTOKEN_PRIVILEGES, ByRef ReturnLenght As Long) As Long
    Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As ExitOptions, ByVal dwReserved As Long) As Long

    Public Function ShutDown(Operation As ExitOptions) As Long
    Dim lngProcess As Long
    Dim lngReturn As Long
    Dim lngToken As Long
    Dim udtLUID As LUID
    Dim lngTokenPrivileges As TokenRights
    Dim udtTokenPrivNew As PTOKEN_PRIVILEGES
    lngProcess = GetCurrentProcess()
    lngTokenPrivileges = TOKEN_ADJUST_PRIVILEGES
    lngReturn = OpenProcessToken(lngProcess, lngTokenPrivileges, lngToken)
    lngReturn = LookupPrivilegeValueA(vbNullString, "SE_SHUTDOWN_NAME", udtLUID)
    udtTokenPrivNew.PrivilegeCount = 1
    udtTokenPrivNew.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED
    udtTokenPrivNew.Privileges(0).pLuid = udtLUID
    lngReturn = AdjustTokenPrivileges(lngToken, 0, udtTokenPrivNew, 0&, 0, 0&)
    ShutDown = ExitWindowsEx(Operation, 0)
    End Function

    наверх


    Мои программы

    BalloonMessage for MS Agent

       BalloonMessage for Microsoft Agent реализует диалог программы с пользователем, используя при этом технологию Microsoft Agent. OCX реализует три типа диалоговых окон: InputBox, MsgBox и MsgLabels.

    Автор: Шатрыкин Иван. Соавтор: Павел Сурменок.

    наверх


    Вопрос/Ответ

    Здесь Вы можете задать вопрос, или ответить на уже имеющиеся вопросы.

    Вопросы:


    Автор вопроса:
    Меркуль Евгений Юрьевич

    Ответ ожидается по этому адресу

       У меня несколько вопросов (пишу на VBasice 3.0 и Visual Basic 6.0) :
    1)Где можно найти программу для перевода из VB любой версии в DELPHI (желательно 6-версии)?
    2)Как сделать , чтобы программа автоматически запускалась после загрузки КОМПа?
    3) Как работать с реестром?
    4) Допустим я нашел нужную мне функцию winAPI, как определить, какие к ней нужны константы и тд?
    6)Можно ли сделать так, чтобы тому, кому я даю проги не надо было устанавливать VBasic 3.0 или 6.0 ?


    Автор вопроса: Sergey

    Ответ ожидается по этому адресу

       Как считать данные ия файлов dbf с помощью ADO?


    Автор вопроса: OLEG

    Ответ ожидается по этому адресу

       Никто не янает как проверить яапущенность какой-либо программы.


    Автор вопроса: Анатолий

    Ответ ожидается по этому адресу

       Можно ли с помощью VB распаковать или упаковать файл, неприменяя программы-архиваторы и оператор Shell.В частности интересует возможность распаковывать файлы, упакованые HA и ZIP архиваторами.


    Автор вопроса: sv

    Ответ ожидается по этому адресу

       Как поместить свою программу в SysTray, где отображаются часы и раскладка клавиатуры.


    Автор вопроса: DIM

    Ответ ожидается по этому адресу

       Подскажите как можно отследить обь?м информации прошедшей чере инетсоединение


    Автор вопроса: Real

    Ответ ожидается по этому адресу

       Подскажите пожалуйста, как через VB получить данные о том кто в текущий момент подключен к компьютеру (к расшареным папкам) и кто что скачивает, и как разорвать нежелательное соединение?


    Автор вопроса: Сергей

    Ответ ожидается по этому адресу

       1.Подскажите, как в VB динамически соядавать массивы: в ходе программы яаполняется список.Каждому элементу списка должен соответствовать массив.Сколько будет элементов-неиявестно.Так как давать имена этим динамически соядаваемым массивам.
    2.Как соядавать таблицы Word ия VB.


    Автор вопроса: Николай

    Ответ ожидается по этому адресу

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


    Автор вопроса: GEKA

    Ответ ожидается по этому адресу

       Подскажите плиzzzzz где можно найти инфо:

    1)Как при помощи VB работать с Active Directory
    2)Как при помощи VB работать с BROADCAST


    Автор вопроса: sv

    Ответ ожидается по этому адресу

       Как использовать параметры в командной строке при загрузке программы, откомпилированной в EXE файл?


    Автор вопроса: Сергей

    Ответ ожидается по этому адресу

       Пишу программу, где по ходу яаполнения списка сояда?тся динамический массив. На каждый элемент списка-один массив.Элементов может быть сколько угодно.Как давать имена таким массивам? По идее List1.List(i)в цикле, но на такие имена VB ругается.


    Автор вопроса: alek

    Ответ ожидается по этому адресу

       Можно ли программно записывать в файл ресурсов? И если можно,как его оттуда вынемать.


    Автор вопроса: exhumator

    Ответ ожидается по этому адресу

       Люди, подскажите, плз, как можно сделать так, чтобы моя прога при свертывании окна кидалась не на панель задач, а в трей.


    Автор вопроса: sv

    Ответ ожидается по этому адресу

       Программа должна открыть файл A.TXT в своем каталоге. Как это осуществить, если путь к программе меняется?


    Автор вопроса: Shark

    Ответ ожидается по этому адресу

       1.Как проследить яапуск конкретной программы?
    2.Как получить список открытых программ?


    Автор вопроса: darknez@mail.kz

    Ответ ожидается по этому адресу

       как можно назначить hotkey, для вызова проги, т.е. я свернул её в трэй и мне надо её вызвать.


    Автор вопроса: sv

    Ответ ожидается по этому адресу

       1) Есть прога убирающая с экрана значки, а как убрать значки из Панели Задач.
    2) Как програмно изменить разрешение экрана.


    Автор вопроса: White_Max

    Ответ ожидается по этому адресу

       Как отключить клавиатуру?


    Автор вопроса: Alexey

    Ответ ожидается по этому адресу

       Подскажите как объявлять перечисления на VB_6.0.




    Ответы:


    Вопрос:

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

    Private Sub CommandButton1_Click()
    Dim cell As Range
    Dim ans(200) As Integer
    Dim err
    err = 0
    i = 0
    '--------Перебор ячеек с вводимыми значениями-------
    For Each cell In Range("B3:F42").Cells
         ans(i) = cell
         i = i + 1
    Next cell
    '--------Переход на лист с эталонными значениями----
    Sheets("Лист2").Select
    '--------Перебор ячеек с правильными значениями и сравнение-------
    i = 0
    For Each cell In Range("G1:K40").Cells
         If cell <> ans(i) Then
             err = err + 1
         End If
         i = i + 1
    Next cell
    '--------Возврат на лист с вводимыми значениями-----
    Sheets("Лист1").Select
    End Sub

       Происходит же следующее:
       - Он выбирает введенные значения с Листа1
       - Переходит на Лист2 (по крайней мере, на экране это видно)
       А вот диапазон G1:K40 он все равно берет с Листа1 (как бы насквозь Листа2). И, следовательно, сравнивает с пустыми ячейками.
       Так вот, собственно, сам вопрос: как сделать так, чтобы диапазон G1:K40 выбирался именно с Листа2, а не с Листа1?

    Ответ:

    Автор ответа: Яблоновский Я.А.

    Попробуй присвоить диапазону префикс - имя нужного листа:

    Range("Лист2!G1:K40")

    У меня такое обращение работало (Excel 2000 под Win98SE).


    Вопрос:

       Можно ли в VB узнать о том, что работает винт(дублировать лампочку работы винта)...
    Если да...
    То как привязать к TextBoxs`у...
    Например:
    Когда заработал винт(начал чё нить читать)... то в TextBoxs`е высвечивается "ON", а когда винт находится в пассивном режиме-"OFF"

    Ответ:

    Автор ответа: audit

    ' Вот что у меня получилось:
      
    Sub test1()
    Dim ans(200) As Integer
    Dim Cell As Range
    Dim err, I
    err = 0
    I = 0
    ' Переходить на другой лист не обязательно, можно брать значения из любого листа
    '--------Перебор ячеек с вводимыми значениями-------
    For Each Cell In Sheets("Лист1").Range("B3:F42").Cells
          ans(I) = Cell
          I = I + 1
    Next Cell
    '--------Перебор ячеек с правильными значениями и сравнение-------
    I = 0
    For Each Cell In Sheets("Лист2").Range("G1:K40").Cells
          If Cell <> ans(I) Then err = err + 1
          I = I + 1
    Next Cell
    End Sub
      
    Еще желательно сравнивате не ячейки, а их значения (cells.value), т.к. возможны траблы с различными форматами данных (сравнение "1" и 1 !!!!).
      
    Использовал VBA, Office XP,Win98SE
    Если что не получилось, пиши:
    pim76@mail.ru


    Можете заполнить эту форму, либо отослать вопрос СЮДА

    Форма для добавления нового вопроса в этот раздел. Информация отсылается по E-mail владельцу сайта.
    Текст сообщения:
    Ваше имя
    E-mail для ответа

    наверх


    Выпуск подготовили:

    Сурменок Павел