С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/37: Рейтинг темы: голосов - 37, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 12

Запуск ping с параметрами n и l и последующей отправкой инфо на email

05.06.2012, 14:26. Показов 8013. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток!
Помогите пожалуйста написать макрос.
1) Пользователь открывает excel файл. В Ячейке A2 из выпадающего списка выбирает "Область", а в ячейке B2 выбирает "Город"
2) В excel файле нажимает кнопку "ТЕСТ СЕТИ"
3) После нажатия "ТЕСТ СЕТИ", должно запускаться выполнение команды ping "адрес сервера" -n 80 -l 2000
4) После выполнения команды, лог должен быть сохранен в txt файле, первая строка которого должна содержать "Область";"Город"

Я в этом деле новичок, подскажите как лучше сделать!!!!

Добавлено через 16 часов 30 минут
Пинг проходит. файл создается.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Function PingResponseTimeEx(ByVal ComputerName$, Optional ByVal BufferSize As Long = 1024) As Long
     
    Dim i As Integer
    Dim txt As String
 
    Dim oPingResult As Variant: PingResponseTimeEx = -1: On Error Resume Next
       
    For i = 1 To 10
        For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
            ("SELECT * FROM Win32_PingStatus WHERE Address = '" & ComputerName & "' and BufferSize = " & BufferSize)
            If IsObject(oPingResult) Then
                If oPingResult.StatusCode = 0 Then    
                   txt = txt & (ComputerName$ & ": " & BufferSize & "; Step: " & i & "; " & "Time: " & oPingResult.ResponseTime & "; ") & vbCrLf
                Else    
                   txt = txt & (ComputerName$ & ": " & BufferSize & "; Step: " & i & "; " & "Error: " & oPingResult.StatusCode & "; ") & vbCrLf
                End If
              End If
        Next
    Next i
   
    If txt Then WriteFile txt
   
End Function
 
Function WriteFile(txt)
  Dim oFSO, oFile
  Set oFSO = CreateObject("Scripting.FileSystemObject")
  Set oFile = oFSO.CreateTextFile(oFSO.BuildPath("C:\", "test.txt"))
  oFile.Write txt
  oFile.Close: Set oFile = Nothing
  Set oFSO = Nothing
  Set oFile = Nothing
End Function
 
Sub TestPingFunction()
    PingResponseTimeEx ("google.ru")
    MsgBox "Тестирование канала связи закончено! Спасибо!"
End Sub

Подскажите плиз, как сформировать email с файлом test.txt в котором первая строчка будет содержать "Область";"Город"
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.06.2012, 14:26
Ответы с готовыми решениями:

Как называется инфо, которая введена в поля интерфейса для последующей записи в базу данных?
У меня еще один вопросик. При описании прецедентов своей программы хочу описать следующий прецедент "Запись информации о клиенте...

Преобразование класса с последующей отправкой на сервер
Хочу реализовать простенькую синхронизацию экземпляров класса содержащего всего 3 поля с некой информацией. Вопрос: Во что следует...

Поиск файлов на всех дисках с последующей отправкой их на FTP
Всех приветствую. Прошу знатоков о помощи. У меня есть .bat файл, с помощью которого некоторые файлы (путь к которым указан в коде)...

23
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
05.06.2012, 15:01
Отправка письма через Outlook 2007
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    Dim oOutlook As Outlook.Application         'Приложение Outlook
    Dim oItem As Outlook.MailItem               'Письмо
    
    'Проверяем, запущен ли Outlook,  если нет - запускаем
    If GetObject("winmgmts:\\.\root\cimv2").ExecQuery(_
        "SELECT * FROM Win32_Process WHERE Name='Outlook.exe'").Count = 0 Then Shell ("outlook")
    
    'Присваиваем переменную и создаем новое письмо
    Set oOutlook = New Outlook.Application
    Set oItem = oOutlook.CreateItem(olMailItem)
    
    'Вводим параметры письма
    With oItem
        .To = "<Адрес отправителя>"
        .Subject = "<Тема письма>"
        .Body = "<Содержание письма>"
        .Attachments.Add ("<Путь к файлу>")
        'Отправляем (можно сделать ".Display" вместо ".Send", 
        'чтобы проверить параметры и отправить письмо руками.
        .Send
    End With
1
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 12
06.06.2012, 12:16  [ТС]
Спасибо большое!
Подскажите пожалуйста, как в тему письма вставить значение из excel файла?
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
06.06.2012, 12:44
Лучший ответ Сообщение было отмечено как решение

Решение

Вместо
Visual Basic
1
        .To = "<Адрес отправителя>"
читать
Visual Basic
1
        .To = "<Адрес получателя>"
Добавлено через 39 секунд
Цитата Сообщение от Dany_crm Посмотреть сообщение
Подскажите пожалуйста, как в тему письма вставить значение из excel файла?
Какое именно значение?

Добавлено через 26 минут
Переписал немного ваш код, добавив все, что нужно:
Ping и отправка результатов на почту
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Option Explicit
 
Const sPath As String = "C:\"                       'Путь к файлу
Const sFileName As String = "test.txt"              'Имя файла
Const sPingAddress As String = "google.ru"          'Пингуемый адрес
Const sMailTo As String = "Person@mail.com"         'Адрес эл.почты получателя
 
Function PingResponseTimeEx(ByVal ComputerName$, Optional ByVal BufferSize As Long = 1024) As String
    Dim i As Integer
    Dim txt As String
    
    Dim oPingResult As Variant: PingResponseTimeEx = -1: On Error Resume Next
       
    For i = 1 To 10
        For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
            ("SELECT * FROM Win32_PingStatus WHERE Address = '" & ComputerName & "' and BufferSize = " & BufferSize)
            If IsObject(oPingResult) Then
                If oPingResult.StatusCode = 0 Then
                   txt = txt & (ComputerName$ & ": " & BufferSize & "; Step: " & i & "; " & "Time: " & oPingResult.ResponseTime & "; ") & vbCrLf
                Else
                   txt = txt & (ComputerName$ & ": " & BufferSize & "; Step: " & i & "; " & "Error: " & oPingResult.StatusCode & "; ") & vbCrLf
                End If
              End If
        Next
    Next i
    
    PingResponseTimeEx = txt
End Function
 
 
Sub WriteFile(txt As String, Region As String)
    Dim oFSO, oFile
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFile = oFSO.CreateTextFile(oFSO.BuildPath(sPath, sFileName))
    oFile.writeline Region
    oFile.write txt
    oFile.Close
    Set oFile = Nothing
    Set oFSO = Nothing
End Sub
 
Sub TestPingFunction()
    Dim sRegion As String           'Область и город
    Dim sResponse As String         'Ответ Ping
    
    sRegion = Me.Cells(2, 1) & ";" & Me.Cells(2, 2)
    sResponse = PingResponseTimeEx(PingAddress)
    WriteFile sResponse, sRegion
    SendMail sRegion
    MsgBox "Тестирование канала связи закончено! Спасибо!"
End Sub
 
Sub SendMail(Region As String)
    Dim oOutlook As Outlook.Application         'Приложение Outlook
    Dim oItem As Outlook.MailItem               'Письмо
    
    'Проверяем, запущен ли Outlook,  если нет - запускаем
    If GetObject("winmgmts:\\.\root\cimv2").ExecQuery("SELECT * FROM Win32_Process WHERE Name='Outlook.exe'").Count = 0 Then Shell ("outlook")
    
    'Присваиваем переменную и создаем новое письмо
    Set oOutlook = New Outlook.Application
    Set oItem = oOutlook.CreateItem(olMailItem)
    
    'Вводим параметры письма
    With oItem
        .To = sMailTo
        .Subject = Region
        .Attachments.Add (sPath & sFileName)
        'Отправляем (можно сделать ".Display" вместо ".Send",
        'чтобы проверить параметры и отправить письмо руками)
        'Письмо отправляется пустым (не задано свойство .Body)
        .Send
    End With
End Sub


Досаточно поставить в константы в начале кода нужные вам значения и все должно заработать.
NB вам понадобятся библиотеки (Tools -> References) "Microsoft Scripting Runtime" (scrrun.dll) и "Microsoft Outlook 12.0 Object Library"
3
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 12
06.06.2012, 16:08  [ТС]
Странно. Раньше не ругался, теперь говорит что "User-defined type not defined" на строчку
Visual Basic
1
2
Sub SendMail(Region As String)
    Dim oOutlook As Outlook.Application
И у меня почему-то кнопка References на панели Tools не активна.
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
06.06.2012, 16:36
Цитата Сообщение от Dany_crm Посмотреть сообщение
И у меня почему-то кнопка References на панели Tools не активна.
Нельзя менять библиотеки, пока не остановлен макрос.
Ругается потому, что нет библиотеки "Microsoft Outlook 12.0 Object Library"
1
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 12
06.06.2012, 16:41  [ТС]
Затупил... =)
Gibboustooth - доброй души человек! Все получилось, Спасибо огромное.
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
06.06.2012, 16:48
Цитата Сообщение от Dany_crm Посмотреть сообщение
Gibboustooth - доброй души человек! Все получилось, Спасибо огромное.
На здоровье
1
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 12
07.06.2012, 08:46  [ТС]
Теперь задумался об обработке txt файлов. Их будет очень много!
Файлы будут сохранятся на моем пк в определенной папке. Возникает проблема, так как имя txt файла жестко определено, при сохранении txt будет перезаписываться на новый. Как добавить к имени файла время Now() чтобы избежать затирание?

Потом надо информацию из каждого txt файла импортировать в excel (файл во вложении).Итог_быстродействие.xlsx

test.txt

Нашел пример кода для поиска и импорта файлов.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Sub ImportTextFiles()
   Dim fsSearch As FileSearch
   Dim strFileName As String
   Dim strPath As String
   Dim i As Integer
 
   ' Задание пути и возможного имени файла
   strFileName = ThisWorkbook.Path & "C:\"
   strPath = "test??.txt"
 
   ' Создание объекта FileSearch
   Set fsSearch = Application.FileSearch
   ' Настройка объекта для поиска
   With fsSearch
      ' Маска для поиска
      .LookIn = strFileName
      ' Путь для поиска
      .FileName = strPath
      ' Поиск всех файло удовлетворяющих условиям поиска
      .Execute
      ' если файл не существует, то выход
      If .FoundFiles.Count = 0 Then
         MsgBox "Файлы не обнаружены"
         Exit Sub
      End If
   End With
   ' Обрабатываем найденые файлы
   For i = 1 To fsSearch.FoundFiles.Count
      Call ImportTextFile(fsSearch.FoundFiles(i))
   Next i
End Sub
 
Sub ImportTextFile(FileName As String)
   ' Импорт файла
   Workbooks.OpenText FileName:=FileName, _
    Origin:=xlWindows, _
    StartRow:=1, _
    DataType:=xlFixedWidth, _
    FieldInfo:= _
    Array(Array(0, 1), Array(3, 1), Array(12, 1))
 
End Sub
Помогите плиз довести дело до конца!
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
07.06.2012, 10:07
Application.FileSearch is so 20th century

Добавление Now в имя файла
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub WriteFile(txt As String, Region As String)
    Dim oFSO, oFile
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFile = oFSO.CreateTextFile(oFSO.BuildPath(sPath, sFileName & Format(Now, "YYYY.MM.DD-hh.mm.ss") & ".txt)
    oFile.writeline Region
    oFile.write txt
    oFile.Close
    Set oFile = Nothing
    Set oFSO = Nothing
End Sub

Константу sFileName, соответственно, нужно написать вместо "test.txt" просто "test".
0
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 12
07.06.2012, 10:42  [ТС]
Ок!

Application.FileSearch is so 20th century

как лучше сделать?
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
07.06.2012, 12:30
Чтение всех текстовых файлов в папке и запись данных на лист
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Option Explicit
 
Const sName_wsParce As String = "Parce"
Const sPath_Parce As String = "Q:\temp\"
Const sFile_Name As String = "test"
 
Sub ParceFiles()
    Dim oFSO As Scripting.FileSystemObject
    Dim wsParce As Worksheet
    Dim sFilePath As String
    Dim oTxtFile As Scripting.TextStream
    Dim sContent As String
    Dim vRow
    Dim asRows() As String
    Dim asColumns() As String
    Dim sRegion As String
    Dim sTown As String
    Dim bHead As Boolean
    Dim i As Long
    
    Set oFSO = New FileSystemObject
    Set wsParce = ActiveWorkbook.Sheets(sName_wsParce)
    'Çàâîäèì êðèòåðèè ïîèñêà è áåðåì ïóòü ïåðâîãî ôàéëà, óäîâëåòâîðÿþùåãî êðèòåðèÿì
    sFilePath = Dir(sPath_Parce & sFile_Name & "*.txt")
     
    With wsParce
        '×èñòèì
        .Cells.ClearContents
        'Ïèøåì çàãîëîâêè
        .Cells(1, 1) = "Ðåãèîí"
        .Cells(1, 2) = "Ãîðîä"
        .Cells(1, 3) = "Ñåðâåð"
        .Cells(1, 4) = "Êîìïüþòåð"
        .Cells(1, 5) = "¹ ïîïûòêè"
        .Cells(1, 6) = "Çàäåðæêà"
        
        i = 2
        'Îáõîäèì âñå ôàéëû, óäîâëåòâîðÿþùèå êðèòåðèÿì
        Do Until Len(sFilePath) = 0
            'Îòêðûâàåì ôàéë
            Set oTxtFile = oFSO.OpenTextFile(sPath_Parce & sFilePath)
            'Çàïèñûâàåì âñþ èíôîðìàöèþ èç ôàéëà â òåêñòîâóþ ïåðåìåííóþ
            sContent = oTxtFile.ReadAll
            'Ðàçäåëÿåì ñòðîêè ïî çíàêàì ïåðåíîñà êàðåòêè
            asRows = Split(sContent, vbCrLf)
            
            bHead = True
            For Each vRow In asRows
                'Ðàçäåëÿåì ñòîëáöû ïî çíàêó ";"
                If Not CStr(vRow) = "" Then
                    asColumns = Split(vRow, ";")
                    If bHead Then
                        '×èòàåì ïåðâóþ ñòðîêó ôàéëà êàê åãî çàãîëîâîê, çàïèñûâàåì äàííûå â ïåðåìåííûå
                        sRegion = asColumns(1)
                        sTown = asColumns(0)
                    Else
                        '×èòàåì ïîñëåäóþùèå ñòðîêè êàê çàïèñè ñ äàííûìè, ïèøåì èõ íà ëèñò
                        .Cells(i, 1) = sRegion
                        .Cells(i, 2) = sTown
                        .Cells(i, 3) = Split(asColumns(0), ":")(0)
                        .Cells(i, 4) = Split(asColumns(0), ":")(1)
                        .Cells(i, 5) = Split(asColumns(1), ":")(1)
                        .Cells(i, 6) = Split(asColumns(2), ":")(1)
                        i = i + 1
                    End If
                    
                    bHead = False
                End If
            Next vRow
            
            'Áåðåì ïóòü ñëåäóþùåãî ôàéëà, óäîâëåòâîðÿþåãî ââåäåííûì âûøå êðèòåðèÿì
            sFilePath = Dir
        Loop
    End With
End Sub
1
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 12
07.06.2012, 13:36  [ТС]
Ругается на строчку:
Set oFile = oFSO.CreateTextFile(oFSO.BuildPath(sPath , sFileName & Format(Now, "YYYY.MM.DD-hh.mm.ss") & ".txt)
Где-то синтаксическая ошибка =(
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
07.06.2012, 13:39
Ругается либо на формат даты, либо на знаки в пути к файлу. Попрбуйте написать
"YYYYMMDDhhmmss"
вместо
"YYYY.MM.DD-hh.mm.ss"

Если сожрет, значит второе. Eсли нет - значит первое

У вас какая версия Excel? (хотя врядли это может влиять. Я скорее грешу на региональные настройки Windows)
1
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 12
07.06.2012, 13:55  [ТС]
Все равно ругается.
У меня 2010.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Option Explicit
 
Const sPath As String = "C:\"                       'Путь к файлу
Const sFileName As String = "test.txt"              'Имя файла
Const sPingAddress As String = "sudir.ca.sbrf.ru"   'Пингуемый адрес
Const sMailTo As String = "starostin-dt@mail.ca.sbrf.ru" 'Адрес эл.почты получателя
 
Function PingResponseTimeEx(ByVal ComputerName$, Optional ByVal BufferSize As Long = 1024) As String
    Dim i As Integer
    Dim txt As String
    
    Dim oPingResult As Variant: PingResponseTimeEx = -1: On Error Resume Next
       
    For i = 1 To 10
        For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
            ("SELECT * FROM Win32_PingStatus WHERE Address = '" & ComputerName & "' and BufferSize = " & BufferSize)
            If IsObject(oPingResult) Then
                If oPingResult.StatusCode = 0 Then
                   txt = txt & (i & "; " & "Time: " & oPingResult.ResponseTime & "; ") & vbCrLf
                Else
                   txt = txt & (i & "; " & "Error: " & oPingResult.StatusCode & "; ") & vbCrLf
                End If
              End If
        Next
    Next i
    
    PingResponseTimeEx = txt
End Function
 
 
'Sub WriteFile(txt As String, Region As String)
 '   Dim oFSO, oFile
  '  Set oFSO = CreateObject("Scripting.FileSystemObject")
   ' Set oFile = oFSO.CreateTextFile(oFSO.BuildPath(sPath, sFileName))
   ' oFile.writeline Region
   ' oFile.write txt
   ' oFile.Close
   ' Set oFile = Nothing
   ' Set oFSO = Nothing
'End Sub
 
 Sub WriteFile(txt As String, Region As String)
    Dim oFSO, oFile
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFile = oFSO.CreateTextFile(oFSO.BuildPath(sPath, sFileName & Format(Now ("YYYY.MM.DD-hh.mm.ss") & ".txt))     'пробовал оба варианта, не помогает
   oFile.writeline Region
   oFile.write txt
   oFile.Close
   Set oFile = Nothing
   Set oFSO = Nothing
End Sub
 
 
Sub TestPingFunction()
    Dim sRegion As String           'Область и город
    Dim sResponse As String         'Ответ Ping
    
    sRegion = Cells(3, 3) & ";" & Cells(5, 3)
    sResponse = PingResponseTimeEx(sPingAddress)
    WriteFile sResponse, sRegion
    SendMail sRegion
    MsgBox "Тестирование канала связи закончено! Спасибо!"
End Sub
 
Sub SendMail(Region As String)
    Dim oOutlook As Outlook.Application         'Приложение Outlook
    Dim oItem As Outlook.MailItem               'Письмо
    
    'Проверяем, запущен ли Outlook,  если нет - запускаем
    If GetObject("winmgmts:\\.\root\cimv2").ExecQuery("SELECT * FROM Win32_Process WHERE Name='Outlook.exe'").Count = 0 Then Shell ("outlook")
    
    'Присваиваем переменную и создаем новое письмо
    Set oOutlook = New Outlook.Application
    Set oItem = oOutlook.CreateItem(olMailItem)
    
    'Вводим параметры письма
    With oItem
        .To = sMailTo
        .Subject = "Быстродействие " & Region
        .Attachments.Add (sPath & sFileName)
        'Отправляем (можно сделать ".Display" вместо ".Send",
        'чтобы проверить параметры и отправить письмо руками)
        'Письмо отправляется пустым (не задано свойство .Body)
        .Send
    End With
End Sub
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
07.06.2012, 14:18
Сейчас скину целиком код. Там еще есть проблемы.

Добавлено через 13 минут
Исправленный код отправки файла на почту.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
Option Explicit
 
Dim oFSO As Object
 
Const sFileName As String = "test"                  'Èìÿ ôàéëà
Const sPath As String = "C:\"                  'Ïóòü ê ôàéëó
Const sPingAddress As String = "google.ru"          'Ïèíãóåìûé àäðåñ
Const sMailTo As String = "Person@mail.com"         'Àäðåñ ýë.ïî÷òû ïîëó÷àòåëÿ
 
Function PingResponseTimeEx(ByVal ComputerName$, Optional ByVal BufferSize As Long = 1024) As String
    Dim i As Integer
    Dim txt As String
    
    Dim oPingResult As Variant: PingResponseTimeEx = -1: On Error Resume Next
       
    For i = 1 To 10
        For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
            ("SELECT * FROM Win32_PingStatus WHERE Address = '" & ComputerName & "' and BufferSize = " & BufferSize)
            If IsObject(oPingResult) Then
                If oPingResult.StatusCode = 0 Then
                   txt = txt & (ComputerName$ & ": " & BufferSize & "; Step: " & i & "; " & "Time: " & oPingResult.ResponseTime & "; ") & vbCrLf
                Else
                   txt = txt & (ComputerName$ & ": " & BufferSize & "; Step: " & i & "; " & "Error: " & oPingResult.StatusCode & "; ") & vbCrLf
                End If
              End If
        Next
    Next i
    
    PingResponseTimeEx = txt
End Function
 
 
Sub WriteFile(txt As String, Region As String, Path As String)
    Dim oFile As Object
    
    Set oFile = oFSO.CreateTextFile(Path)
    oFile.writeline Region
    oFile.write txt
    oFile.Close
    Set oFile = Nothing
    Set oFSO = Nothing
End Sub
 
 
Sub TestPingFunction()
    Dim sRegion As String           'Îáëàñòü è ãîðîä
    Dim sResponse As String         'Îòâåò Ping
    Dim sFullPath As String         'Ïîëíûé ïóòü ê ôàéëó
    
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    
    'Ôîðìèðóåì èìÿ ôàéëà
    sFullPath = oFSO.BuildPath(sPath, sFileName & " " & Format(Now, "YYYY.MM.DD-hh.mm.ss") & ".txt")
    
    sRegion = Me.Cells(2, 1) & ";" & Me.Cells(2, 2)
    sResponse = PingResponseTimeEx(sPingAddress)
    WriteFile sResponse, sRegion, sFullPath
    SendMail sRegion, sFullPath
    MsgBox "Òåñòèðîâàíèå êàíàëà ñâÿçè çàêîí÷åíî! Ñïàñèáî!"
End Sub
 
Sub SendMail(Region As String, Path As String)
    Dim oOutlook As Outlook.Application         'Ïðèëîæåíèå Outlook
    Dim oItem As Outlook.MailItem               'Ïèñüìî
    
    'Ïðîâåðÿåì, çàïóùåí ëè Outlook,  åñëè íåò - çàïóñêàåì
    If GetObject("winmgmts:\\.\root\cimv2").ExecQuery("SELECT * FROM Win32_Process WHERE Name='Outlook.exe'").Count = 0 Then Shell ("outlook")
    
    'Ïðèñâàèâàåì ïåðåìåííóþ è ñîçäàåì íîâîå ïèñüìî
    Set oOutlook = New Outlook.Application
    Set oItem = oOutlook.CreateItem(olMailItem)
    
    'Ââîäèì ïàðàìåòðû ïèñüìà
    With oItem
        .To = sMailTo
        .Subject = Region
        .Attachments.Add (Path)
        'Îòïðàâëÿåì (ìîæíî ñäåëàòü ".Display" âìåñòî ".Send",
        '÷òîáû ïðîâåðèòü ïàðàìåòðû è îòïðàâèòü ïèñüìî ðóêàìè)
        'Ïèñüìî îòïðàâëÿåòñÿ ïóñòûì (íå çàäàíî ñâîéñòâî .Body)
        .Send
    End With
End Sub
1
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 12
07.06.2012, 14:51  [ТС]
Отлично! Заработало =)

Теперь ошибка в импорте файлов User-Defined type not defined
строка:

Sub ParceFiles()
Dim oFSO As Scripting.FileSystemObject
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
07.06.2012, 14:55
Ах, ну да. Вам нужна библиотека Microsoft Scripting Runtime (файл scrrun.dll).
Либо можно написать
Visual Basic
1
2
Dim oFSO as Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
вместо
Visual Basic
1
2
Dim oFSO as Scripting.FileSystemObject 
Set oFSO as New Scripting.FileSystemObject
Вроде бы особой разницы нет, но я предпочитаю все-таки подгружать библиотеки тех объектов, с которыми работаю.
1
0 / 0 / 0
Регистрация: 04.06.2012
Сообщений: 12
07.06.2012, 15:02  [ТС]
ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!
С МЕНЯ ВИСКАРЬ! Куда отправить?
0
735 / 203 / 11
Регистрация: 23.06.2011
Сообщений: 440
07.06.2012, 15:06
На здоровье.
Не пью вискарь, спасибо
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.06.2012, 15:06
Помогаю со студенческими работами здесь

Интервал между отправкой пакетов в команде ping
Приветствую всех.В общем,нужно бесконечно пинговать один какой-то ip но с интервалом в 5 секунд или более,с определенным размером...

Аваст ругается на программу с отправкой email
Пишу простой почтовый месседжер с возможностью отложенной отправки. Однако когда наступает момент отправлять письмо по адресу антивирус...

Нужна анкета на трудоустройство, с отправкой на email.
Помогите плиз! нужна форма анкеты (имя, фамилия, возраст, специальность,образование,стаж,опыт работы,родители, адрес, телефон, e-mail)....

Как сделать автоответчик с номером заявки с отправкой на email
Подскажите как сделать автоответчик с номером заявки к примеру на мое мыло отправляют письмо и им в ответ пишет

Проверка поля email перед отправкой | допилить скрипт
Всем привет! Есть Ajax скрипт отправки сообщений, но в нем коряво проверяет Email, нужно добавить функцию, что бы проверяло - есть ли @ в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru