Меню

Dim fso as new filesystemobject ошибка

DO_oK

11 / 11 / 7

Регистрация: 05.11.2011

Сообщений: 87

1

08.08.2017, 09:32. Показов 7758. Ответов 11

Метки нет (Все метки)


Привет! Поискал решение, не нашел, давно не обращался за помощью на форум так вот ругается на первую же строчку кода, т.е. на «Sub FSD()». Весь код:

PureBasic
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
Sub FSD()
    FolderName = "O:путькпапке_кириллицей" 
 
    Dim coll As New Collection, filename
    filename = Dir(FolderPath$ & "*.htm")
    While filename <> ""
        coll.Add filename    ' ñ÷èòûâàåì â êîëåêöèþ coll íóæíûå èìåíà ôàéëîâ
        filename = Dir
    Wend
    Dim pos As Long
    Dim rowcunt As Long
    rowcunt = 3
    pcname = "<TR><TD><TD><TD>Êîìïüþòåð&nbsp;&nbsp;<TD>"
    
    For Each filename In coll
     Dim fso As New FileSystemObject
     Dim ts As TextStream
     Set ts = fso.OpenTextFile(FolderName & filename, ForReading)
     Dim TextLine As String
     Do Until ts.AtEndOfStream
         TL = ts.ReadLine
         pos = InStr(1, pcname, TL)
         If pos > 0 Then
            Range("B" & rowcunt).Value = Right(TL, Len(TL) - 42)
         End If
     Loop
     rowcunt = rowcunt + 1
     ts.Close
    Next
End Sub

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



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

08.08.2017, 09:42

2

Цитата
Сообщение от DO_oK
Посмотреть сообщение

FSD()

Обзови по другому FSD_1 , например.



0



11 / 11 / 7

Регистрация: 05.11.2011

Сообщений: 87

08.08.2017, 09:45

 [ТС]

3

Переименовал в FSD_1(), не работает. Вообще от имени не зависит пробовал разные варианты и кириллицу тоже



0



6874 / 2806 / 533

Регистрация: 19.10.2012

Сообщений: 8,550

08.08.2017, 09:46

4

Библиотека с FileSystemObject подключена?



0



11 / 11 / 7

Регистрация: 05.11.2011

Сообщений: 87

08.08.2017, 09:50

 [ТС]

5

Если речь идет об этом то видимо нет. Можно поподробней?

Миниатюры

User-defined type not defined. Ругается на объявление корневой процедуры
 



0



6874 / 2806 / 533

Регистрация: 19.10.2012

Сообщений: 8,550

08.08.2017, 10:17

6

Лучший ответ Сообщение было отмечено DO_oK как решение

Решение

Найдите и подключите Microsoft scripting runtime scrrun.dll



3



mobile

Эксперт MS Access

26771 / 14450 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

08.08.2017, 10:24

7

Библиотека Microsoft Scripting Runtime. Но часто применяют позднее связывание без объявления в референсах: вместо Dim fso As New FileSystemObject пишут

Visual Basic
1
2
Dim fso As Object
Set fso = createobject("scripting.FileSystemObject")

Добавлено через 31 секунду
Аппаздал



4



11 / 11 / 7

Регистрация: 05.11.2011

Сообщений: 87

08.08.2017, 10:25

 [ТС]

8

Проблема решилась, спасибо!

Найдите и подключите Microsoft scripting runtime scrrun.dll



0



es geht mir gut

11264 / 4746 / 1183

Регистрация: 27.07.2011

Сообщений: 11,437

08.08.2017, 10:29

9

Цитата
Сообщение от mobile
Посмотреть сообщение

Аппаздал

Зато в этом случае ничего не надо подключать .



0



DO_oK

11 / 11 / 7

Регистрация: 05.11.2011

Сообщений: 87

09.08.2017, 07:37

 [ТС]

10

Попробовал так, остается ошибка, не подскажите в чем дело?

PureBasic
1
2
3
4
5
6
7
8
     Dim fso As Object
     Set fso = CreateObject("scripting.FileSystemObject")
     Dim ts As TextStream
     Set ts = fso.OpenTextFile(FolderName & filename, ForReading)
     Dim TextLine As String
     Do Until ts.AtEndOfStream
         TL = ts.ReadLine
..........



0



6874 / 2806 / 533

Регистрация: 19.10.2012

Сообщений: 8,550

09.08.2017, 08:45

11

Ошибка в TextStream — что это, куда это… никто не знает.
Замените на Object



0



shanemac51

Модератор

Эксперт MS Access

11260 / 4591 / 739

Регистрация: 07.08.2010

Сообщений: 13,153

Записей в блоге: 4

09.08.2017, 09:21

12

у меня заработало, но после исправлений

Visual Basic
1
2
3
4
5
6
foldername = "O:путькпапке_кириллицей"
'''
pos = InStr(1, tl, pcname)
If pos > 0 And Len(tl) > 42 Then
Range("B" & rowcunt).Value = Right(tl, Len(tl) - 42)
End If



0



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.

Andrei Konstantinov's user avatar

asked Jul 13, 2010 at 0:00

Alex Gordon's user avatar

Alex GordonAlex Gordon

54.6k283 gold badges661 silver badges1046 bronze badges

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

VBA 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

Stephen Ostermiller's user avatar

answered Jul 13, 2010 at 10:46

Robert Mearns's user avatar

Robert MearnsRobert Mearns

11.7k3 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

Stefano Spinucci's user avatar

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's user avatar

shA.t

16.4k5 gold badges52 silver badges111 bronze badges

answered Jul 13, 2010 at 0:04

Gerald Ferreira's user avatar

Gerald FerreiraGerald Ferreira

1,3392 gold badges22 silver badges43 bronze badges

1

After adding the reference, I had to use

Dim fso As New Scripting.FileSystemObject

answered Feb 15, 2018 at 23:25

thedanotto's user avatar

thedanottothedanotto

6,5855 gold badges45 silver badges42 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

Stephen Ostermiller's user avatar

answered May 4, 2018 at 16:18

FIRE FOX's user avatar

  • Remove From My Forums
  • Question

  • I found some code that seems to fit what I’m trying to do, but I’m getting an error message that the user defined type is not defined.  The statements that won’t compile are listed below.  What library is needed to make this compile? I’m using
    Access 2013, but database version is 2007-2010.

        Dim fso As New FileSystemObject, sFile As Scripting.File
        Dim sourceFolder As Scripting.Folder
    


    For the benefit of others, please mark posts as answered or helpful when they answer or assist you in finding the answer. ___ «We came all this way to explore the Moon, and the most important thing is that we discovered the Earth.» — Bill Anders,
    Apollo 8.

Answers

  • Hi suzyQ,

    If you want to stick with early binding, I think you need a reference to Windows Script Host Object Model library.

    • Proposed as answer by

      Monday, December 7, 2015 2:58 AM

    • Marked as answer by
      Fei XueMicrosoft employee
      Monday, December 14, 2015 9:08 AM

 

copper-top

Пользователь

Сообщений: 1051
Регистрация: 22.10.2016

#1

19.12.2017 21:43:09

здравствуйте. прошу помочь. скопировал два макроса в файл. макрос Content_for_etfs_convert отработал без проблем. после запускаю replaceTxts. выходит ошибка и выделяется fso As New FileSystemObject синим. в файле, с которого скопировал, работает как надо.может, какие то библиотеки надо подключить?

Код
Sub Content_for_etfs_convert()
Kill "D:option programsотборIN*.*"
Kill "D:option programsотборOUT*.*"
  Dim fso
  Set fso = CreateObject("scripting.filesystemobject"):  fso.CopyFolder "C:UsersАдминистраторDownloadsStocksrcdistdownloads", "D:option programsотборIN"
 
Set fso = CreateObject("Scripting.FileSystemObject")
cPath = fso.GetParentFolderName(ThisWorkbook.FullName)
 
cPathIn = cPath & "In"
cPathOut = cPath & "Out"
 
Set Folder = fso.GetFolder(cPathIn)
For Each File In Folder.Files
   If fso.GetExtensionName(File.Name) = "txt" Then
      With fso.OpenTextFile(cPathIn & File.Name, 1, True)
         cIn = .ReadAll
         .Close
      End With
      cOut = vbCrLf & "DATE"
      arrL = Split(cIn, vbLf)
      For i = LBound(arrL) To UBound(arrL)
         If Len(arrL(i)) > 0 Then
            arrD = Split(arrL(i), ",")
            arrD(0) = Right(arrD(0), 2) & "." & Mid(arrD(0), 5, 2) & "." & Left(arrD(0), 4)
            For j = 1 To 4
               cnum = Replace(arrD(j), ".", ",")
               arrD(j) = Replace(CStr(Round(CDbl(cnum), 2)), ",", ".")
            Next
            cnum = Replace(arrD(6), ".", ",")
            arrD(6) = Replace(CStr(Round(CDbl(cnum), 0)), ",", ".")
            cOut = cOut & vbCrLf & Join(Array(arrD(0), arrD(1), arrD(2), arrD(3), arrD(4), arrD(6)), vbTab)
         End If
      Next
      With fso.OpenTextFile(cPathOut & File.Name, 2, True)
         .Write cOut
         .Close
      End With
   End If
Next

 
MsgBox "Ok"

End Sub
Sub replaceTxts()
    Dim fso As New FileSystemObject, curFolder As Folder, curFile As File
    folderPath = "D:option programsотборOUT"
    Set curFolder = fso.GetFolder(folderPath)
    For Each curFile In curFolder.Files
        If Right(curFile.Path, 4) = ".txt" Then
            curFile.copy Replace(curFile.Path, ".txt", ".csv")
            curFile.Delete
        End If
    Next curFile
End Sub
 

Hugo

Пользователь

Сообщений: 23100
Регистрация: 22.12.2012

#2

19.12.2017 21:48:58

Цитата
copper-top написал:
может, какие то библиотеки надо подключить?

— не может, а обязательно. Microsoft Scripting Runtime.
Или не подключайте, а юзайте как в первом коде, через createobject

Изменено: Hugo19.12.2017 21:50:03

 

The_Prist

Пользователь

Сообщений: 13958
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#3

19.12.2017 21:51:15

Либо для файла с кодом в VBA -Tools -References подключите библиотеку Microsoft Scripting Runtime, либо запишите процедуру так:

Код
Sub replaceTxts()
    Dim fso As Object, curFolder As Folder, curFile As File
    Set fso = CreateObject("scripting.filesystemobject")
    folderPath = "D:option programsотборOUT"
    Set curFolder = fso.GetFolder(folderPath)
    For Each curFile In curFolder.Files
        If Right(curFile.Path, 4) = ".txt" Then
            curFile.copy Replace(curFile.Path, ".txt", ".csv")
            curFile.Delete
        End If
    Next curFile
End Sub

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Hugo, The_Prist,  подключил библиотеку Microsoft Scripting Runtime. заработало.спасибо.

 

БМВ

Модератор

Сообщений: 20890
Регистрация: 28.12.2016

Excel 2013, 2016

copper-top,  ну реально кажется, что вы даже не пытаетесь решить проблему самостоятельно, сразу сюда.
Dim fso As New FileSystemObject — это зачем?  ограничте это Dim fso As Object,   Folder,  File — в туже топку

Да и в целом  вопрос к excel ваще не относится. Чистой воды VBS скрипты. То что они работают в VBA, то это только до первой Wscript. … (Я часто Excel как отладчик пользую, для  простых и не очень VBS) .

По вопросам из тем форума, личку не читаю.

 

copper-top

Пользователь

Сообщений: 1051
Регистрация: 22.10.2016

#6

19.12.2017 22:23:58

Цитата
БМВ написал:
не пытаетесь решить проблему самостоятельно

как я решу, если макросами умею только пользоваться. макросы получил на этом форуме, за что спасибо и форуму и авторам.

Цитата
БМВ написал:
Чистой воды VBS скрипты

так и есть. получил как скрипт. был скриптом — стал макросом.  

 

БМВ

Модератор

Сообщений: 20890
Регистрация: 28.12.2016

Excel 2013, 2016

#7

19.12.2017 22:37:05

Offtop

Цитата
copper-top написал: был скриптом — стал макросом

Как скриптом был, так им и остался, Возможно кто-то кроме меня из форумчан застал первые выпуски Excel в которых реально макросы записывались в лист условными командами вот так например NDX = 1: Do While NDX < IDN: SendKeys «{down}»: NDX = NDX + 1: Loop , вот с тех пор и повелось, что все что на VBA макросом кличут, хотя это уже давно не так.

По вопросам из тем форума, личку не читаю.

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
    Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

    Обратите внимание:
    1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
    2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
    3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
    4. Используйте теги [ code=vba ] …текст программы… [ /code ] для выделения текста программы подсветкой.
    5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
    6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

    Полезные ссылки:
    user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google


    Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.

    >
    Проблема с FSO

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    25.04.09, 11:37

      Доброго времени суток.

      Хочеться узнать как сделать так чтобы работала это (FSO)

      Когда я пытаюсь написать

      ExpandedWrap disabled

        Dim fso As New FileSystemObject

      то у меня не показывает FileSystemObject

      user posted image

      как это исправить ?


      Lumen



      Сообщ.
      #2

      ,
      25.04.09, 12:37

        Project->References и поставить галочку напротив Microsoft Scripting Runtime

        Profi

        Da$aD



        Сообщ.
        #3

        ,
        27.04.09, 13:39

          И еще нажать ОК))


          VisualProg



          Сообщ.
          #4

          ,
          27.04.09, 18:44

            ExpandedWrap disabled

              Dim FSO As Object

              Private Sub Form_Load()

              Set FSO = CreateObject(«Scripting.FileSystemObject»)

              End Sub

            — Если совсем лень…


            Змей



            Сообщ.
            #5

            ,
            27.04.09, 20:17

              Цитата lytgeygen @ 25.04.09, 11:37

              As New

              вот только хорошие книги настоятельно не рекомендуют использовать As New — в сложном коде это чревато тем, что ты не сможешь точно понять, где создаётся объект… а самое главное, он может быть создан случайно, при попытке проверить его значение — что приведёт к логической ошибке в коде.

              ПисАть
              Dim objFSO As Scripting.FileSystemObject
              Set objFSO = New Scripting.FileSystemObject

              совсем не сложнее, зато ты явно знаешь, когда и где создаётся объект.

              Цитата VisualProg @ 27.04.09, 18:44

              Если совсем лень…

              это не «если мсовсем лень», а позднее связывание. Неудобно тем, что среда не поддерживает автокомплит для таких объектов, зато имеет огромный плюс: в случае отсутствия нужной библиотеки, программа не упадёт при попытке запуска, а нормально запустится, дойдёт до попытки создать объект и сгененирует ошибку, которую можно перехватить обычным On Error — например, чтоб сообщить юзеру, где он должен взять недостающую длл`ку

              Master

              ANDLL



              Сообщ.
              #6

              ,
              27.04.09, 20:40

                Цитата Змей @ 27.04.09, 20:17

                плюс: в случае отсутствия нужной библиотеки, программа не упадёт при попытке запуска, а нормально запустится, дойдёт до попытки создать объект и сгененирует ошибку, которую можно перехватить обычным On Error — например, чтоб сообщить юзеру, где он должен взять недостающую длл`ку

                Аналогично и в случае с new


                VisualProg



                Сообщ.
                #7

                ,
                28.04.09, 08:24

                  Цитата Змей @ 27.04.09, 20:17

                  перехватить обычным On Error

                  Блин! :wall: :wall: :wall: А я то думал! Вот так всегда — учишся, подключаешь по 10 библиотек для отслеживания всех возможных ошибок, а тут когда проделанна годовая работа — «On Error» оказывается не просто НЕ частью Commondialog, это вообще самостоятельная функция, которую можно впихнуть в процедуру для отслеживания ошибок! lytgeygen чтож вы ету тему год назад не подняли?…

                  Wizard

                  B.V.



                  Сообщ.
                  #8

                  ,
                  28.04.09, 13:19

                    Цитата VisualProg @ 28.04.09, 08:24

                    «On Error» оказывается не просто НЕ частью Commondialog, это вообще самостоятельная функция

                    Я тебя еще больше удивлю — On Error не функция, это конструкция языка.

                    Profi

                    Da$aD



                    Сообщ.
                    #9

                    ,
                    28.04.09, 16:14

                      VisualProg, если ты не заметил, «On Error» по дефолту синеньким выделяется)


                      Змей



                      Сообщ.
                      #10

                      ,
                      29.04.09, 11:28

                        Цитата ANDLL @ 27.04.09, 20:40

                        Аналогично и в случае с new

                        не совсем.

                        Если библиотека подключена к проекту через References — запуск программы в системе, где эта библиотека не установлена, вызовет неустранимую ошибку СРАЗУ, ещё до начала выполнения кода программы.
                        Если же библиотека не подключена в References, а объекты создаются через CreateObject или GetObject — программа нормально запустится, а ошибка будет в момент попытки создания объекта.

                        например, так:

                        ExpandedWrap disabled

                          Private useCAPI As Boolean ‘переменная уровня модуля

                          Private Sub Class_Initialize()

                           On Error Resume Next

                           Set cao = CreateObject(«CAPICOM.Utilities»)

                           If cao Is Nothing Then

                            ‘библиотека микрософт криптоАПИ не установлена, будем юзать медленные самодельные функции.

                            useCAPI = False

                           Else

                            ‘всё нормально, можно юзать криптоАПИ.

                            useCAPI = True

                           End If

                          End Sub

                        или так:

                        ExpandedWrap disabled

                          Private Sub Class_Initialize()

                           On Error GoTo errh

                           Set fso = CreateObject(«Scripting.FileSystemObject»)

                           Set shl = CreateObject(«Shell.application»)

                           Set wsc = CreateObject(«WScript.Shell»)

                           Exit Sub

                          errh:

                           MsgBox «Не удалось подключить одну из системных библиотек. Ваша система повреждена или не соответствует требованиям программы.»

                           End

                          End Sub


                        nash



                        Сообщ.
                        #11

                        ,
                        29.04.09, 12:42

                          Цитата Змей @ 29.04.09, 11:28

                          Если библиотека подключена к проекту через References — запуск программы в системе, где эта библиотека не установлена, вызовет неустранимую ошибку СРАЗУ, ещё до начала выполнения кода программы.

                          офигеть какие новости.


                          Змей



                          Сообщ.
                          #12

                          ,
                          29.04.09, 13:31

                            nash, иди нафиг :) Я не для тебя говорю, а для тех, кому это и правда новость. И таких людей немало.

                            M

                            Кстати, nash, я обязан обратить ваше внимание на тот факт, что своим постом #11 вы грубо нарушаете Правила, п.5


                            nash



                            Сообщ.
                            #13

                            ,
                            29.04.09, 14:21

                              Цитата Змей @ 29.04.09, 13:31

                              кому это и правда новость

                              да потому что это не новость, а фигня (неправда).


                              Змей



                              Сообщ.
                              #14

                              ,
                              29.04.09, 14:46

                                .

                                Добавлено 29.04.09, 15:01

                                Цитата nash @ 29.04.09, 14:21

                                неправда

                                дааа???

                                батенька, в своём стремлении доказать кому-то свою крутизну вы уже совсем заврались.

                                Если программа скомпилирована с заявленной в References библиотекой, то на машине, где этой библиотеки нет, она не запустится СОВСЕМ.

                                nash, у меня и раньше были сомнения в вашей компетентности, но теперь вы их окончательно развеяли. Теперь я знаю точно: Вы некомпетентны.

                                сорри за оффтоп.

                                Wizard

                                B.V.



                                Сообщ.
                                #15

                                ,
                                29.04.09, 15:16

                                  Цитата nash @ 29.04.09, 14:21

                                  да потому что это не новость, а фигня (неправда).

                                  Эх, моя невнимательность. Мне чего-то показалось, что речь идет о Components. Хотя, и в этом случае, теоретически, можно выйти из положения, установив стартовой Sub Main.

                                  Цитата Змей @ 29.04.09, 14:46

                                  злостный оффтоп, п5, плюс личная переписка, п9.

                                  Злостный оффтоп пошел от тебя, как и личная переписка. nash высказался по теме, и он прав

                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                                  0 пользователей:

                                  • Предыдущая тема
                                  • Visual Basic: Общие вопросы
                                  • Следующая тема

                                  Рейтинг@Mail.ru

                                  [ Script execution time: 0,0416 ]   [ 16 queries used ]   [ Generated: 28.01.23, 18:34 GMT ]  

                                  Вопрос:

                                  Есть ли что-то, что мне нужно для ссылки? Как это использовать:

                                  Dim fso As New FileSystemObject
                                  Dim fld As Folder
                                  Dim ts As TextStream
                                  

                                  Я получаю сообщение об ошибке, потому что он не распознает эти объекты.

                                  Лучший ответ:

                                  В Excel вам нужно установить ссылку на библиотеку времени исполнения VB. Соответствующий файл обычно находится в папке WindowsSystem32scrrun.dll

                                  • Чтобы ссылаться на этот файл, загрузите редактор Visual Basic (ALT + F11)
                                  • Выберите “Инструменты”> “Ссылки” в раскрывающемся меню
                                  • Появится список доступных ссылок.
                                  • Установите флажок рядом с ” Microsoft Scripting Runtime
                                  • Полное имя и путь к файлу scrrun.dll будут отображаться под списком
                                  • Нажмите кнопку OK.

                                  Это также можно сделать непосредственно в коде, если включен доступ к объектной модели VBA.

                                  Доступ можно включить, отметив флажок Trust access to the VBA project object model найденному в меню “Файл”> “Параметры”> “Центр доверия”> “Настройки центра доверия”> “Параметры макроса”

                                  VBA Macro settings

                                  Чтобы добавить ссылку:

                                  Sub Add_Reference()
                                  
                                      Application.VBE.ActiveVBProject.References.AddFromFile "C:WindowsSystem32scrrun.dll"
                                  'Add a reference
                                  
                                  End Sub
                                  

                                  Чтобы удалить ссылку:

                                  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
                                  

                                  Ответ №1

                                  У этих ребят есть отличные примеры использования объекта файловой системы 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
                                  %>
                                  

                                  Ответ №2

                                  В excel 2013 строка создания объекта:

                                  Dim fso
                                  Set fso = CreateObject("Scripting.FileSystemObject")
                                  

                                  вместо кода в ответе выше:

                                  Dim fs,fname
                                  Set fs=Server.CreateObject("Scripting.FileSystemObject")
                                  

                                  Ответ №3

                                  После добавления ссылки мне пришлось использовать

                                  Dim fso As New Scripting.FileSystemObject
                                  

                                  Ответ №4

                                  После импорта сценария выполнения, как описано выше, вы должны внести некоторые незначительные изменения, чтобы заставить его работать в Excel 2010 (моя версия). В следующий код я также добавляю код, используемый пользователю для выбора файла.

                                  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
                                  

                                  Надеюсь, это поможет!

                                  С наилучшими пожеланиями

                                  Fabio

                                  0 0 голоса
                                  Рейтинг статьи
                                  Подписаться
                                  Уведомить о
                                  guest

                                  0 комментариев
                                  Старые
                                  Новые Популярные
                                  Межтекстовые Отзывы
                                  Посмотреть все комментарии

                                  А вот еще интересные материалы:

                                • Яшка сломя голову остановился исправьте ошибки
                                • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
                                • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
                                • Dihr lp3 s plus коды ошибок
                                • Digitronic ошибка подключения 5 1