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


VBNet VBMania
Ссылки:

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

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

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


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




    Aslof рекомендует

       Ищешь фильм?
    http://subscribe.ru/catalog/rest.cinema.filmforyou
    Сайт рассылки - http://aslof.balzer.ru/


    Как приостановить выполнение программы на некоторое время?

    Вопрос:

    Как сделать такую вещь: программа в процессе работы должна сделать паузу, ну скажем на 2 секунды, и в это время ничего не делать! То есть просто подождать и продолжать выполнение работы.

    Ответ:

      Для начала нужно объявить в форме или в модуле (тогда печатать Private или Public соответственно) в разделе "(Generals)" объявить API-функцию Sleep следующим образом:

    Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

      Теперь вызвать эту функцию: Sleep (количество миллисекунд), где количество милисекунд это число от 1 до ~64000. Для справки: 1 секунда = 1000 миллисекунд.

    Игорь

    наверх


    Как запустить программу или открыть файл в VB?

    Вопрос:

    Как можно в приложении, написанном на Visual Basic, запустить программу или открыть какой-либо файл, в программе, которая к нему "привязана"?

    Ответ:

    Для запуска программы используется функцияShell с таким синтаксисом:

    Shell(Имя_Файла_программы[, Тип_Окна])

    В следуйщем фрагменте кода с помощю функции Shell запускается калькулятор:

    Private Sub Command1_Click()
    Shell (C:\windows\calk.exe, vbNormalFocus)
    End Sub

    Yaroslav

    наверх


    Как сортировать строки в Excel с помощью VBA?

    Вопрос:

    Есть текстовые данные, загружающиеся в таблицу Excel. Нужно анализировать строки таблицы пусто/заполнено и сортировать заполненные в определ. порядке (сверху вниз подряд без пропусков). Как это сделать?

    Ответ:

    Первый же ответный вопрос -- в каком виде данные представлены в текстовом файле и как из этого текстового файла берутся? (можно ведь открывать текстовый файл с разделителями колонок как Excel'ный, или открывать как файл для последовательного чтения). У меня, собственно, куча самых разных примеров на эту тему (работа такая), все зависит от того, что надо. Анализировать же можно довольно просто -- при занесении данных в таблицу:

    Dim emptyRow As Boolean
    Dim i As Integer ' для нумерации строк исходного файла
    Dim j As Integer ' для нумерации столбцов
    Dim k As Integer ' для нумерации строк в выходном файле
    Dim dataStr As String
    '...
    'цикл заполнения соотв. ячеек значениями
    For i = 1 To <rowAmount>
       emptyRow = True
       For j = 1 To <colNum>
           'dataStr = Trim(...)
           If dataStr <> "" Then
              Cells(k, j).Value = dataStr
              emptyRow = False
           End If
       Next j
       If Not emptyRow Then k = k + 1 ' если строка не пустая увеличиваем счетчик строк в выходном файле
    Next i

    Потом упорядочить, зная количество записанных строк, довольно легко:

    Range(Cells(<N_перв_строки>, 1), Cells(<N_посл_строки>, <N_посл_столбц>)).Sort Columns(1)
    ' сортировка области ячеек по первому столбцу этой области

    Kirill

    наверх


    Как в БД Access в текстовое поле вставить шаблон (задать маску ввода)?

    Вопрос:

    Есть база данных в mdb формате. На форме в текстовом поле необходимо при вводе числа (или при помещении его из базы) отделять по три знака. Не 1234567890, а 1 234 567 890 . И как в текстовое поле ставить шаблон? То есть, что бы было __/__/__ - для даты.

    Ответ:

    В конструкторе выбираешь свойства>данные>маска ввода и вводишь
    \ 999\ 999\ 999\ 900;0
    , сохраняя пробелы после слеша.

    Иван Есаулков

    наверх


    Как удалить элементы из середины массива?

    Вопрос:

    Есть массив Arrray(100). Как можно удалить срез массива, например, с 40 по 70 элементы.

    Ответ:

    Нужно просто переписать элементы с 70 на 100 на место удаляемых и изменить размер массива:

    For lIdx = 71 To 100
      Arrray(lIdx-31)= Arrray(lIdx)
    Next
    redim preserve Arrray(69)

    Sergey Morenets

    наверх


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

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

    Вопросы:


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

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

       Как создать папку, доступную в локальной сети, или как этот доступ осуществить?.. Данная фишка необходима для обновления юзерских прог из этой папки...


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

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

       Есть .ехе с MDI-окном, к ней подкрепляется .dll'ка, которая содержит репорты. Как репорты сделать дочерними по отношению .ехе MDI окна?


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

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

       Как в DataReport динамически добавить Label, ну и вообще какие либо объекты, или если такое не возможно, то где это возможно?


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

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

       Я пишу утилиту для обработки некоторых данных из имеющихся dbf таблиц в мою БД, после того как я обработал нужные мне данные я их удаляю.
    Но вот тут и грабли, dbf таблицы не удаляют записи, а только помечают их на удаление. Как упаковать эти данные при связке dbf & vb & ADO?


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

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

       Как узнать тип процессора, его тактовую частоту и объем оперативной памяти? Юзал GetSystemInfo, но определить удалось не все.


    Автор вопроса: 3BEPb

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

       Как сделать чтобы при сворачивании формы она сворачивалась в трей?


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

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

       Помогите написать прогу, которая при запуске проверяет, запущенна какая-либо определённая программа, и, если запущена, то перезагружается комп.


    Автор вопроса: Александр

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

       Подскажите хороший сайт по API функциям VB. Желательно русский, с описанием и примерами.


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

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

       Как напечатать на экране слово, ну типа так как методом Print, но только не на форме а на экране поверх всех окон, а потом по возможности это дело стереть?




    Ответы:


    Вопрос:

       Как использовать стиль XP в VB приложениях?
    Слышал, что нужно юзать .manifest файл и ресурс номер 24.
    Так ли это? И можно пример...

    Ответ:

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

    Открываешь "блокнот"? копируешь туда это:

    manifestVersion="1.0">
    Enter your Description Here name="Microsoft.Windows.Common-Controls" version="6.0.0.0" language="*" processorArchitecture="*"
    publicKeyToken="6595b64144ccf1df" />


    Файл сохраняешь, переименовываешь в VB6.EXE.manifest и кидаешь в

    C:\Program Files\Microsoft Visual Studio\VB98

    и всё, кстати вместе с твоим .exe его можно тоже положить в один каталог.



    Ответ:

    Автор ответа: C...R...a...S...H

    private Declare Function InitCommonControlsEx Lib "comctl32" ()
      
    public sub Form_load()
    InitCommonControlsEx
    end sub
      
    Где твой Exe, должен быть файл "Имя Exe".manifest.


    Вопрос:

       Нужен код для генерации паролей случайным образом из определенного набора символов. Может кто-то встречал, а то самому написать просто некогда.

    Ответ:

    Автор ответа: Михаил

    Dim alp as string ' алфавит (исходный материал, из которого образовывать пароль)
    Dim alplenght as long ' Длина алфавита
    Dim i as long, x as long, outcome as string, passwordlenght as long

    passwordlenght = number 'вставьте число вместо number

    alplenght = len(alp) ' вычисляем длину алфавита
    randomize timer ' запускаем генератор случайных чисел
    for i= 1 to passwordlenght
    x = int(rnd*alplenght)
    outcome = outcome + mid$(alp, x, 1)
    next i

       На выходе получаем в строчке outcome - случайный пароль.



    Ответ:

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

    У меня сайте http://anakonda.nm.ru есть прога Gen Pass с исходниками.



    Ответ:

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

    На форме нужны:

    2 TextBox txtNumeric и txtGenNewPass
    1 Command cmdGenNewPass
    Длинну пароля можно установить в цикле i=0 to ...

    Private Sub cmdGenNewPass_Click()
    Dim strNewPass As String, strKeyPass As String, i As Integer, lngValue As Long, lngValueKey As Long
    Randomize
    For i = 0 To 8
    lngValue = Int((126 - 33 + 1) * Rnd + 33)
    lngValueKey = Int((126 - 33 + 1) * Rnd + 33)
    'Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
    'upperbound is the highest number in the range, and lowerbound is the lowest number in the range.
    strKeyPass = strKeyPass & lngValueKey
    strNewPass = strNewPass & Chr(lngValue)
    Next i
    txtNumeric.Text = strKeyPass
    txtGenNewPass.Text = strNewPass
    End Sub


    Вопрос:

       Как запускать файлы с рашрирением *.exe *.txt и другие?

    Ответ:

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

    Есть команда Shell. Используется для запуска программ, для открытия зарегистрированных типов файлов.

    Shell "имя_команды"

    или

    Shell "путь_к_программе"


    Вопрос:

       Как открыть файл Excel c паролем (пароль известен), желательно VB script?

    Ответ:

    Автор ответа: Тим

    Dim ex As Excel.Application
    Set ex = New Excel.Application
    With ex
         .Workbooks.Open "filename", , , , "myPassword", "WriteResPassword"
    End With

    Там ещё куча параметров. Но тебе, я так понял, надо один из этих использовать.



    Ответ:

    Автор ответа: Т.А.Ф.

    Workbooks.Open Filename:="C:\Мои документы\заявки.xls", Password:="пароль"


    Вопрос:

       I am a beginner in VB and i have a beginners' problem.

    I have to write data in binary format. Since the file will be read by some application i cannot change its structure or format.

    The problem I faced are following. I write 3 values in some binary file:

    string s1 = "W"
    Integer value i1 = 10123
    Double value v1 = 10.8.

    When I would like to control data in the file and read it I get instead of expected other values:

    s1 = "W"
    i1 = 10071
    v1 = 10.799999999948

    So, the integer value is not what i expected to find. Could anybody explain what I did wrong in my code?

    The second question is following. I would like to read the data in the order:

    string s1, integer i1, double v1.

    I get this sequence only if I put data in the binary file in the way I have done it in my sub WriteData(). How could be done it in the order I wish to read?


    Could anybody help me?




    Private Sub writeData()
         Dim typInfo(5) As Double, length As Integer, resolution As String
        
         Dim v1 As Double
         v1 = 10.8
        
         Dim i1 As Integer
         i1 = 10123
        
         Dim s1 As String
         s1 = "W"

         Open ThisWorkbook.Path & "Test.bin" For Binary Access Read Write As #1 Len = Len(v1)
             Put #1, , v1
         Close 1
        
         Open ThisWorkbook.Path & "Test.bin" For Binary Access Read Write As #1 Len = Len(i1)
             Put #1, , i1
         Close 1
        
         Open ThisWorkbook.Path & "Test.bin" For Binary Access Read Write As #1 Len = Len(s1)
             Put #1, , s1
         Close 1

    End Sub




    Private Sub readData()
         Dim typInfo(5) As Double, length As Integer, resolution As String
        
         Dim v1 As Double
         Dim i1 As Integer
         Dim s1 As String
         s1 = "D"
        
         Open ThisWorkbook.Path & "Test.bin" For Binary Access Read Write As #1 Len = Len(s1)
             Get #1, , s1
         Close 1

         Open ThisWorkbook.Path & "Test.bin" For Binary Access Read Write As #1 Len = Len(i1)
             Get #1, , i1
         Close 1
        
         Open ThisWorkbook.Path & "Test.bin" For Binary Access Read Write As #1 Len = Len(v1)
             Get #1, , v1
         Close 1
        
         Debug.Print s1, i1, v1

    End Sub

    Ответ:

    Автор ответа: Михаил

    А если попытаться заблокировать доступ к открытому файлу ?

    Open File$ for Binary Access Read Write LOCK WRITE As #1



    Ответ:

    Автор ответа: Phoenix Group

    Private Sub Form_Load()
    writeData
    readData
    End Sub

    Private Sub writeData()
          Dim typInfo(5) As Double, length As Integer, resolution As String
         
          Dim v1 As Double
          v1 = 10.8
         
          Dim i1 As Integer
          i1 = 10123
         
          Dim s1 As String
          s1 = "W"

          Open "c:\Test.bin" For Binary Access Read Write As #1
              Put #1, , s1
              Put #1, , i1
              Put #1, , v1
          Close 1

    End Sub

    Private Sub readData()
          Dim typInfo(5) As Double, length As Integer, resolution As String
         
          Dim v1 As Double
          Dim i1 As Integer
          Dim s1 As String
          s1 = "D"
          
          Open "c:\Test.bin" For Binary Access Read Write As #1
             Get #1, , s1
             Get #1, , i1
             Get #1, , v1
          Close 1
         
          Debug.Print s1, i1, v1

    End Sub

    If you write , then , and then variable, you'd better to read variables in the same order, e.g. first of all , then e.t.c, huh?



    Ответ:

    Автор ответа: C...R...a...S...H

    private Sub WriteDate()
          Dim v1 As Double
          v1 = 10.8
          Dim i1 As Integer
          i1 = 10123
          Dim s1 As String
          s1 = "W"
      Open ThisWorkbook.Path & "\Test.bin" For Binary As #1
         Put #1, , v1
         Put #1, , i1
          Put #1, , s1
          Close 1
    End Sub
    sub ReadData()
          Dim v1 As Double
          Dim i1 As Integer
          Dim s1 As String
        
          Open ThisWorkbook.Path & "\Test.bin" For Binary As #1
              Get #1, , v1
              Get #1, , i1
              Get #1, , s1
    Close 1
    Debug.Print s1, i1, v1
    end sub




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

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

    наверх


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

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