Вопрос № 175084: Уважаемые эксперты, подскажите, пожалуйста, как при помощи ВБА осуществить проверку Подключен ли сетевой диск F, если не подключен, подключить его Если это сделать вручную, тогда требуется вводить Имя пользователя, Пароль и Нажать Ок Ка...
Вопрос № 175091: Уважаемые эксперты, подскажите, пожалуйста, думал по аналогии с IE открыть Зэ Бат! ларец не открылся, или может возле надписи Зэ Бат! слева надо было нарисовать летучую мышь? Dim IE As Object Set IE = CreateObject("The Bat!") IE...
Вопрос № 175103: Здравствуйте, уважаемые эксперты! Помогите доработать код для создания массива из сгенерированных чисел. Вот сам код, но надо, чтобы элементы не повторялись. Dim i, j As Integer Dim numbers(N) As Integer ...
Вопрос № 175105: Уважаемые эксперты Высылаю экзешный файл, как с полей формы программы КУЗСП считать данные Спасибо Эндрю http://rfpro.ru/upload/1169...
Вопрос № 175084:
Уважаемые эксперты, подскажите, пожалуйста, как при помощи ВБА осуществить проверку Подключен ли сетевой диск F, если не подключен, подключить его Если это сделать вручную, тогда требуется вводить Имя пользователя, Пароль и Нажать Ок Как это сделать при помощи ВБА? Спасибо Эндрю
Sub VBProject_References2() 'эта функция подключает к проекту библиотеку для работы с FSO 'для ее корректной работы нужно в параметрах безопасности макросов разрешить доступ к объектной
модели проектов VBA!!! iFileName$ = Environ("WinDir") & "\System32\Scrrun.dll"
If Dir(iFileName$) <> "" Then Dim iReference As Object, iReferences As Object ' Variant 'Если подключена библиотека : Set iReferences = ActiveDocument.VBProject.References For Each iReference In iReferences If StrComp(iReference.FullPath, iFileName$, vbTextCompare) =
0 Then Exit Sub End If Next iReferences.AddFromFile FileName:=iFileName$ Else MsgBox "Отсутствует нужный файл библиотеки FSO", , "" End If End Sub
Sub Check_Drive() 'сама функция проверки наличия в системе диска с заданной буквой Call VBProject_References2 Dim objFSO As FileSystemObject Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.DriveExists("F:")
= True Then MsgBox "Диск F существует!!!" Else: MsgBox "Диск F не существует!!!" End If End Sub
Отсюда взял код подключения/отключения сетевого диска
Код:
'1. Объявляем структуру данных Private Type NetResource dwScope As Long dwType As Long 'Тип ресурса: дисковый или принтер dwDisplayType As Long dwUsage As Long lpLocalName As String 'Локальное имя ресурса, например, "x:" lpRemoteName As String 'Сетевое имя ресурса, например, "\\server\d$" lpComment
As String lpProvider As String 'Системный провайдер, обеспечивающий собственно подключение, например, "LDAP:" End Type
'Примечание. 'Системный провайдер - компонент ОС Windows. Он отвечает за работу в соответствующем пространстве имен сетевых объектов. 'Если это значение не задавать, то будет выбран провайдер, действующий по умолчанию (что и рекомендую).
'2. Объявляем функции из комплекта Win32 API.
Private Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (lpNetResource As NetResource, ByVal strPassword As String, ByVal strUserName As String, ByVal lngFlags As Long) As Long Private Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long
'3.
Описываем пользовательские функции подключения и отключения ресурса.
Function AddConnection(strNetPath As String, strLocalName As String, strUserName As String, strPwd As String, Optional fPersistent As Boolean = True, Optional fDisk As Boolean = True) As Long 'Переменная fPersistent - флаг режима обновления профиля пользователя: обновлять или нет, 'по умолчанию - обновлять (значение TRUE) 'Переменная fD
isk - флаг типа сетевого ресурса (диск или принтер), по умолчанию - диск (значение TRUE)
Dim usrNetResource As NetResourceDim lngFlags As Long
With usrNetResource .dwType = IIf(fDisk, dhcResourceTypeDisk, dhcResourceTypePrint) 'Определяем тип ресурса 'dhcResourceTypeDisk и dhcResourceTypePrint - стандартные константы функции WNetCancelConnection2 .lpLocalName = strLocalName .lpRemoteName = strNetPath .lpProvider = vbNullString End With 'Задаем режим обновления профиля lngFlags = IIf(fPersistent, dhcConnectUpdateProfile, dhcConnectDontUpdateProfile) 'Подключаемся к указанному ресурсу AddConnection = WNetAddConnection2(usrNetResource, strPwd, strUserName, lngFlags)
End Function
Function CancelConnection(strLocalName As String, Optional forceDisconnect As Boolean = False, Optional updateUserProfile As Boolean = True) As Long 'Переменная forceDisconnect - флаг режима отключения ресурса: безусловный или нет, по умолчанию -
не безусловный (FALSE) 'Безусловный режим - ресурс будет отключен, даже если есть открытые с отключаемого ресурса файлы 'Не безусловный режим - ресурс не будет отключен, если есть открытые с отключаемого ресурса файлы
Dim lngFlags As Long
'Задаем режим обновления профиля (обновлять или нет) lngFlags = IIf(updateUserProfile, dhcConnectUpdateProfile, dhcConnectDontUpdateProfile) 'Отключаемся от ресурса CancelConnection
= WNetCancelConnection2(strLocalName, lngFlags, Abs(forceDisconnect))
End Function
'4. Проверяем работу функций подключения/отключения
Sub TestNetConnect() 'функция подключает сетевую папку \\server\c$ как диск Q из под учетной записи Администратор с паролем PASSWord Dim cntResult As Long cntResult = AddConnection("\\server\c$", "Q:", "Администр
атор", "PASSword") End Sub
Sub TestNetDisconnect() 'функция отключает сетевой диск Q. Dim cntResult As Long cntResult = CancelConnection("Q:") End Sub
Ответ отправил: Vasiliy83, Практикант
Ответ отправлен: 10.12.2009, 09:35
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257568
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 175091:
Уважаемые эксперты, подскажите, пожалуйста, думал по аналогии с IE открыть Зэ Бат! ларец не открылся, или может возле надписи Зэ Бат! слева надо было нарисовать летучую мышь? Dim IE As Object Set IE = CreateObject("The Bat!") IE.Visible = True 'открывает, делает видимым Как это сделать при помощи ВБА? Возможно, не все программы можно открыть при помощи ВБА, тогда я понимаю, можно через Экзешний файл, и как? Спасибо Эндрю
Отвечает Vasiliy83, Практикант :
Здравствуйте, Ципихович Эндрю. TheBat! не является стандартным объектом VBA, поэтому как с IE не получится запустить любую программу поможет команда
Код:
Shell "Путь к exe-файлу
"
Ответ отправил: Vasiliy83, Практикант
Ответ отправлен: 10.12.2009, 08:52
Оценка ответа: 5
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257567
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 175103:
Здравствуйте, уважаемые эксперты!
Помогите доработать код для создания массива из сгенерированных чисел.
Вот сам код, но надо, чтобы элементы не повторялись.
Dim i, j As Integer Dim numbers(N) As Integer Dim element As Integer
For i = 1 To N numbers(i) = Int(N * Rnd()) + 1 ListBox1.Items.Add(numbers(i)) Next
Сам попытался сделать, но не получилось - элементы все равно повторяются. То, что
получилось - в примечании. Про Вас переделать или написать код для генерирования чисел, чтобы они не повторялись.
Отвечает amnick, 6-й класс :
Здравствуйте, Иванов Андрей Владимирович.
Ваш код похож на Visual Basic, который я не слишком хорошо знаю. Но поскольку вопрос в разделе C/C++, то и пример программы в приложении приведен на C++. Заполнение массива псевдослучайными числами реализовано в виде отдельной функции, сгенерированный массив для проверки выводится на экран (а Вы можете делать с ним, что пожелаете).
Я проверял программу с Visual C++ 6.0. Генератор псевдослучайных чисел у microsoft довольно неплохой, так что за более
чем 20 тестовых запусков, повторов не было ни разу (что ожидаемо, выборка из 15 чисел маловата). Поэтому для проверки, действительно ли повторяющиеся числа отсеиваются, я заменял
int n = rand();
на (временно, убрано из конечного кода)
int n = rand() % 30; // псевдослучайное число от 0 до (30-1)
Это стандартный прием получения псевдослучайных чисел в заданном диапазоне.
Успехов!
Раз требуется на Visual Basic, a я дал ответ на C++, т
о вот Вам еще вариант на Visual Basic 6:
Файл 175103.frm
Код:
VERSION 5.00 Begin VB.Form Form1 Caption = "Form1" ClientHeight = 4092 ClientLeft = 48 ClientTop = 324 ClientWidth = 2520 LinkTopic
= "Form1" ScaleHeight = 4092 ScaleWidth = 2520 StartUpPosition = 3 'Windows Default Begin VB.CommandButton Generate Caption = "Generate" Height = 372 Left = 240 TabIndex = 1 Top = 3480 Width = 1932 End Begin VB.ListBox List1 Height = 2928 L
eft = 240 TabIndex = 0 Top = 240 Width = 1932 End End Attribute VB_Name = "Form1" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit
Private Sub Form_Load() Randomize End Sub
Private Sub Generate_Click() Dim i, j As Integer Dim nums(20) As Integer Dim found As Boolean Dim
tmp As Integer
List1.Clear i = 0 While (i < 20) again: tmp = Int((30000 * Rnd) + 1) found = False For j = 0 To i - 1 If nums(j) = tmp Then found = True Exit For End If Next j If found Then GoTo again nums(i) = tmp List1.AddItem (tmp) i = i + 1 Wend End Sub
По нажатию кнопки [Generate] список очищается, а затем запо
лняется 20-ю псевдослучайными числами.
Успехов!
Дополнение автора ответа перенесено из мини-форума
-----
∙ Отредактировал: Dr_Andrew, Старший модератор
∙ Дата редактирования: 10.12.2009, 16:34 (время московское)
Приложение:
Ответ отправил: amnick, 6-й класс
Ответ отправлен: 10.12.2009, 15:57
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257577
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Ashotn, 6-й класс :
Здравствуйте, Иванов Андрей Владимирович. В программировании индекс массива начинается с 0. Цикл надо начинать с 0 или писать i-1. Кроме того, не надо сравнивать значение с самим собой, это у Вас происходит, когда j = i . Переработаннный код программы дан в приложении.
Приложение:
----- Я ни от чего, ни от кого не завишу.
Ответ отправил: Ashotn, 6-й класс
Ответ отправлен: 10.12.2009, 16:03
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 257578
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Отвечает Лейла, 2-й класс :
В программе amnick может возникнуть ситуация, когда число элементов массива больше RAND_MAX (32767) . Тогда невозможно будет сгенерировать массив из не повторяющихся элементов и программа зависнет. Привожу свой код ниже.
{#/template js_tmpl_auth_reg_button}
{#template js_tmpl_auth_reg_descr}
{#if $P.login_register_tab == 1}
Для оформления подписки на выбранную рассылку, работы с интересующей вас группой или доступа в нужный вам раздел, просим авторизоваться на Subscribe.ru
{#/if}
{#if $P.login_register_tab == 2}
Для регистрации укажите ваш e-mail адрес. Адрес должен быть действующим, на него сразу после регистрации будет отправлено письмо с инструкциями и кодом подтверждения.
{#/if}
{#/template js_tmpl_auth_reg_descr}
{#template js_tmpl_soc_auth_reg_descr}
Или зарегистрируйтесь через социальную сеть.
{#/template js_tmpl_soc_auth_reg_descr}
{#template js_tmpl_auth_reg_soc}
Вам отправлено письмо для подтверждения вашего адреса {$P.register_confirm_mail}. Для подтверждения адреса перейдите по ссылке из этого письма.
{#/template js_tmpl_auth_reg_descr}
{#template js_tmpl_auth_reg_action}