Страницы: 1
RSS
Не работают макросы в другом файле
 
здравствуйте. прошу помочь. скопировал два макроса в файл. макрос 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\Администратор\Downloads\Stock\src\dist\downloads", "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
 
Цитата
copper-top написал:
может, какие то библиотеки надо подключить?
- не может, а обязательно. Microsoft Scripting Runtime.
Или не подключайте, а юзайте как в первом коде, через createobject
Изменено: Hugo - 19.12.2017 21:50:03
 
Либо для файла с кодом в 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. заработало.спасибо.
 
copper-top,  ну реально кажется, что вы даже не пытаетесь решить проблему самостоятельно, сразу сюда.
Dim fso As New FileSystemObject - это зачем?  ограничте это Dim fso As Object,   Folder,  File - в туже топку

Да и в целом  вопрос к excel ваще не относится. Чистой воды VBS скрипты. То что они работают в VBA, то это только до первой Wscript. ... (Я часто Excel как отладчик пользую, для  простых и не очень VBS) .
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
не пытаетесь решить проблему самостоятельно
как я решу, если макросами умею только пользоваться. макросы получил на этом форуме, за что спасибо и форуму и авторам.
Цитата
БМВ написал:
Чистой воды VBS скрипты
так и есть. получил как скрипт. был скриптом - стал макросом.  
 
Offtop
Цитата
copper-top написал: был скриптом - стал макросом
Как скриптом был, так им и остался, Возможно кто-то кроме меня из форумчан застал первые выпуски Excel в которых реально макросы записывались в лист условными командами вот так например NDX = 1: Do While NDX < IDN: SendKeys "{down}": NDX = NDX + 1: Loop , вот с тех пор и повелось, что все что на VBA макросом кличут, хотя это уже давно не так.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх