21K
18 февраля 2007 года
dedmakar
6 / / 25.12.2006
Хочу создать фаил. Набираю этот КОД:
Private Sub Command1_Click()
Dim fso As New FileSystemObject
fso.CreateTextFile «C:file1.txt»
End Sub
Выдаёт ошибку:
«User-defined type not defined.»
А в коде выделяет:
Private Sub Command1_Click()
Dim fso As New FileSystemObject
fso.CreateTextFile «C:file1.txt»
End Sub
Что делать? Я только новичок, если что SORRY….
2 ответа
405
19 февраля 2007 года
Dmitrii
554 / / 16.12.2004
Вам нужно либо подключить к проекту библиотеку Microsoft Scripting Runtime (файл scrrun.dll), либо использовать «позднее связывание». Пример для последнего способа:
Код:
Dim fso As Object, myFile As Object
Set fso = CreateObject(«Scripting.FileSystemObject»)
Set myFile = fso.CreateTextFile(«c:file1.txt»)
myFile.WriteLine(«This is a test.»)
myFile.Close
21K
20 февраля 2007 года
dedmakar
6 / / 25.12.2006
Спасибо!!! Я воспользовался Microsoft Common Dialog Control 6.0..
Полное объяснение тут
Объявление переменной типа File, FileSystemObject |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
copper-top Пользователь Сообщений: 1051 |
#1 19.12.2017 21:43:09 здравствуйте. прошу помочь. скопировал два макроса в файл. макрос Content_for_etfs_convert отработал без проблем. после запускаю replaceTxts. выходит ошибка и выделяется fso As New FileSystemObject синим. в файле, с которого скопировал, работает как надо.может, какие то библиотеки надо подключить?
|
||
Hugo Пользователь Сообщений: 23371 |
#2 19.12.2017 21:48:58
— не может, а обязательно. Microsoft Scripting Runtime. Изменено: Hugo — 19.12.2017 21:50:03 |
||
The_Prist Пользователь Сообщений: 14264 Профессиональная разработка приложений для MS Office |
#3 19.12.2017 21:51:15 Либо для файла с кодом в VBA -Tools -References подключите библиотеку Microsoft Scripting Runtime, либо запишите процедуру так:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Hugo, The_Prist, подключил библиотеку Microsoft Scripting Runtime. заработало.спасибо. |
|
БМВ Модератор Сообщений: 21650 Excel 2013, 2016 |
copper-top, ну реально кажется, что вы даже не пытаетесь решить проблему самостоятельно, сразу сюда. Да и в целом вопрос к excel ваще не относится. Чистой воды VBS скрипты. То что они работают в VBA, то это только до первой Wscript. … (Я часто Excel как отладчик пользую, для простых и не очень VBS) . По вопросам из тем форума, личку не читаю. |
copper-top Пользователь Сообщений: 1051 |
#6 19.12.2017 22:23:58
как я решу, если макросами умею только пользоваться. макросы получил на этом форуме, за что спасибо и форуму и авторам.
так и есть. получил как скрипт. был скриптом — стал макросом. |
||||
БМВ Модератор Сообщений: 21650 Excel 2013, 2016 |
#7 19.12.2017 22:37:05 Offtop
Как скриптом был, так им и остался, Возможно кто-то кроме меня из форумчан застал первые выпуски Excel в которых реально макросы записывались в лист условными командами вот так например NDX = 1: Do While NDX < IDN: SendKeys «{down}»: NDX = NDX + 1: Loop , вот с тех пор и повелось, что все что на VBA макросом кличут, хотя это уже давно не так. По вопросам из тем форума, личку не читаю. |
||
Is there something that I need to reference? How do I use this:
Dim fso As New FileSystemObject
Dim fld As Folder
Dim ts As TextStream
I am getting an error because it does not recognize these objects.
asked Jul 13, 2010 at 0:00
Within Excel you need to set a reference to the VBScript run-time library.
The relevant file is usually located at WindowsSystem32scrrun.dll
- To reference this file, load the
Visual Basic Editor (ALT+F11) - Select Tools > References from the drop-down menu
- A listbox of available references will be displayed
- Tick the check-box next to ‘
Microsoft Scripting Runtime
‘ - The full name and path of the
scrrun.dll
file will be displayed below the listbox - Click on the OK button.
This can also be done directly in the code if access to the VBA object model has been enabled.
Access can be enabled by ticking the check-box Trust access to the VBA project object model
found at File > Options > Trust Center > Trust Center Settings > Macro Settings
To add a reference:
Sub Add_Reference()
Application.VBE.ActiveVBProject.References.AddFromFile "C:WindowsSystem32scrrun.dll"
'Add a reference
End Sub
To remove a reference:
Sub Remove_Reference()
Dim oReference As Object
Set oReference = Application.VBE.ActiveVBProject.References.Item("Scripting")
Application.VBE.ActiveVBProject.References.Remove oReference
'Remove a reference
End Sub
answered Jul 13, 2010 at 10:46
Robert MearnsRobert Mearns
11.8k3 gold badges38 silver badges42 bronze badges
3
In excel 2013 the object creation string is:
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
instead of the code in the answer above:
Dim fs,fname
Set fs=Server.CreateObject("Scripting.FileSystemObject")
answered Jul 31, 2016 at 19:54
1
These guys have excellent examples of how to use the filesystem object http://www.w3schools.com/asp/asp_ref_filesystem.asp
<%
dim fs,fname
set fs=Server.CreateObject("Scripting.FileSystemObject")
set fname=fs.CreateTextFile("c:test.txt",true)
fname.WriteLine("Hello World!")
fname.Close
set fname=nothing
set fs=nothing
%>
shA.t
16.5k5 gold badges54 silver badges111 bronze badges
answered Jul 13, 2010 at 0:04
Gerald FerreiraGerald Ferreira
1,3492 gold badges22 silver badges44 bronze badges
1
After adding the reference, I had to use
Dim fso As New Scripting.FileSystemObject
answered Feb 15, 2018 at 23:25
thedanottothedanotto
6,7955 gold badges45 silver badges43 bronze badges
After importing the scripting runtime as described above you have to make some slighty modification to get it working in Excel 2010 (my version). Into the following code I’ve also add the code used to the user to pick a file.
Dim intChoice As Integer
Dim strPath As String
' Select one file
Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
' Show the selection window
intChoice = Application.FileDialog(msoFileDialogOpen).Show
' Get back the user option
If intChoice <> 0 Then
strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
Else
Exit Sub
End If
Dim FSO As New Scripting.FileSystemObject
Dim fsoStream As Scripting.TextStream
Dim strLine As String
Set fsoStream = FSO.OpenTextFile(strPath)
Do Until fsoStream.AtEndOfStream = True
strLine = fsoStream.ReadLine
' ... do your work ...
Loop
fsoStream.Close
Set FSO = Nothing
answered May 4, 2018 at 16:18
Объект FileSystemObject, предоставляющий в VBA Excel доступ к файловой системе компьютера. Создание экземпляра FileSystemObject и его методы. Примеры.
FileSystemObject – это объект, который предоставляет доступ к файловой системе компьютера: дискам, папкам (каталогам), файлам.
Объект FileSystemObject обеспечивает в коде VBA Excel следующие возможности:
- Проверка существования диска, папки или файла.
- Создание новой папки.
- Создание текстового файла и предоставление последовательного доступа для записи.
- Открытие текстового файла и предоставление последовательного доступа для записи или чтения.
- Копирование, перемещение и удаление папок и файлов.
- Работа с путями к папкам и файлам.
- Возвращение имен дисков, папок и файлов.
Создание, свойство, методы
Создание экземпляра FileSystemObject
Создать новый экземпляр объекта FileSystemObject можно с помощью раннего или позднего связывания.
Раннее связывание
В одну строку:
Dim fso As New FileSystemObject |
В две строки:
Dim fso As FileSystemObject Set fso = New FileSystemObject |
Позднее связывание
Dim fso As Object Set fso = CreateObject(«Scripting.FileSystemObject») |
Свойство FileSystemObject
В VBA Excel у объекта FileSystemObject есть только одно свойство (Excel 2016):
Свойство | Описание |
---|---|
Drives | Возвращение коллекции всех дисков на компьютере |
Методы FileSystemObject
Свойство | Описание |
---|---|
BuildPath | Добавление имени в существующий путь |
CopyFile | Копирование одного или нескольких файлов из одного расположения в другое |
CopyFolder | Копирование одной или нескольких папок из одного расположения в другое |
CreateFolder | Создание новой папки |
CreateTextFile | Создание текстового файла и возвращение объекта TextStream, используемого для записи в файл |
DeleteFile | Удаление одного или нескольких указанных файлов |
DeleteFolder | Удаление одной или нескольких указанных папок |
DriveExists | Проверка существования указанного диска |
FileExists | Проверка существования указанного файла |
FolderExists | Проверка существования указанной папки |
GetAbsolutePathName | Возвращение полного пути из корневого каталога диска для указанного пути |
GetBaseName | Возвращение базового имени указанного файла или папки |
GetDrive | Возвращение объекта Drive, соответствующего диску в указанном пути |
GetDriveName | Возвращение имени диска указанного пути |
GetExtensionName | Возвращение расширения файла для последнего компонента в указанном пути |
GetFile | Возвращение файла по указанному пути |
GetFileName | Возвращение имени файла или папки для последнего компонента в указанном пути |
GetFileVersion | Возвращение версии файла для последнего компонента в указанном пути |
GetFolder | Возвращение папки по указанному пути |
GetParentFolderName | Возвращение имени родительской папки последнего компонента в указанном пути |
GetSpecialFolder | Возвращение пути к некоторым специальным папкам Windows |
GetStandardStream | Возвращение стандартного ввода, вывода или потока ошибок |
GetTempName | Возвращение созданного случайным образом временного файла или папки |
Move | Перемещение указанного файла или папки из одного места в другое |
MoveFile | Перемещение одного или нескольких файлов из одного места в другое |
MoveFolder | Перемещение одного или нескольких папок из одного места в другое |
OpenTextFile | Открытие файла по указанному пути и возвращение объекта TextStream, используемого для чтения, записи и добавления данных в файл |
Смотрите, как с помощью VBA Excel можно открыть папку в проводнике Windows для просмотра.
Примеры кода с FileSystemObject
Пример 1
Получение списка всех дисков на компьютере с помощью свойства Drives:
Sub Primer1() Dim fso, drs, dr, str Set fso = CreateObject(«Scripting.FileSystemObject») Set drs = fso.Drives For Each dr In drs str = str & dr.DriveLetter & _ » — « & dr.VolumeName & vbCrLf Next MsgBox str End Sub |
Используемые переменные:
- fso – объект FileSystemObject;
- drs – коллекция дисков на компьютере (Drives);
- dr – один диск (Drive);
- str – строка со списком всех дисков (буквенное обозначение и имя).
Используемые свойства диска:
- DriveLetter – буквенное обозначение диска;
- VolumeName – присвоенное диску имя.
Если у вас на компьютере только системный диск «C», вставьте пару USB-накопителей (флешек). Имя диску «C» можно присвоить, выбрав его в проводнике и нажав клавишу «F2».
Результат работы кода будет примерно такой:
Пример 2
Создание новой папки, проверка ее существования и удаление:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub Primer2() ‘Объявляем переменную fso как новый экземпляр ‘FileSystemObject (раннее связывание) Dim fso As New FileSystemObject, _ adr As String ‘В строковую переменную записываем ‘путь и имя создаваемой папки adr = ThisWorkbook.Path & «temp» With fso ‘Создаем новую папку .CreateFolder (adr) ‘Проверяем существование новой папки (True) MsgBox .FolderExists(adr) ‘Возвращаем имя новой папки (temp) MsgBox .GetFileName(adr) ‘Удаляем папку .DeleteFolder (adr) ‘Проверяем существование папки (False) MsgBox .FolderExists(adr) End With End Sub |
При остановке программы во время отображения одного из первых двух информационных окон MsgBox, вы можете перейти в проводник и убедиться, что в каталоге, где расположен файл Excel с этим кодом VBA, есть папка «temp».
Home
> Technology > FileSystemObject in Visual Basic 6.0
When you tried to declare Dim fso as FileSystemObject in your code and you get an error, most probably the only thing you need to do is go to Project > References. At the list of the available references, scroll down to ‘Microsoft Scripting Runtime (scrrun.dll)’ make sure it is checked (right symbol at the checkbox), and click OK.
Your code should be able to use FileSystemObject by now.
Again, hope it helps somebody.
- Remove From My Forums
-
Question
-
I have encountered an error when trying to create a FileSystemObject. This code has been running fine for about a year and a half, but now on one system my user is recieving:
«Run-Time error ‘429’
ActiveX component can’t create object»
The error occurs on this line:
Dim fso as Object
fso = CreateObject(«Scripting.FileSystemObject»)
Answers
-
Dim fso as Scripting.FileSystemObject
set fso = new Scripting.FileSystemObject
Also reference the MS Scritping Runtime. That’s all I can do.
- Remove From My Forums
-
Вопрос
-
Прошу помощи. На работе перестали работать собственноручно писанные и много лет работающие скрипты.
Код прерывается на попытке создать Scripting.FileSystemObject
В прошлый раз, когда возникла эта проблема (непонятно после чего, скриптами пользуюсь раз в пару дней, момент когда перестают работать не отследить) пришлось откатиться к бэкапу. Но т.к. проблема возникла снова — необходимо
научиться ее решать.Потому прошу помощи уважаемого сообщества. Исходные данные:
Win7 x64.
код, не работающий из файла .vbs
'#$language = "VBScript" '#$interface = "1.0" Dim WSH, FSO Set WSH = CreateObject ("WSCript.shell") Set FSO = CreateObject("Scripting.FileSystemObject")
Выдает ошибку 8002801D «библиотека не зарегистрированна».
консольные команды из под администратора
regsvr32 scrrun.dll /u — Модуль scrrun.dll загружен, но не удалось выполнить вызов DllUnregisterServer, код ошибки 0x8002801в
regsvr32 scrrun.dll /i — Модуль scrrun.dll загружен, но точка входа DllInstall не найдена. Проверьте, что «scrrun.dll» является правильным файлом DLL или OCX и повторите попытку.
regsvr32 scrrun.dll — Успешное выполнение DllUnregisterServer в scrrun.dll
Но после этого успешного проблема не уходит.
Куда копать дальше? Есть вероятность, что это произошло после обновлений, но в журнале их великое множество, не отследить.
Ответы
-
Отвечаю сам себе. В моем случае.
Идем в regeditИщем первую попавшуюся запись с содержанием Scripting.FileSystemObject
у меня это
HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{0D43FE01-F093-11CF-8940-00A0C9054228}ProgID
в сосдней папке с которым (TypeLib) есть ссылка на этот самый TypeLIb
HKEY_LOCAL_MACHINESOFTWAREClassesCLSID{0D43FE01-F093-11CF-8940-00A0C9054228}TypeLib:
{420B2830-E718-11CF-893D-00A0C9054228}
Теперь ищем раздел {420B2830-E718-11CF-893D-00A0C9054228}
в результатах поиска будет много ссылок на него, на нам нужен именно раздел
[HKEY_CLASSES_ROOTTypeLib{420B2830-E718-11CF-893D-00A0C9054228}]
Нажимаем по нему правой кнопкой. Нужно выставить разрешения, для чего мне по кнопочке «дополнительно» пришлось сделать админастратора владельцем (вместо TrustedInstaller), потом получилось сделать
разрешение себе на редактирование этой ветки.Затем восстанавливаем значения этой ветки, я взял значения с аналогичной операционки у коллеги. Вот содержание получившегося reg файла
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOTTypeLib{420B2830-E718-11CF-893D-00A0C9054228}] [HKEY_CLASSES_ROOTTypeLib{420B2830-E718-11CF-893D-00A0C9054228}1.0] @="Microsoft Scripting Runtime" [HKEY_CLASSES_ROOTTypeLib{420B2830-E718-11CF-893D-00A0C9054228}1.0] [HKEY_CLASSES_ROOTTypeLib{420B2830-E718-11CF-893D-00A0C9054228}1.0win32] @="C:\Windows\SysWOW64\scrrun.dll" [HKEY_CLASSES_ROOTTypeLib{420B2830-E718-11CF-893D-00A0C9054228}1.0win64] @="C:\Windows\system32\scrrun.dll" [HKEY_CLASSES_ROOTTypeLib{420B2830-E718-11CF-893D-00A0C9054228}1.0FLAGS] @="0" [HKEY_CLASSES_ROOTTypeLib{420B2830-E718-11CF-893D-00A0C9054228}1.0HELPDIR] @="C:\Windows\system32"
После добавления этого в мой реестр — скрипты снова заработали.
-
Предложено в качестве ответа
26 апреля 2016 г. 3:35
-
Помечено в качестве ответа
Dmitriy VereshchakMicrosoft contingent staff
30 апреля 2016 г. 17:19
-
Предложено в качестве ответа