СообЧа > База Знаний > Программирование > Visual Basic > Файлы и папки

Вопрос

Как в Visual Basic загрузить файл (с расширением exe) с сайта, допустим с http://www.sait.go ? Пробовал разные методы и программы, но не загружает (только в оффлайне).

Ответ

Попробуй использовать API:

Private Declare Function URLDownloadToFile Lib «urlmon» Alias
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal
szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long)As Long
lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)

Из конференции Expert_FAQ

Вопрос

Нужно сделать так, чтобы файлы с определенным расширением автоматически открывались программой на VB.

Ответ

Если в вашем приложении вам нужно зарегистрировать новый тип файла или создать ассоциацию этого типа файла с вашим приложением (по-умолчанию запускать вашу программу с этим типом файлов), то используйте приведенный ниже код.
Подговте проект с формой.
На форму поместите:
- Кнопку с именем Command1
Добавте в форму:

Public Type mnuCommands
Captions As New Collection
Commands As New Collection
End Type

Public Type filetype
Commands As mnuCommands
Extension As String
ProperName As String
FullName As String
ContentType As String
IconPath As String
IconIndex As Integer
End Type

Public Const REG_SZ = 1
Public Const HKEY_CLASSES_ROOT = &H80000000

Public Declare Function RegCloseKey Lib _
"advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function RegCreateKey Lib _
"advapi32" Alias "RegCreateKeyA" (ByVal _
hKey As Long, ByVal lpszSubKey As String, _
phkResult As Long) As Long
Public Declare Function RegSetValueEx Lib _
"advapi32" Alias "RegSetValueExA" (ByVal _
hKey As Long, ByVal lpszValueName As String, _
ByVal dwReserved As Long, ByVal fdwType As _
Long, lpbData As Any, ByVal cbData As Long) As Long


Public Sub CreateExtension(newfiletype As filetype)

Dim IconString As String
Dim Result As Long, Result2 As Long, ResultX As Long
Dim ReturnValue As Long, HKeyX As Long
Dim cmdloop As Integer

IconString = newfiletype.IconPath & "," & _
newfiletype.IconIndex

If Left$(newfiletype.Extension, 1) <> "." Then _
newfiletype.Extension = "." & newfiletype.Extension

RegCreateKey HKEY_CLASSES_ROOT, _
newfiletype.Extension,Result
ReturnValue = RegSetValueEx(Result, "", 0, REG_SZ, _
ByVal newfiletype.ProperName, _
LenB(StrConv(newfiletype.ProperName, vbFromUnicode)))

If newfiletype.ContentType <> "" Then
ReturnValue = RegSetValueEx(Result, _
"Content Type", 0, REG_SZ, ByVal _
CStr(newfiletype.ContentType), _
LenB(StrConv(newfiletype.ContentType, vbFromUnicode)))
End If

RegCreateKey HKEY_CLASSES_ROOT, _
newfiletype.ProperName, Result

If Not IconString = ",0" Then
RegCreateKey Result, "DefaultIcon", _
Result2 'Создать ID для "ProperNameDefaultIcon"
ReturnValue = RegSetValueEx(Result2, _
"", 0, REG_SZ, ByVal IconString, _
LenB(StrConv(IconString, vbFromUnicode)))
'Установить значение по-умолчанию для ID
End If

ReturnValue = RegSetValueEx(Result, _
"", 0, REG_SZ, ByVal newfiletype.FullName, _
LenB(StrConv(newfiletype.FullName, vbFromUnicode)))
RegCreateKey Result, ByVal "Shell", ResultX

'Создать необходимые ID для каждой команды
For cmdloop = 1 To newfiletype.Commands.Captions.Count
RegCreateKey ResultX, ByVal _
newfiletype.Commands.Captions(cmdloop), Result
RegCreateKey Result, ByVal "Command", Result2
Dim CurrentCommand$
CurrentCommand = newfiletype.Commands.Commands(cmdloop)
ReturnValue = RegSetValueEx(Result2, _
"", 0, REG_SZ, ByVal CurrentCommand$, _
LenB(StrConv(CurrentCommand$, vbFromUnicode)))
RegCloseKey Result
RegCloseKey Result2
Next

RegCloseKey Result2
End Sub

Private Sub Command1_Click()

Dim myfiletype As filetype

myfiletype.ProperName = "MyFile"
myfiletype.FullName = "My File Type"
myfiletype.ContentType = "SomeMIMEtype"
myfiletype.Extension = ".MYF"
myfiletype.Commands.Captions.Add "Open"
myfiletype.Commands.Commands.Add "c:\windows\notepad.exe ""%1"""
myfiletype.Commands.Captions.Add "Print"
myfiletype.Commands.Commands.Add "c:\windows\notepad.exe ""%1"" /P"

CreateExtension myfiletype

End Sub

Мир программирования на Visual BASIC 5.0 и HTML

Вопрос

Как получится быстрее:

1. сначала собирать строку (длинную), а потом записывать ее в файл

For i = 1 To 1000 'много
     st = st & i
Next
Print #1, st

2. или записывать каждый фрагмент сразу же

For i = 1 To 1000 'много
     Print #1, i;
Next

Что быстрее и насколько, 1. или 2. ?

Ответ

Вот так быстрее всего:

Open … for Binary As 1
For i = 1 To 1000 'много
     put 1,,cstr(i)
Next
close 1

Из твоих 2-х вариантов первый будет быстрее.

Из конференции VB

Вопрос

Написал хелп (help.chm) к своей программе, а как "вставлять/вызывать" его — не знаю.

Ответ

lngRet = WinHelp(hWnd, "Helpfile.hlp", 1, Number_of_topic)

Savenger

Вопрос

Допустим у меня есть текстовый файл в который уже записаны данные. Как мне добавить в конец файла текст из TextBox?

Ответ

Открыть файл в режиме Append.
Если файла нет, он его создаст, если есть — добавит текст в имеющийся.

Open App.Path & "\My.txt" For Append As #1
     Print #1, твой текст
Close #1

Вопрос

Как загрузить в TextBox файл через Common Dialog?

Ответ

dim strTemp as string
dim strAll as string

'Покажем окно Общего диалога
CD.showopen
'Откроем файл для ввода с номером 1
open CD.filename for input as #1
'Выполняем цикл, пока не достигнем конца файла №1
do while not eof(1)
'Считаем во временную переменную следующую строку.
Line Input #1, strTemp
'Присоединим временную переменную к всей строке. В конце добавим
'символ новой строки.
strAll= strAll & strTemp & vbcrlf
loop

'Обрежем два последних символа (они являются не нужными переносами
'строки)
strAll=left (strall,len(strall)-2
'Закроем файл
Close #1


Артем Кривокрисенко

Можно еще проще:

Text1.Text = Input(LOF(1), #1)

Дмитрий Данелия

Вопрос

Установлено соединение с Internet. Как незаметно (без всяких предупреждений) загрузить заданный файи с WEB-узла?

Ответ

Используйте стандартный элемент управления Internet Control. Для закачки файла используйте метод OpenURL. Например закачка файла из сети в локальный файл:

Dim a() as byte

Inet1.Protocol = icHTTP

a() = Inet1.OpenURL(txtURL.Text, icByteArray)

Open «C:\file.txt» For Binary Access Write As #1

Put #1, , a()

Close

Или можно просто прочитать файл в байтовый массив или строковою переменную:

Dim a As String

a = Inet1.OpenURL(txtURL.Text, icByteArray)

Из конференции Expert_FAQ

Вопрос

В наличии есть несколько файлов проименованые следующим образом:
ram1.htm … ram32.htm

Требуется закачать файлы на сайт нажатием одной командной кнопки.

Ответ

Используй элемент Internet Transfer (Inet1). Пусть даны: имя пользователя (учетная запись) UserName1, пароль Password1, хост ToHost1, куда нужно закачать файлы, директория Dir1 (например, temp/) — виртуальный или физический каталог, куда качаем файлы на хосте, и главная командная кнопка CMD1. (работает, если файлы находятся в пути App.Path\ , если другой, то измени код)

Вот код для кнопки CMD1:

Private sub CMD1_click() Dim int01 as Byte 'счетчик для файлов
For int01=1 to 32 'цикл от 1 до 32 With Inet1 .protocol=icFTP 'вид передачи данных через FTP
.UserName=UserName1 'Регистрируемся — имя пользователя
.Password=Password1 'Регистрируемся — пароль
.Execute ToHost1, "PUT " & App.Path & "\ram" & int01 & ".htm" & Dir1 & "ram" & int01 & ".htm"
' передаем файлы PUT — команда копирования файлов на хост While
.StillExecuting 'пока идет выполнение передачи, то DoEvents
'Windows обрабатывает все события, иначе может быть зависон программы (типа, не отвечает…)
Wend End With Next int01 MsgBox "Отправка файлов завершена!"
End sub


Из конференции Expert_FAQ

Вопрос

Есть форма, на которой помещены три текстовых поля: text1, text2, text3 и кнопочка «Добавить». Где и что надо написать, чтобы после нажатия на кнопку текст из всех текстовых полей записывался в файл test.txt в следующей последовательности:
text1    text2    text3
потом пишем в форму что-то новое и нажимаем на кнопку: text1    text2    text3
text1(новый)    text2(новый)    text3(новый)

Ответ

Для записи нужен такой код: Dim txt As String
txt = text1.Text & " " & text2.text & " " & text3.text
Open "C:\Path\filename.txt" For Append As #1
Print #1,txt
Close #1


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

Вопрос

Есть ли такая функция, которая ищет по маске? Например надо найти в папке файлы *.exe

Ответ

Функция называется Dir.

strTemp=dir("c:\windows\*.exe")
lstPrograms.clear
do while strtemp<>""
   lstPrograms.additem strtemp
   strtemp=dir
loop

Артем Кривокрисенко

Вопрос

Как класть/читать настройки в/из *.INI?

Ответ

mdINIAdv.zip

Savenger

Вопрос

Как можно искать файлы по дате?

Ответ

Перебирай их обычным Dir'ом, а потом через FileDateTime смотри, подходит ли он тебе.

Артем Кривокрисенко

Вопрос

Как на VB создать большое количество папок?
Например при нажатии на кнопку создается 15000 папок в директории C:\

Ответ

Да очень просто. В цикле. Например так:

Dim i As Integer
For i=1 to 1500
    MkDir "C:\MoyaPapka" & Cstr(i)
Next

Этот незамысловатый код создает в корне диска C 1500 папок:

MoyaPapka1
MoyaPapka2
MoyaPapka3

MoyaPapka1498
MoyaPapka1499
MoyaPapka1500

Из конференции Expert_FAQ

Вопрос

Какие коды должны быть в теле программы-аналога Windows Блокнота и какие «мероприятия» необходимо провести, чтобы после замены стандартного Блокнота при клике на любом текстовом файле открывался мой новый Блокнот и в нем отображался открываемый документ.
У меня все работает, кроме отображения документа. Блокнот всегда открывается на новом документе. Хотелось бы, чтобы и открываемый документ отображался.

Ответ

Сначала нужно привязать расширение txt к своей программе. Для этого есть такая процедура:
'это в раздел General Declarations
Private Declare Function RegCreateKey Lib "advapi32.dll" _
Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey _
As String, phkResult As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" _
Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, _
ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, _
ByVal cbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long
Private Const HKEY_CLASSES_ROOT = &H80000000
Private Sub AssociateMyApp(ByVal sAppName As String, _
ByVal sEXE As String, ByVal sExt As String, Optional ByVal sIcon As String)
Dim lRegKey As Long
Call RegCreateKey(HKEY_CLASSES_ROOT, sExt, lRegKey)
Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sAppName, Len(sAppName))
Call RegCloseKey(lRegKey)
Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\Shell\Open\Command", lRegKey)
Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sEXE, Len(sEXE))
Call RegCloseKey(lRegKey)
If Len(sIcon) Then
Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\DefaultIcon", lRegKey)
Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sIcon, Len(sIcon))
Call RegCloseKey(lRegKey)
End If
End Sub


Присваиваем расширение программе через такой вызов процедуры:
AssociateMyApp(«Название программы», «Имя exe-файла», ".txt», «Имя файла с иконкой»)
Например:
AssociateMyApp(«My TextEditor», «C:\MyProgram.exe %1», ".txt», «C:\icon.ico»)
!!! %1 ставить обязательно
%1 показывает, что нужно передать приложению в командной строке имя открывающегося файла.
Дальше нужно из программы отловить имя открывающегося документа. На Form_Load или Sub Main:
Dim sCommand As String
Dim sFileName As String
sCommand = Command$()
If Left$ (sCommand, 1) = Chr (34) Then
sCommand = Right$ (sCommand, Len (sCommand) — 1)
End If
If Right$ (sCommand, 1) = Chr (34) Then
sCommand = Left$ (sCommand, Len (sCommand) — 1)
End If
sFileName = sCommand


Путь к файлу в переменной sFileName. Дальше нужно загрузить этот файл в твой редактор.

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

Вопрос

Как открыть/сохранить в файле текстовую переменную?

Ответ

'Открыть
Public Function LoadTextFile(Path As String) As String
   Dim strFile As String
       
   Open Path For Binary As #1
   strFile = Space$(LOF(1))
   Get 1, , strFile
   Close #1
   LoadTextFile = strFile
End Function

'Закрыть
Public Function SaveTextFile(Path As String, Text As String)
     Open Path For Output As #1
     Print #1, Text
     Close #1
End Function


Артем Кривокрисенко

Вопрос

Как осуществлять чтение/сохранение текстовых файлов в 16-ричном режиме?

Ответ

Примерно так:

Dim bytData(2) as Byte
Open … As 1
Get 1,,bytData
MsgBox Hex(bytData(0)) '3
MsgBox Hex(bytData(1)) '1F
MsgBox Hex(bytData(2)) '5C
bytData(0) = 255 'FF
bytData(1) = 0 '00
bytData(2) = 255 'FF
Put 1,,bytData
Close 1

Savenger

Вопрос

Как средствами VBA for Excel 97 получить список файлов в папке и их всех последовательно пооткрывать (все *.xls)?

Ответ

Для последовательного открытия вполне можно и список файлов получать последовательно:

Sub GetXLSList()
Dim fName As String
' получаем первое имя файла в папке (если он есть)
fName = Dir("c:\folder\*.xls")
Do While fName <> ""
  Workbooks.Open fName ' открываем найденный файл
  '…
  fName = Dir ' получаем имя следующего файла
Loop
End Sub

Kirill

Вопрос

Как получить список всех файлов и папок в определенной папке?

Ответ

Это можно сделать с помощью функции Dir. Например:

Поставь на форму ListBox и напиши такой код:

Private Sub Form_Load()
ListBox1.Clear
st = Dir("C:\*.*", vbDirectory)
Do While Len(st)
st = Dir
ListBox1.AddItem st
Loop
End Sub

Rafis

Вопрос

Как в VB.NET полчить список всех имеющихся директорий и файлов?

Ответ

Dim File As String = Dir("С:\*.sys", FileAttribute.Hidden Or FileAttribute.System)
While File <> ""
     Debug.WriteLine(File)
     File = Dir()
End While

Или если не нравится Dir, посмотри на Посмотри на System.IO.Directory или System.IO.DirectoryInfo:

Public Function GetFiles() As System.IO.FileInfo()

Член пространства: System.IO.DirectoryInfo

Описание:
Возвращает список файлов из текущей дирректории.

Возвращаемые значения:

Массив типа System.IO.FileInfo.

Из конференции VB

Вопрос

Как поместить mdb-файл в файл ресурсов?

Ответ

1. Project — Add New Resource Bin
2. Открываем его в Resource Editor
3. Add Custom Resource

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

BSP

Вопрос

Подскажите, где я не прав:

With DataEnvironment1.rsCommand1
   .MoveFirst
   Do While Not .EOF
      .Delete
      .MoveNext
   Loop
   .Requery
End With

Выдает ошибку если одна запись или ее нет. Как грамотно написать?

Ответ

AdoConn.Execute "delete from table_name",,adExecuteNoRecords

Vladimir Petrov

Ты не прав вот здесь: .MoveNext
Delete удаляет строку и все записи смещаются на 1 вверх. Так что, если у тебя 1 или 2 записи, то при Delete у тебя убивается 1-я, активной становится вторая(или .EOF), а .MoveNext пытается переместить указатель дальше. А куда?

Рязанов Андрей

Вопрос

Как проверить наличия файла в директории?

Ответ

If dir(FileName)<>"" then msgbox "Файл Есть!"

В dir еще можно подставлять флаги для скрытых файлов.

Артем Кривокрисенко

Вопрос

Есть строка C:\123\config.org. Как узнать самым простым спомобом, указывает на файл или папку?

Ответ

If Dir(FileName) <> "" Then
     MsgBox "file"
ElseIf Dir(FileName, vbDirectory) <> "" Then
     MsgBox "directory"
Else
     MsgBox "none"
End If
GetAttr


Можно также обратиться к файловой системе через АПИ. А у папок тоже бываю расширения, поэтому придется обращатся к файловой системе

WIN32_FILE_ATTRIBUTE_DATA wfad;
if
(GetFileAttributesEx(lpFileName,GetFileExInfoStandard,(LPWIN32_FILE_ATTRIBUTE_DATA)&wfad))
   {
     if (wfad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
     {// lpFileName is directory
     
     }else{// lpFileName is file
     }
   }else{// path does not exist, or we havo no access, see
     //getlasterror for more information
}

Это легко переделать на вб, будет работать железно.

Из конференции VB

Вопрос

Как программно снять атрибут «только чтение» с папки и файла?

Ответ

Для этого можно использовать Api-функцию SetFileAttributes.

Declare Function SetFileAttributes Lib "kernel32.dll" Alias "SetFileAttributesA" (ByVal lpFileName As String, ByVal dwFileAttributes As Long) As Long

lpFileName
Полное имя файла или папки.

dwFileAttributes
Один или несколько флагов, определяющих атрибуты файла.

FILE_ATTRIBUTE_ARCHIVE = &H20
Архивный файл.

FILE_ATTRIBUTE_HIDDEN = &H2
Скрытый файл или папка. Обычно его не видно пользователю.

FILE_ATTRIBUTE_NORMAL = &H80
Файл не имеет атрибутов(нельзя комбинировать с другими флагами).

FILE_ATTRIBUTE_READONLY = &H1
Файл только для чтения.

FILE_ATTRIBUTE_SYSTEM = &H4
Системный файл. Является частью операционной системы.

Получить атрибуты файла можно используя Api-функцию GetFileAttributes.

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

Вопрос

Как программно узнать имя CD-ROM'а?

Ответ

Private Declare Function GetVolumeInformation Lib "Kernel32" Alias
"GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As
String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long,
lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal
lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Private Sub Form_Load()
     'KPD-Team 1998
     'URL: http://www.allapi.net/
     'E-Mail: KPDTeam@Allapi.net
     Dim Serial As Long, VName As String, FSName As String
     Const CD_ROM As String = "C:\"
     'Create buffers
     VName = String$(255, Chr$(0))
     FSName = String$(255, Chr$(0))
     'Get the volume information
 GetVolumeInformation CD_ROM, VName, 255, Serial, 0, 0, FSName, 255
  'Strip the extra chr$(0)'s
   VName = Left$(VName, InStr(1, VName, Chr$(0)) — 1)
     FSName = Left$(FSName, InStr(1, FSName, Chr$(0)) — 1)
MsgBox "The Volume name of C:\ is '" + VName + "', the File system name of C:\
is '" + FSName + "' and the serial number of C:\ is '" + Trim(Str$(Serial)) + "'",
vbInformation + vbOKOnly, App.Title
End Sub


'VName — это и есть метка.Остальное если не надо можно поудалять.

Хвастунов Михаил

Вопрос

Говорят, что побайтовое чтение из файла быстрее. Файл я читаю построчно — line input. А как прочитать строчки в режиме binary?

Ответ

Dim s As string
Open "…" For Binary As #1
s=Space$(LOF(1))
Get#1,,s
Close #1

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

Вопрос

Я запускаю Dos-приложение из моей программы. Открывается консоль. Как прочитать все, что программа запишет в консоль?

Ответ

Пример взял из API-Guide, инструкция прилагается. Пользуйся!

'Redirects output from console program to textbox.
'Requires two textboxes and one command button.
'Set MultiLine property of Text2 to true.
'
'Original bcx version of this program was made by
' dl <dl@tks.cjb.net>
'VB port was made by Jernej Simoncic <jernej@isg.si>
'Visit Jernejs site at http://www2.arnes.si/~sopjsimo/
'
'Note: don't run plain DOS programs with this example
'under Windows 95,98 and ME, as the program freezes when
'execution of program is finnished.

Option Explicit
Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As SECURITY_ATTRIBUTES, ByVal nSize As Long) As Long
Private Declare Sub GetStartupInfo Lib "kernel32" Alias "GetStartupInfoA" (lpStartupInfo As STARTUPINFO)
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As Any) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Type SECURITY_ATTRIBUTES
 nLength As Long
 lpSecurityDescriptor As Long
 bInheritHandle As Long
End Type

Private Type PROCESS_INFORMATION
 hProcess As Long
 hThread As Long
 dwProcessId As Long
 dwThreadId As Long
End Type

Private Type STARTUPINFO
 cb As Long
 lpReserved As Long
 lpDesktop As Long
 lpTitle As Long
 dwX As Long
 dwY As Long
 dwXSize As Long
 dwYSize As Long
 dwXCountChars As Long
 dwYCountChars As Long
 dwFillAttribute As Long
 dwFlags As Long
 wShowWindow As Integer
 cbReserved2 As Integer
 lpReserved2 As Byte
 hStdInput As Long
 hStdOutput As Long
 hStdError As Long
End Type

Private Type OVERLAPPED
   ternal As Long
   ternalHigh As Long
   offset As Long
   OffsetHigh As Long
   hEvent As Long
End Type

Private Const STARTF_USESHOWWINDOW = &H1
Private Const STARTF_USESTDHANDLES = &H100
Private Const SW_HIDE = 0
Private Const EM_SETSEL = &HB1
Private Const EM_REPLACESEL = &HC2

Private Sub Command1_Click()
 Command1.Enabled = False
 Redirect Text1.Text, Text2
 Command1.Enabled = True
End Sub
Private Sub Form_Load()
   Text1.Text = "ping"
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
 If Command1.Enabled = False Then Cancel = True
End Sub

Sub Redirect(cmdLine As String, objTarget As Object)
 Dim i%, t$
 Dim pa As SECURITY_ATTRIBUTES
 Dim pra As SECURITY_ATTRIBUTES
 Dim tra As SECURITY_ATTRIBUTES
 Dim pi As PROCESS_INFORMATION
 Dim sui As STARTUPINFO
 Dim hRead As Long
 Dim hWrite As Long
 Dim bRead As Long
 Dim lpBuffer(1024) As Byte
 pa.nLength = Len(pa)
 pa.lpSecurityDescriptor = 0
 pa.bInheritHandle = True

 pra.nLength = Len(pra)
 tra.nLength = Len(tra)

 If CreatePipe(hRead, hWrite, pa, 0) <> 0 Then
   sui.cb = Len(sui)
   GetStartupInfo sui
   sui.hStdOutput = hWrite
   sui.hStdError = hWrite
   sui.dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESTDHANDLES
   sui.wShowWindow = SW_HIDE
If CreateProcess(vbNullString, cmdLine, pra, tra, True, 0, Null, vbNullString, sui, pi) <> 0 Then
     SetWindowText objTarget.hwnd, ""
     Do
  Erase lpBuffer()
If ReadFile(hRead, lpBuffer(0), 1023, bRead, ByVal 0&) Then
 SendMessage objTarget.hwnd, EM_SETSEL, -1, 0
  SendMessage objTarget.hwnd, EM_REPLACESEL, False, lpBuffer(0)
         DoEvents
       Else
         Exit Do
       End If
       CloseHandle hWrite
     Loop
     CloseHandle hRead
   End If
 End If
End Sub

P@Ssword

Вопрос

Как мне безоговорочно переписать существующий файл? Вот, что у меня есть:

 excelapp.Workbooks(1).SaveAs FileName:="c:\tmp.xls", AccessMode:=xlShared

  Сейчас, если файл c:\tmp.xls есть, то задается вопрос, переписать ли поверх. Мне же надо, чтобы он это не спрашивал, а сразу молча переписывал.

Ответ

Чтоб не выводились предупреждения в офисных приложениях, надо свойство DisplayAlerts установить в False:

excelapp.DisplayAlerts = False

excelapp.Workbooks(1).SaveAs FileName:="c:\tmp.xls", AccessMode:=xlShared

excelapp.DisplayAlerts = True

Kirill

Вопрос

Как сделать, чтобы программа добавлялась в автозагрузку (не в меню "Автозагрузка", а в реестр)?

Ответ

Для этого необходимо создать в разделе реестра
HKEY_LOCAL_MACHINE\ Software\ Microsoft\ Windows\ CurrentVersion\ Run строковый параметр. В значении параметра установить путь программы.
В модуле пишешь:

Option Explicit
Public Const REG_SZ As Long = 1
Public Const REG_DWORD As Long = 4
Public Const HKEY_LOCAL_MACHINE = &H80000002
Public Const HKEY_CLASSES_ROOT = &H80000000
Public Const HKEY_CURRENT_USER = &H80000001
Public Const HKEY_USERS = &H80000003
Public Const ERROR_NONE = 0
Public Const ERROR_BADDB = 1
Public Const ERROR_BADKEY = 2
Public Const ERROR_CANTOPEN = 3
Public Const ERROR_CANTREAD = 4
Public Const ERROR_CANTWRITE = 5
Public Const ERROR_OUTOFMEMORY = 6
Public Const ERROR_INVALID_PARAMETER = 7
Public Const ERROR_ACCESS_DENIED = 8
Public Const ERROR_INVALID_PARAMETERS = 87
Public Const ERROR_NO_MORE_ITEMS = 259
Public Const KEY_ALL_ACCESS = &H3F
Public Const REG_OPTION_NON_VOLATILE = 0
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Long, lpcbData As Long) As Long
Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Long, lpcbData As Long) As Long
Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String)
Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String)

'Создание нового ключа (подключа)
Public Function CreateNewKey(lPredefinedKey As Long, sNewKeyName As String)
Dim hNewKey As Long
Dim lRetVal As Long
lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, hNewKey,
lRetVal)
RegCloseKey (hNewKey)
End Function

'Запись данных в ключ
Public Function SetKeyValue(lPredefinedKey As Long, sKeyName As String, sValueName As String, vValueSetting As Variant, lValueType As Long)
Dim lRetVal As Long
Dim hKey As Long
lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
RegCloseKey (hKey)
End Function
Public Function SetValueEx(ByVal hKey As Long, sValueName As String, lType As Long, vValue As Variant) As Long
Dim lValue As Long
Dim sValue As String
Select Case lType
 Case REG_SZ
 sValue = vValue
   SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
      Case REG_DWORD
   lValue = vValue
   SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)

End Select
End Function

'Возвращает значения записанные в ключе
Public Function QueryValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)

Dim lRetVal As Long
Dim hKey As Long
Dim vValue As Variant

lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = QueryValueEx(hKey, sValueName, vValue)
QueryValue = vValue
RegCloseKey (hKey)
End Function

Function QueryValueEx(ByVal lhKey As Long, ByVal szValueName As String, vValue As Variant) As Long
Dim a As Integer
Dim cch As Long
Dim lrc As Long
Dim lType As Long
Dim lValue As Long
Dim sValue As String

On Error GoTo QueryValueExError
   
'Определение размера и типа считываемых данных
lrc = RegQueryValueExNULL(lhKey, szValueName, 0&, lType, 0&, cch)
If lrc <> ERROR_NONE Then a = 0

Select Case lType
   'Для символьных
   Case REG_SZ:
   sValue = String(cch, 0)
lrc = RegQueryValueExString(lhKey, szValueName, 0&, lType, sValue, cch)
   If lrc = ERROR_NONE Then
      vValue = Left$(sValue, cch)
   Else
      vValue = Empty
   End If

   'Для числовых
   Case REG_DWORD:
lrc = RegQueryValueExLong(lhKey, szValueName, 0&, lType, lValue, cch)
   If lrc = ERROR_NONE Then vValue = lValue
   'Для остальных не поддержанных типов данных
   Case Else
   lrc = -1
   End Select

QueryValueExExit:
   QueryValueEx = lrc
   Exit Function

QueryValueExError:
  Resume QueryValueExExit
End Function

'Удаление значений ключа

Public Function DeleteValue(lPredefinedKey As Long, sKeyName As String, sValueName As String)

Dim lRetVal As Long
Dim hKey As Long

lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
lRetVal = RegDeleteValue(hKey, sValueName)
RegCloseKey (hKey)
End Function

'Удаление ключа
Public Function DeleteKey(lPredefinedKey As Long, sKeyName As String)
Dim lRetVal As Long
lRetVal = RegDeleteKey(lPredefinedKey, sKeyName)
End Function

В примере написан полный код работы с реестром, если необходимо только записать данные, то лишнее можно убрать.
Применение:

Private Sub Command1_Click()
Dim path As String
path = "Software\Microsoft\Windows\CurrentVersion\Run"
CreateNewKey HKEY_LOCAL_MACHINE, path
SetKeyValue HKEY_LOCAL_MACHINE, path, "Назавание программы", "здесь пишешь полный путь программы", REG_SZ
End Sub

Иван

Вопрос

Если на VB написать программу и записать на CD-R, а затем написать соответствующий autorun.inf, чтобы программа запускалась при вставке диска в привод, то если на компьютере нет нужных библиотек (например, msvbvm60.dll), то программа не будет работать. Как быть?

Ответ

Надо просто поместить все необходимые библиотеки в корневой каталог твоего CD. Будет работать.

Sobic

Вопрос

Как создать новую папку на диске?

Ответ

MkDir pathname

Вопрос

Версия языка: 6

Создаю текстовый файл с использованием FSO. Открываю файл в ДОСе, вместо кирилицы — «кракозябры». Как создать файл в ДОС кодировке?

Ответ

Перед записью в файл нужно вызвать API-функцию CharToOEM. Ей нужно передать исходную строку (в WIndows-кодировке), ее длину, буфер для возвращаемой строки и длина буфера.

Из конференции Expert_FAQ

Вопрос

Помогите пожалуйста в работе с текстовыми файлами. Как считывать из них информацию, если они в DOS-кодировке.

Ответ

Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc AsString, ByVal lpszDst As String) As LongOemToChar
конвертирует текст из dos-кодировки в win-кодировку

Параметры:
lpszSrc Строка для перекодировки
lpszDst Перекодированная строка в буфере.

Если функция CharToOem используется как функция ANSI, строка может быть переведена на месте, устанавливая параметр lpszDst в тот же адрес, что и параметр lpszSrc.

Пример: конвертируем строку "Русский_Проект!" в win-кодировку.


'Воспользуйтесь каким-нибудь перекодировщиком,'чтобы получить эту строку в dos-кодировке
Dim sourcestring As String ' нужная строка
Dim deststring As String ' получаемая строка
Dim code As Long

sourcestring = "Русский_Проект" 'строка для перекодировки
deststring = Space$(Len(sourcestring))
code = OemToChar(sourcestring, deststring) 'получаем перекодированную строку
Debug.Print deststring

AlexV

Вопрос

Как убрать запятые из текста, текст находящийся в <> и отсортировать остаток в столбик.

Ответ

Пишешь поиск символов "," через InStr. Вот так:

no_symbol=InStr(no_symbol, file, ",")

Загоняешь в цикл. Каждый раз будет выдавать новое место запятой в тексте, и удаляешь это место. Далее заменяешь значение.

Mid(file, no_symbol, 1) = "."

В данном случае на точку. Для текста в кавычках ищешь открывающуюся кавычку, и закрывающуюся.

no_symbol1=InStr(no_symbol2, file, "<")
no_symbol2=InStr(no_symbol1, file, ">")


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

file=mid(file,0,no_symbol1) & mid(file,no_symbol2,len(file))

Вот мы и удалили все что надо. Теперь то же самое, только полностью в программном коде, никаких переменных я не объявлял.

find_symbol = ","
'что ищем
change_symbol = " "
'на что меняем
no_symbol = 1
'с какого символа начинаем
If Len(find_symbol) <> Len(change_symbol) Then Exit Sub
'порверяем, чтобы длина того что меняем не была разной и длиной на что
'меняем
For a = 1 To Len(file)
'а вдруг у нас весь файл в запятых?
no_symbol = InStr(no_symbol, file, ",")
'где это у нас там запятая?
Mid(file, no_symbol, Len(find_symbol)) = change_symbol
'меняем то что ищем на то что меняем
Next a


Тут надо еще поставить, чтобы при не нахождении запятой в данном случае, не было ошибки, и еще кое-что — в каждом случае ошибки будут разные. Чтобы удалить что то между символами — меняем цикл на:

find_symbol1 = "<"
'первый символ
find_symbol2 = ">"
'второй символ
no_symbol2 = 1
'это тоде изменить надо
For a = 1 To Len(file)
no_symbol1=InStr(no_symbol2, file, find_symbol1)
'ищем положение первого символа
no_symbol2=InStr(no_symbol1, file, find_symbol2)
'и второго
file=mid(file,0,no_symbol1) & mid(file,no_symbol2,len(file))
'удаляем
Next a


Илья П.

Вопрос

Можно ли удалить файл так что бы его нельяя было востановить даже unerase или undelete.

Ответ

'Вот как удалить файл без возможности восстановления

Option Explicit

Private Declare Function lcreat Lib "kernel32" Alias "_lcreat" (ByVal lpPathName As String, ByVal iAttribute As Long) As Long
Private Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
Private Declare Function lclose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long
Private Declare Function lwrite Lib "kernel32" Alias "_lwrite" (ByVal hFile As Long, ByVal lpBuffer As String, ByVal wBytes As Long) As Long
Private Declare Function lread Lib "kernel32" Alias "_lread" (ByVal hFile As Long, lpBuffer As Any, ByVal wBytes As Long) As Long
Private Declare Function llseek Lib "kernel32" Alias "_llseek" (ByVal hFile As Long, ByVal lOffset As Long, ByVal iOrigin As Long) As Long

Private Sub Form_Load()

Const BlockSize = 98304
Dim S As String
Dim F As String
Dim F1 As String
Dim F2 As String
Dim i As Long
Dim i1 As Long
Dim i2 As Long
Dim N As Integer
Dim CurSize As Long
Dim FAttr As Integer

F = "C:\1.txt" 'ИМЯ ФАЙЛА
CurSize = FileLen(F)
i1 = CurSize \ BlockSize
i2 = CurSize — i1 * BlockSize
FAttr = GetAttr(F)
SetAttr F, vbNormal
N = lopen(F, 2)
For i = 1 To i1 + 1
 DoEvents
 If i = i1 + 1 Then
   lwrite N, S, i2
 Else
   lwrite N, S, BlockSize
 End If
Next
lclose N
N = lopen(F, 2)
lwrite N, "", 0
lclose N
SetAttr F, FAttr
Kill F
End Sub

Rutshtein Alex

Вопрос

Как узнать дату и время создания файла command.com?

Ответ

Легко!

MsgBox FileDateTime("C:\command.com")

Igoryk

Вопрос

Есть такая функция — FileDateTime(PathName As String). В справке написано, что она возвращает метку времени и даты создания файла.

Я хочу, что бы она возвращала метку времени и даты создания также и каталога. Под W98, она возвращает мне эту метку. А под W2K, эта же функция возвращает дату и время модификации (а не создания) каталога.

Например, есть каталог 1. Его дата создания 01.01.2001 г. В этом каталоге есть файл 1.txt. И если я этот файл изменю 02.01.2001 г., то время модификации каталога будет 02.01.2001, а время создания по прежнему 01.01.2001 г.

Каким способом возможно вытянуть время и дату создания каталога, и чтобы этот способ работал и в W98, и в W2K?

Ответ

Не знаю как насчет времени, а дату создания папки можно вытащить с помощью FileSystemObject.

dim objfso as FileSystemObject
dim objFol as folder
dim d as Date
set objfso=createobject("Scripting.FileSystemObject")
Set objFol=objfso.GetFolder("Полный путь папки")
d=cDate(objFol.DateCreated)

Николай

Вопрос

Как узнать путь к папке Windows и папке с временными файлами?

Ответ

Dim windir as string
Dim tempdir as string
Dim blaster as string
Dim path as string
windir = Environ ("windir")
tempdir = Environ ("TEMP")
blaster = Environ ("BLASTER")
path = Environ ("PATH")


В переменной windir путь к папке с Windows, в tempdir папка с временными файлами, в blaster координаты звуковой карты, а в path пути, прописанные в autoexec.bat.

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

Вопрос

Как узнать есть или нету доступа к файлу из другой программы, т.е. свободен ли он для перемещения/удаления, а то вылазят дурацкие сообщения.

Ответ

Используй

Call CreateFile(lpcszFileName,(GENERIC_READ Or _
GENERIC_WRITE),0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)

Если файл занят то вернется INVALID_HANDLE_VALUE, в противном случае он свободен. И не забуть закрыть потом полученый описатель используя CloseHandle

Ivan Rozhuk

Вопрос

Что нужно передать функции Dir, чтоб она показывала скрытые файлы?

Ответ

Во втором параметре функции поставить vbHidden.

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

Вопрос

Никто не знает код, для шифрования отдельного файла? С использованием ключей и без Call Crypt(App.path & "\" & "file.txt")

Ответ

Public Function Encrypt(ByVal Source As String, ByVal Password As String) As String
'шифрование данных
Dim a As String
Dim b As String
Dim c As String
Dim d As String
Dim lentext As Long
Dim lenpass As Long
Dim cn As Long
'ввод исходных данных
'исходный текст для шифрования — запрашивается от пользователя, к примеру -
a = Source
'пароль: может запрашиваться от пользователя
b = Password
'итог шифрования
c = ""
'узнаем длины каждой из строк
lentext = Len(a)
lenpass = Len(b)
'собственно шифрование
For cn = 1 To lentext
'в этой строке разберитесь сами, здесь попросту выполняется функция Xor с каждым
'символом исходной строки и соответствующим символом пароля, как бы «повторенным»
'на всю длину исходного текста. Mid берет из середины строки символ, Asc — превращает
'его в ASCII-код, Str — превращает число в строку, Trim — удаляет пробелы
d = Trim(Str(Asc(Mid(a, cn, 1)) Xor Asc(Mid(b, ((cn — 1) Mod lenpass) + 1, 1))))
'а теперь сделаем так, чтобы каждый символ занимал ровно три позиции, вне зависимости
'от величины его ASCII-кода. А иначе как вы будете потом при расшифровке разбивать
'строку на символы?
Select Case Val(d)
Case 0 To 9
d = "00" + d
Case 10 To 99
d = "0" + d
End Select
c = c + d
'ну вот и все, и так — с каждым символом из исходной строки
Next cn
'в итоге в переменной с — зашифрованная строка, каждой исходной букве соответствует 3
'символа, ее можно записать в любое место — в документ, к примеру:
Encrypt = c
End Function

Public Function Decrypt(ByVal Code As String, ByVal Password As String) As String
'расшифровывание данных
Dim a As String
Dim b As String
Dim c As String
Dim d As String
Dim lentext As Long
Dim lenpass As Long
Dim cn As Long
'строка для расшифровки
c = Code
'пароль
b = Password
'итог расшифровывания
a = ""
'узнаем длины каждой из строк
lentext = Len©
lenpass = Len(b)
'собственно расшифровывание
For cn = 1 To lentext Step 3
a = a + Chr(Val(Mid(c, cn, 3)) Xor Asc(Mid(b, (Int(cn / 3) Mod lenpass) + 1, 1)))
Next cn
'в итоге в переменной a — расшифрованная строка, ее можно записать в любое место — в
документ, к примеру:
Decrypt = a
End Function

Private Sub Command1_Click()
Text1 = Encrypt("никому не скажу", "parol")
End Sub

Private Sub Command2_Click()
Text1 = Decrypt(Text1, "parol")
End Sub


Алексей

Вопрос

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

Ответ

FileExists = CBool(Len(Dir(FileName)))

Правда, при отсутствии директории: c:\win\win1\win2\file.fil нет win2, например, будет ошибка.

DmitryK1

Try
OpenFile(); // пробуешь открыть файл
except
// значит его нет
end;

Unknown

Вопрос

Каким способом можно редактировать текстовый файл в VB 6.0.

Ответ

Один из способов:

Помещаешь на форму компонент Microcoft Common Dialog Control и Microsoft Rich Textbox Control и пишешь такой код(например в кнопку):

Dim sFile As String ' Эту переменную надо объявить не в кнопке, а в начале файла

CommonDialog1.DialogTitle = «Открыть»

CommonDialog1.CancelError = False

CommonDialog1.Filter = «Текстовые файлы (*.txt)|*.txt»

CommonDialog1.ShowOpen

If Len(CommonDialog1.FileName) = 0 Then

Exit Sub

End If

sFile = CommonDialog1.FileName

RichTextBox1.LoadFile sFile

Файл читается в RichTextBox1 и его можно спокойно изменять!

Для сохранения изменений(код можно тоже поместить в кнопку):

RichTextBox1.SaveFile sFile

Конечно этот код еще не отполирован до блеска, но работоспособен и является хорошей базой для текстового редактора!!!

Из конференции Expert_FAQ

Вопрос

Какую информацию и каким образом можно откопать о файлах и папках на голом VB (без API)?

Ответ

Через FileSystem
GetAttr — атрибуты (файлы и папки)
FileLen — размер (файлы)
FileDateTime — дата создания / модификации (файлы)

Не говоря уже про путь ;4)

Через FileSystemObject — и того больше.
ShortName, ShortPath, ShareName, GetSpecialFolder, IsRootFolder IsReady — для CD…

Для документов Офиса — дополнительно может быть куча свойств (автор, кол-во строк и т.д.), а взять их можно из BuiltinDocumentProperties и CustomDocumentProperties

Alex

Вопрос

Что бы послать почту, пишу:

Private Declare Function ShellExecute& Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long)
Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Sub Label1_Click()
'Выяываем маил с адресом
Call ShellExecute(0&, "Open", "mailto:" + "ЛОГИН@СЕРВЕР.ru" + "?Subject=" + "'Здесь описана тема…'" + "?body=" + "'Сдесь
нужно написать сообщение'", "", "", SW_SHOWNORMAL)
End Sub

Но в почтовой программе текст 'Сдесь нужно написать сообщение' выводится там где вводится тема. Помогите сделать так чтобы в текстовом поле ияображалать текст

Ответ

Все дело в том что у вас получается след вызываемая комманда:
mailto:ЛОГИН@СЕРВЕР.ru?Subject=описана тема…?body=Сдесь нужно написать сообщение
Между Subject и Body должен быть знак (& — амперсанд), а не ? иначе ничего работать небудет!

Александр

Вопрос

В Excel 2000 при копировании листа

Sheets("Name").Copy After:="NameA"

Где-то на 26-31-й копии возникает ошибка #1004 и лист не копируется. Что это за глюк? Как с ним бороться?

Ответ

Используй следующий метод: не Sheets("Name").Copy, а ActiveSheet.Copy

str1 = ActiveSheet.Name + "_svod"
ActiveSheet.Name = "proverka"
ActiveSheet.Copy before:=Workbooks(WBN).Worksheets("START")
ActiveSheet.Copy before:=Worksheets(Worksheets.Count)

zhebelev

Вопрос

Если делать так:

Open FileName For OutPut As #1
Write #1, "Строка"
Close #1

то в файле появятся лишние кавычки. Как можно от них избавиться?

Ответ

Open "C:\1.y" For Output As #1
Print #1, "Строка"
Close #1

Или работай с файлом в режиме Binary.

Из конференции VB



Copyright © 2000-2004 Сообщество Чайников
Контактная информация