Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Путь к файлу переменными и сами переменные - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Путь к файлу переменными и сами переменные
televnoy Дата: Четверг, 15.03.2018, 21:21 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброго времени суток уважаемые форумчане.
Задача состоит в том. Чтобы копировать файл в папку с новым именем, но с подменной данных из ячейки.
Нашел два макроса:
Первый копирует файл с новыми значениями

[vba]
Код
Sub CHANGE_NAME_FILE()
Application.ScreenUpdating = 0
Application.DisplayAlerts = 0
Dim Im_Main, Put_File, sch_VERT As Variant
Dim FS, KATALOG, FILE, MASSIV As Object
Dim II, JJ As Integer
    Range("C2:C65000").Select
    Selection.ClearContents
sch_VERT = Cells(1, 1).End(xlDown).Row - 1
Dim OLD_NAME(), NEW_NAME() As Variant
ReDim OLD_NAME(sch_VERT, 1), NEW_NAME(sch_VERT, 1)
    Range("A1:B" + Trim(Str(sch_VERT + 1))).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
OLD_NAME = Range(Cells(2, 1), Cells(2 + sch_VERT, 1))
NEW_NAME = Range(Cells(2, 2), Cells(2 + sch_VERT, 2))

Im_Main = ActiveWorkbook.Name
Put_File = Application.ActiveWorkbook.Path + "\"
Set FS = CreateObject("Scripting.FileSystemObject")
Set KATALOG = FS.GetFolder(Put_File)
Set MASSIV = KATALOG.Files
If Dir(Put_File + "OUT\", vbDirectory) = "" Then
    MkDir (Put_File + "OUT\")
End If
If Dir(Put_File + "OUT\", vbDirectory) <> "" Then
   'If Len(Dir(Put_File + "OUT\*.*")) > 0 Then
      'Kill (Put_File + "OUT\*.*")
   'End If

For II = 1 To sch_VERT
    For Each FILE In MASSIV
        If Dir(FILE) = OLD_NAME(II, 1) And Dir(FILE) <> Im_Main Then
           FileCopy FILE, Application.ActiveWorkbook.Path + "\OUT\" + NEW_NAME(II, 1)
           Cells(II + 1, 5).Value = "готов"
        End If
    Next
Next 'ii
MsgBox "ГОТОВО"
End If
Application.ScreenUpdating = 1
Application.DisplayAlerts = 1
End Sub
[/vba]

Второй изменяет текст

[vba]
Код
Sub test()
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = "C:\Users\Televnoy\Desktop\обрабатываемые файлы\OUT\m-08 1.txt"
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, "КОШКА", "ПЕС")
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
End Sub
[/vba]

Хочу последний макрос вклинить в предыдущий, до последней процедуры.
Добавил переменные OLD_ID(), NEW_ID путь прописал Filename = Put_File + "OUT\" & NEW_NAME, но как то я все криво понаделал.

[vba]
Код
Sub CHANGE_NAME_FILE()
Application.ScreenUpdating = 0
Application.DisplayAlerts = 0
Dim Im_Main, Put_File, sch_VERT As Variant
Dim FS, KATALOG, FILE, MASSIV As Object
Dim II, JJ As Integer
    Range("C2:C65000").Select
    Selection.ClearContents
sch_VERT = Cells(1, 1).End(xlDown).Row - 1
Dim OLD_NAME(), NEW_NAME(), OLD_ID(), NEW_ID As Variant
ReDim OLD_NAME(sch_VERT, 1), NEW_NAME(sch_VERT, 1)
    Range("A1:B" + Trim(Str(sch_VERT + 1))).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
OLD_NAME = Range(Cells(2, 1), Cells(2 + sch_VERT, 1))
NEW_NAME = Range(Cells(2, 2), Cells(2 + sch_VERT, 2))
   '_____________________________
OLD_ID() = Range(Cells(2, 3), Cells(2 + sch_VERT, 3))
NEW_ID() = Range(Cells(2, 4), Cells(2 + sch_VERT, 4))
   '_____________________________
Im_Main = ActiveWorkbook.Name
Put_File = Application.ActiveWorkbook.Path + "\"
Set FS = CreateObject("Scripting.FileSystemObject")
Set KATALOG = FS.GetFolder(Put_File)
Set MASSIV = KATALOG.Files
If Dir(Put_File + "OUT\", vbDirectory) = "" Then
    MkDir (Put_File + "OUT\")
End If
If Dir(Put_File + "OUT\", vbDirectory) <> "" Then
   'If Len(Dir(Put_File + "OUT\*.*")) > 0 Then
      'Kill (Put_File + "OUT\*.*")
   'End If
   '_____________________________
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = Put_File + "OUT\" & NEW_NAME
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, OLD_ID, NEW_ID)
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
'__________________________________
   
For II = 1 To sch_VERT
    For Each FILE In MASSIV
        If Dir(FILE) = OLD_NAME(II, 1) And Dir(FILE) <> Im_Main Then
           FileCopy FILE, Application.ActiveWorkbook.Path + "\OUT\" + NEW_NAME(II, 1)
           Cells(II + 1, 5).Value = "готов"
        End If
    Next
Next 'ii
MsgBox "ГОТОВО"
End If
Application.ScreenUpdating = 1
Application.DisplayAlerts = 1
End Sub
[/vba]

Свои правки выделил '______________
К сообщению приложен файл: 6049029.xls (47.0 Kb) · m-08.txt (0.0 Kb)


О-па! 0_o

Сообщение отредактировал televnoy - Четверг, 15.03.2018, 21:28
 
Ответить
СообщениеДоброго времени суток уважаемые форумчане.
Задача состоит в том. Чтобы копировать файл в папку с новым именем, но с подменной данных из ячейки.
Нашел два макроса:
Первый копирует файл с новыми значениями

[vba]
Код
Sub CHANGE_NAME_FILE()
Application.ScreenUpdating = 0
Application.DisplayAlerts = 0
Dim Im_Main, Put_File, sch_VERT As Variant
Dim FS, KATALOG, FILE, MASSIV As Object
Dim II, JJ As Integer
    Range("C2:C65000").Select
    Selection.ClearContents
sch_VERT = Cells(1, 1).End(xlDown).Row - 1
Dim OLD_NAME(), NEW_NAME() As Variant
ReDim OLD_NAME(sch_VERT, 1), NEW_NAME(sch_VERT, 1)
    Range("A1:B" + Trim(Str(sch_VERT + 1))).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
OLD_NAME = Range(Cells(2, 1), Cells(2 + sch_VERT, 1))
NEW_NAME = Range(Cells(2, 2), Cells(2 + sch_VERT, 2))

Im_Main = ActiveWorkbook.Name
Put_File = Application.ActiveWorkbook.Path + "\"
Set FS = CreateObject("Scripting.FileSystemObject")
Set KATALOG = FS.GetFolder(Put_File)
Set MASSIV = KATALOG.Files
If Dir(Put_File + "OUT\", vbDirectory) = "" Then
    MkDir (Put_File + "OUT\")
End If
If Dir(Put_File + "OUT\", vbDirectory) <> "" Then
   'If Len(Dir(Put_File + "OUT\*.*")) > 0 Then
      'Kill (Put_File + "OUT\*.*")
   'End If

For II = 1 To sch_VERT
    For Each FILE In MASSIV
        If Dir(FILE) = OLD_NAME(II, 1) And Dir(FILE) <> Im_Main Then
           FileCopy FILE, Application.ActiveWorkbook.Path + "\OUT\" + NEW_NAME(II, 1)
           Cells(II + 1, 5).Value = "готов"
        End If
    Next
Next 'ii
MsgBox "ГОТОВО"
End If
Application.ScreenUpdating = 1
Application.DisplayAlerts = 1
End Sub
[/vba]

Второй изменяет текст

[vba]
Код
Sub test()
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = "C:\Users\Televnoy\Desktop\обрабатываемые файлы\OUT\m-08 1.txt"
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, "КОШКА", "ПЕС")
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
End Sub
[/vba]

Хочу последний макрос вклинить в предыдущий, до последней процедуры.
Добавил переменные OLD_ID(), NEW_ID путь прописал Filename = Put_File + "OUT\" & NEW_NAME, но как то я все криво понаделал.

[vba]
Код
Sub CHANGE_NAME_FILE()
Application.ScreenUpdating = 0
Application.DisplayAlerts = 0
Dim Im_Main, Put_File, sch_VERT As Variant
Dim FS, KATALOG, FILE, MASSIV As Object
Dim II, JJ As Integer
    Range("C2:C65000").Select
    Selection.ClearContents
sch_VERT = Cells(1, 1).End(xlDown).Row - 1
Dim OLD_NAME(), NEW_NAME(), OLD_ID(), NEW_ID As Variant
ReDim OLD_NAME(sch_VERT, 1), NEW_NAME(sch_VERT, 1)
    Range("A1:B" + Trim(Str(sch_VERT + 1))).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
OLD_NAME = Range(Cells(2, 1), Cells(2 + sch_VERT, 1))
NEW_NAME = Range(Cells(2, 2), Cells(2 + sch_VERT, 2))
   '_____________________________
OLD_ID() = Range(Cells(2, 3), Cells(2 + sch_VERT, 3))
NEW_ID() = Range(Cells(2, 4), Cells(2 + sch_VERT, 4))
   '_____________________________
Im_Main = ActiveWorkbook.Name
Put_File = Application.ActiveWorkbook.Path + "\"
Set FS = CreateObject("Scripting.FileSystemObject")
Set KATALOG = FS.GetFolder(Put_File)
Set MASSIV = KATALOG.Files
If Dir(Put_File + "OUT\", vbDirectory) = "" Then
    MkDir (Put_File + "OUT\")
End If
If Dir(Put_File + "OUT\", vbDirectory) <> "" Then
   'If Len(Dir(Put_File + "OUT\*.*")) > 0 Then
      'Kill (Put_File + "OUT\*.*")
   'End If
   '_____________________________
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = Put_File + "OUT\" & NEW_NAME
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, OLD_ID, NEW_ID)
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
'__________________________________
   
For II = 1 To sch_VERT
    For Each FILE In MASSIV
        If Dir(FILE) = OLD_NAME(II, 1) And Dir(FILE) <> Im_Main Then
           FileCopy FILE, Application.ActiveWorkbook.Path + "\OUT\" + NEW_NAME(II, 1)
           Cells(II + 1, 5).Value = "готов"
        End If
    Next
Next 'ii
MsgBox "ГОТОВО"
End If
Application.ScreenUpdating = 1
Application.DisplayAlerts = 1
End Sub
[/vba]

Свои правки выделил '______________

Автор - televnoy
Дата добавления - 15.03.2018 в 21:21
K-SerJC Дата: Пятница, 16.03.2018, 09:38 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
что то много написали, не очень понятно, в чем проблема

а если просто запустить второй макрос из первого?
в нужном месте ставите строку
[vba]
Код
test()
[/vba]

в вашем коде
[vba]
Код
ReDim OLD_NAME(sch_VERT, 1), NEW_NAME(sch_VERT, 1)
[/vba]
переменную NEW_NAME вы объявили как массив
а затем вот тут
[vba]
Код
Filename = Put_File & "OUT\" & NEW_NAME
[/vba]
пытаетесь объединить её со строковой.


Благими намерениями выстелена дорога в АД.

Сообщение отредактировал K-SerJC - Пятница, 16.03.2018, 10:48
 
Ответить
Сообщениечто то много написали, не очень понятно, в чем проблема

а если просто запустить второй макрос из первого?
в нужном месте ставите строку
[vba]
Код
test()
[/vba]

в вашем коде
[vba]
Код
ReDim OLD_NAME(sch_VERT, 1), NEW_NAME(sch_VERT, 1)
[/vba]
переменную NEW_NAME вы объявили как массив
а затем вот тут
[vba]
Код
Filename = Put_File & "OUT\" & NEW_NAME
[/vba]
пытаетесь объединить её со строковой.

Автор - K-SerJC
Дата добавления - 16.03.2018 в 09:38
Glen Дата: Пятница, 16.03.2018, 10:35 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 10 ±
Замечаний: 0% ±

Excel 2010-16
точнее
[vba]
Код
test
[/vba]


Пехаль киндриков куравь, пехаль киндриков лузнись.

Сообщение отредактировал Glen - Пятница, 16.03.2018, 10:36
 
Ответить
Сообщениеточнее
[vba]
Код
test
[/vba]

Автор - Glen
Дата добавления - 16.03.2018 в 10:35
K-SerJC Дата: Пятница, 16.03.2018, 10:50 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
точнее
test

ну да... yes


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщение
точнее
test

ну да... yes

Автор - K-SerJC
Дата добавления - 16.03.2018 в 10:50
K-SerJC Дата: Пятница, 16.03.2018, 11:01 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
модуль тест обрабатывает за раз одну переменную
а в массиве у вас их 15шт.

нужно делать цикл перебирать значения
в процедуру тест прописывать переменные
вызывать процедуру передавая ей значения
[vba]
Код
Sub test(файл as string, что as string, начто as string)
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = файл
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, что, начто)
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
End Sub
[/vba]


Благими намерениями выстелена дорога в АД.

Сообщение отредактировал K-SerJC - Пятница, 16.03.2018, 11:07
 
Ответить
Сообщениемодуль тест обрабатывает за раз одну переменную
а в массиве у вас их 15шт.

нужно делать цикл перебирать значения
в процедуру тест прописывать переменные
вызывать процедуру передавая ей значения
[vba]
Код
Sub test(файл as string, что as string, начто as string)
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = файл
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, что, начто)
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
End Sub
[/vba]

Автор - K-SerJC
Дата добавления - 16.03.2018 в 11:01
televnoy Дата: Пятница, 16.03.2018, 12:46 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
K-SerJC, в самих макросах не появляется он.

И вообще верно ли я указал путь - имя& %)

[vba]
Код
Sub test(файл As String, что As String, начто As String)
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = "C:\Users\Televnoy\Desktop\обрабатываемые файлы\OUT\" & Range(Cells(2, 2), Cells(2 + sch_VERT, 2))
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, Range(Cells(2, 3), Cells(2 + sch_VERT, 3)), Range(Cells(2, 4), Cells(2 + sch_VERT, 4)))
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
End Sub
[/vba]

И поставил в первый макрос
test
Пишет Argument not optional и выделяет test - Дословно "Аргумент не является необязательным"


О-па! 0_o
 
Ответить
СообщениеK-SerJC, в самих макросах не появляется он.

И вообще верно ли я указал путь - имя& %)

[vba]
Код
Sub test(файл As String, что As String, начто As String)
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = "C:\Users\Televnoy\Desktop\обрабатываемые файлы\OUT\" & Range(Cells(2, 2), Cells(2 + sch_VERT, 2))
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, Range(Cells(2, 3), Cells(2 + sch_VERT, 3)), Range(Cells(2, 4), Cells(2 + sch_VERT, 4)))
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
End Sub
[/vba]

И поставил в первый макрос
test
Пишет Argument not optional и выделяет test - Дословно "Аргумент не является необязательным"

Автор - televnoy
Дата добавления - 16.03.2018 в 12:46
K-SerJC Дата: Пятница, 16.03.2018, 15:49 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
надо Писать аргументы
[vba]
Код
test Put_File + "OUT\" & NEW_NAME(1,1), OLD_ID(1,1), NEW_ID(1,1)
[/vba]


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщениенадо Писать аргументы
[vba]
Код
test Put_File + "OUT\" & NEW_NAME(1,1), OLD_ID(1,1), NEW_ID(1,1)
[/vba]

Автор - K-SerJC
Дата добавления - 16.03.2018 в 15:49
televnoy Дата: Пятница, 16.03.2018, 21:23 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Glen, K-SerJC, извините ну не могу догнать. Честно я ноль в VBA. Делаю все на интуитивном уровне. Не могу сделать =(
Нельзя ли не буквами, не малыми выражениями которые я не в курсе куда запихнуть. А готовым куском кода или лучше целым. Пожалуйста.

Может я не верно объяснил задачу? . :(
Сработал первый макрос - копировал файл с новыми названиями из списка
Второй макрос - открыл файлы по списку и заменил текстовые значения из одного столбика вторым.

И да, не 15 значений их гораздо, гораздо больше. (Последние я обрабатывал 240 файлов - в ручную. Сейчас предстоит еще больше.
И не одно слово. А текст этот в примере - надо менять ссылку будет. Расширение DAE, 3D модель, можно открыть текстовым редактором.
К сообщению приложен файл: M-08.dae (93.1 Kb)


О-па! 0_o

Сообщение отредактировал televnoy - Пятница, 16.03.2018, 21:29
 
Ответить
СообщениеGlen, K-SerJC, извините ну не могу догнать. Честно я ноль в VBA. Делаю все на интуитивном уровне. Не могу сделать =(
Нельзя ли не буквами, не малыми выражениями которые я не в курсе куда запихнуть. А готовым куском кода или лучше целым. Пожалуйста.

Может я не верно объяснил задачу? . :(
Сработал первый макрос - копировал файл с новыми названиями из списка
Второй макрос - открыл файлы по списку и заменил текстовые значения из одного столбика вторым.

И да, не 15 значений их гораздо, гораздо больше. (Последние я обрабатывал 240 файлов - в ручную. Сейчас предстоит еще больше.
И не одно слово. А текст этот в примере - надо менять ссылку будет. Расширение DAE, 3D модель, можно открыть текстовым редактором.

Автор - televnoy
Дата добавления - 16.03.2018 в 21:23
Glen Дата: Суббота, 17.03.2018, 06:46 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 10 ±
Замечаний: 0% ±

Excel 2010-16
надо Писать аргументы
test Put_File + "OUT\" & NEW_NAME(1,1), OLD_ID(1,1), NEW_ID(1,1)


Ну тут наоборот со скобками. :)
[vba]
Код
test (Put_File + "OUT\" & NEW_NAME(1,1), OLD_ID(1,1), NEW_ID(1,1))
[/vba]


Пехаль киндриков куравь, пехаль киндриков лузнись.
 
Ответить
Сообщение
надо Писать аргументы
test Put_File + "OUT\" & NEW_NAME(1,1), OLD_ID(1,1), NEW_ID(1,1)


Ну тут наоборот со скобками. :)
[vba]
Код
test (Put_File + "OUT\" & NEW_NAME(1,1), OLD_ID(1,1), NEW_ID(1,1))
[/vba]

Автор - Glen
Дата добавления - 17.03.2018 в 06:46
televnoy Дата: Воскресенье, 18.03.2018, 16:41 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
pray
Пожалуйста нельзя ли выслать обратно файл либо весь макрос.
Glen, K-SerJC,

Пихаю вами написанное во все щели, и ни в какую :(

Вроде так:
[vba]
Код

Sub test3(Put_File + "OUT\" & NEW_NAME(1,1) As String, OLD_ID(1,1) As String, NEW_ID(1,1) As String)
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = Put_File + "OUT\" & NEW_NAME(1, 1)
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, OLD_ID(1, 1), NEW_ID(1, 1))
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
End Sub
[/vba]
Ошибка list separator old - разделитель списков старый и в строчке
[vba]
Код
Sub test3(Put_File + "OUT\" & NEW_NAME(1,1) As String, OLD_ID(1,1) As String, NEW_ID(1,1) As String)
[/vba] выделяется +


О-па! 0_o
 
Ответить
Сообщениеpray
Пожалуйста нельзя ли выслать обратно файл либо весь макрос.
Glen, K-SerJC,

Пихаю вами написанное во все щели, и ни в какую :(

Вроде так:
[vba]
Код

Sub test3(Put_File + "OUT\" & NEW_NAME(1,1) As String, OLD_ID(1,1) As String, NEW_ID(1,1) As String)
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = Put_File + "OUT\" & NEW_NAME(1, 1)
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, OLD_ID(1, 1), NEW_ID(1, 1))
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
End Sub
[/vba]
Ошибка list separator old - разделитель списков старый и в строчке
[vba]
Код
Sub test3(Put_File + "OUT\" & NEW_NAME(1,1) As String, OLD_ID(1,1) As String, NEW_ID(1,1) As String)
[/vba] выделяется +

Автор - televnoy
Дата добавления - 18.03.2018 в 16:41
televnoy Дата: Воскресенье, 18.03.2018, 17:13 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
K-SerJC, Glen,

Добился что бы не было ошибок, но замены не происходит

[vba]
Код
Sub CHANGE_NAME2_FILE()
Application.ScreenUpdating = 0
Application.DisplayAlerts = 0
Dim Im_Main, Put_File, sch_VERT As Variant
Dim FS, KATALOG, FILE, MASSIV As Object
Dim II, JJ As Integer
    Range("e2:e65000").Select
    Selection.ClearContents
sch_VERT = Cells(1, 1).End(xlDown).Row - 1
Dim OLD_NAME(), NEW_NAME(), OLD_ID(), NEW_ID() As Variant
ReDim OLD_NAME(sch_VERT, 1), NEW_NAME(sch_VERT, 1), OLD_ID(sch_VERT, 1), NEW_ID(sch_VERT, 1)
    Range("A1:B" + Trim(Str(sch_VERT + 1))).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
OLD_NAME = Range(Cells(2, 1), Cells(2 + sch_VERT, 1))
NEW_NAME = Range(Cells(2, 2), Cells(2 + sch_VERT, 2))
'_____________________________
OLD_ID() = Range(Cells(2, 3), Cells(2 + sch_VERT, 3))
NEW_ID() = Range(Cells(2, 4), Cells(2 + sch_VERT, 4))
'_____________________________
Im_Main = ActiveWorkbook.Name
Put_File = Application.ActiveWorkbook.Path + "\"
Set FS = CreateObject("Scripting.FileSystemObject")
Set KATALOG = FS.GetFolder(Put_File)
Set MASSIV = KATALOG.Files
If Dir(Put_File + "OUT\", vbDirectory) = "" Then
    MkDir (Put_File + "OUT\")
End If

If Dir(Put_File + "OUT\", vbDirectory) <> "" Then
'If Len(Dir(Put_File + "OUT\*.*")) > 0 Then
    'Kill (Put_File + "OUT\*.*")
'End If

For II = 1 To sch_VERT
    For Each FILE In MASSIV
        If Dir(FILE) = OLD_NAME(II, 1) And Dir(FILE) <> Im_Main Then
           FileCopy FILE, Application.ActiveWorkbook.Path + "\OUT\" + NEW_NAME(II, 1)
           Cells(II + 1, 5).Value = "готово"
        End If
    Next

Next 'ii

' заменяемые значения

Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = Put_File + "OUT\" & NEW_NAME(1, 1)
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, OLD_ID(1, 1), NEW_ID(1, 1))
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close

'____________________________________

MsgBox "Готово"
End If
Application.ScreenUpdating = 1
Application.DisplayAlerts = 1
End Sub
[/vba]
К сообщению приложен файл: 5857243.xls (44.0 Kb)


О-па! 0_o
 
Ответить
СообщениеK-SerJC, Glen,

Добился что бы не было ошибок, но замены не происходит

[vba]
Код
Sub CHANGE_NAME2_FILE()
Application.ScreenUpdating = 0
Application.DisplayAlerts = 0
Dim Im_Main, Put_File, sch_VERT As Variant
Dim FS, KATALOG, FILE, MASSIV As Object
Dim II, JJ As Integer
    Range("e2:e65000").Select
    Selection.ClearContents
sch_VERT = Cells(1, 1).End(xlDown).Row - 1
Dim OLD_NAME(), NEW_NAME(), OLD_ID(), NEW_ID() As Variant
ReDim OLD_NAME(sch_VERT, 1), NEW_NAME(sch_VERT, 1), OLD_ID(sch_VERT, 1), NEW_ID(sch_VERT, 1)
    Range("A1:B" + Trim(Str(sch_VERT + 1))).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
OLD_NAME = Range(Cells(2, 1), Cells(2 + sch_VERT, 1))
NEW_NAME = Range(Cells(2, 2), Cells(2 + sch_VERT, 2))
'_____________________________
OLD_ID() = Range(Cells(2, 3), Cells(2 + sch_VERT, 3))
NEW_ID() = Range(Cells(2, 4), Cells(2 + sch_VERT, 4))
'_____________________________
Im_Main = ActiveWorkbook.Name
Put_File = Application.ActiveWorkbook.Path + "\"
Set FS = CreateObject("Scripting.FileSystemObject")
Set KATALOG = FS.GetFolder(Put_File)
Set MASSIV = KATALOG.Files
If Dir(Put_File + "OUT\", vbDirectory) = "" Then
    MkDir (Put_File + "OUT\")
End If

If Dir(Put_File + "OUT\", vbDirectory) <> "" Then
'If Len(Dir(Put_File + "OUT\*.*")) > 0 Then
    'Kill (Put_File + "OUT\*.*")
'End If

For II = 1 To sch_VERT
    For Each FILE In MASSIV
        If Dir(FILE) = OLD_NAME(II, 1) And Dir(FILE) <> Im_Main Then
           FileCopy FILE, Application.ActiveWorkbook.Path + "\OUT\" + NEW_NAME(II, 1)
           Cells(II + 1, 5).Value = "готово"
        End If
    Next

Next 'ii

' заменяемые значения

Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = Put_File + "OUT\" & NEW_NAME(1, 1)
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, OLD_ID(1, 1), NEW_ID(1, 1))
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close

'____________________________________

MsgBox "Готово"
End If
Application.ScreenUpdating = 1
Application.DisplayAlerts = 1
End Sub
[/vba]

Автор - televnoy
Дата добавления - 18.03.2018 в 17:13
K-SerJC Дата: Понедельник, 19.03.2018, 08:00 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
Добился что бы не было ошибок, но замены не происходит

смотрите, вы в переменную записываете 15 разных значений
делаете массив данных вот тут:
[vba]
Код
OLD_NAME = Range(Cells(2, 1), Cells(2 + sch_VERT, 1))
NEW_NAME = Range(Cells(2, 2), Cells(2 + sch_VERT, 2))
'_____________________________
OLD_ID() = Range(Cells(2, 3), Cells(2 + sch_VERT, 3))
NEW_ID() = Range(Cells(2, 4), Cells(2 + sch_VERT, 4))
[/vba]

а дальше в коде замены
вы используете только одно значение первое (1,1)
в коде нужно добавить цикл от 1 до макс значения массива (в конкретно этом случае 15)
что то типа такого нужно, только я не тестировал:
[vba]
Код
for f=1 to 15
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = Put_File + "OUT\" & NEW_NAME(f, 1)
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, OLD_ID(f, 1), NEW_ID(f, 1))
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
next f
[/vba]


Благими намерениями выстелена дорога в АД.
 
Ответить
Сообщение
Добился что бы не было ошибок, но замены не происходит

смотрите, вы в переменную записываете 15 разных значений
делаете массив данных вот тут:
[vba]
Код
OLD_NAME = Range(Cells(2, 1), Cells(2 + sch_VERT, 1))
NEW_NAME = Range(Cells(2, 2), Cells(2 + sch_VERT, 2))
'_____________________________
OLD_ID() = Range(Cells(2, 3), Cells(2 + sch_VERT, 3))
NEW_ID() = Range(Cells(2, 4), Cells(2 + sch_VERT, 4))
[/vba]

а дальше в коде замены
вы используете только одно значение первое (1,1)
в коде нужно добавить цикл от 1 до макс значения массива (в конкретно этом случае 15)
что то типа такого нужно, только я не тестировал:
[vba]
Код
for f=1 to 15
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = Put_File + "OUT\" & NEW_NAME(f, 1)
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, OLD_ID(f, 1), NEW_ID(f, 1))
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
next f
[/vba]

Автор - K-SerJC
Дата добавления - 19.03.2018 в 08:00
televnoy Дата: Понедельник, 19.03.2018, 09:38 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
K-SerJC,
Ошибка 438
object doesn't support this property method - Объект не поддерживает этот метод свойства
И выделяет желтым строку
[vba]
Код
WorkStrAll = Replace(WorkStrAll, OLD_ID(f, 1), NEW_ID(f, 1))
[/vba]


О-па! 0_o
 
Ответить
СообщениеK-SerJC,
Ошибка 438
object doesn't support this property method - Объект не поддерживает этот метод свойства
И выделяет желтым строку
[vba]
Код
WorkStrAll = Replace(WorkStrAll, OLD_ID(f, 1), NEW_ID(f, 1))
[/vba]

Автор - televnoy
Дата добавления - 19.03.2018 в 09:38
televnoy Дата: Понедельник, 19.03.2018, 09:49 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
K-SerJC, Разобрался с последним. Имя цикла переименовал, так как буква f занята как понял я.
[vba]
Код
for i=1 to 15
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = Put_File + "OUT\" & NEW_NAME(i, 1)
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, OLD_ID(i, 1), NEW_ID(i, 1))
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
next i
[/vba]


О-па! 0_o

Сообщение отредактировал televnoy - Понедельник, 19.03.2018, 09:49
 
Ответить
СообщениеK-SerJC, Разобрался с последним. Имя цикла переименовал, так как буква f занята как понял я.
[vba]
Код
for i=1 to 15
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = Put_File + "OUT\" & NEW_NAME(i, 1)
Set F = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = F.ReadAll
WorkStrAll = Replace(WorkStrAll, OLD_ID(i, 1), NEW_ID(i, 1))
Set F = FSO.CreateTextFile(Filename, True)
F.Write (WorkStrAll)
F.Close
next i
[/vba]

Автор - televnoy
Дата добавления - 19.03.2018 в 09:49
televnoy Дата: Понедельник, 19.03.2018, 09:58 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
K-SerJC, Спасибо огромное за помощь. С меня плюс.
Единственно лезть постоянно в код менять цикл не очень удобно.
Нашел в Служба поддержки Майкрософт
Как организовать цикл по списку данных в электронной таблице Excel с помощью макросов.

Там есть код Поиск в динамическом списке или списке с неизвестным количеством строк


[vba]
Код
Sub Test2()
      ' Выбор ячейки A2, *первой строки данных*.
      Range("A2").Select
      ' Организация цикла Do до первой пустой ячейки.
      Do Until IsEmpty(ActiveCell)
         ' Вставьте код сюда.
         ' Перемещение на 1 строку ниже текущего местонахождения.
         ActiveCell.Offset(1, 0).Select
      Loop
   End Sub
[/vba]

Нельзя ли вместо For i ее применить. Я понимаю что в первом случае (For i) берутся номер цикла i которые в формулы подставляются.


О-па! 0_o
 
Ответить
СообщениеK-SerJC, Спасибо огромное за помощь. С меня плюс.
Единственно лезть постоянно в код менять цикл не очень удобно.
Нашел в Служба поддержки Майкрософт
Как организовать цикл по списку данных в электронной таблице Excel с помощью макросов.

Там есть код Поиск в динамическом списке или списке с неизвестным количеством строк


[vba]
Код
Sub Test2()
      ' Выбор ячейки A2, *первой строки данных*.
      Range("A2").Select
      ' Организация цикла Do до первой пустой ячейки.
      Do Until IsEmpty(ActiveCell)
         ' Вставьте код сюда.
         ' Перемещение на 1 строку ниже текущего местонахождения.
         ActiveCell.Offset(1, 0).Select
      Loop
   End Sub
[/vba]

Нельзя ли вместо For i ее применить. Я понимаю что в первом случае (For i) берутся номер цикла i которые в формулы подставляются.

Автор - televnoy
Дата добавления - 19.03.2018 в 09:58
televnoy Дата: Понедельник, 19.03.2018, 10:17 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Хотя это наверное другой вопрос =)


О-па! 0_o
 
Ответить
СообщениеХотя это наверное другой вопрос =)

Автор - televnoy
Дата добавления - 19.03.2018 в 10:17
televnoy Дата: Понедельник, 19.03.2018, 11:56 | Сообщение № 17
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
K-SerJC, На всякий случай решил не знаю правильно или нет. Но работает =)
идет подсчет заполненных строк
присваиваю ей имя и это имя (за вычетом первой с заголовками) в цикл

[vba]
Код

Dim iLastRow As Long
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
a = iLastRow - 1
'_______________________________________
For i = 1 To a
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = Put_File + "OUT\" & NEW_NAME(i, 1)
Set f = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = f.ReadAll
WorkStrAll = Replace(WorkStrAll, OLD_ID(i, 1), NEW_ID(i, 1))

Set f = FSO.CreateTextFile(Filename, True)
f.Write (WorkStrAll)
f.Close
Next i

[/vba]

Спасибо еще раз


О-па! 0_o

Сообщение отредактировал televnoy - Понедельник, 19.03.2018, 11:57
 
Ответить
СообщениеK-SerJC, На всякий случай решил не знаю правильно или нет. Но работает =)
идет подсчет заполненных строк
присваиваю ей имя и это имя (за вычетом первой с заголовками) в цикл

[vba]
Код

Dim iLastRow As Long
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
a = iLastRow - 1
'_______________________________________
For i = 1 To a
Const ForReading = 1
Const TristateFalse = 0
Set FSO = CreateObject("Scripting.FileSystemObject")
Filename = Put_File + "OUT\" & NEW_NAME(i, 1)
Set f = FSO.OpenTextFile(Filename, ForReading, TristateFalse)
WorkStrAll = f.ReadAll
WorkStrAll = Replace(WorkStrAll, OLD_ID(i, 1), NEW_ID(i, 1))

Set f = FSO.CreateTextFile(Filename, True)
f.Write (WorkStrAll)
f.Close
Next i

[/vba]

Спасибо еще раз

Автор - televnoy
Дата добавления - 19.03.2018 в 11:56
K-SerJC Дата: Понедельник, 19.03.2018, 16:57 | Сообщение № 18
Группа: Проверенные
Ранг: Обитатель
Сообщений: 487
Репутация: 86 ±
Замечаний: 0% ±

Excel 2013
Но работает =)
идет подсчет заполненных строк

если вам надо первую строку с заголовками исключать то правильнее от 2 до iLastRow
но в вашем случае работает т.к. вам нужно просто количество задействованных строк определить

ранее в коде вы высчитываете количество нужных строк в переменной sch_VERT
можно её указать в цикл и все.
[vba]
Код
For i = 1 To  sch_VERT
[/vba]


Благими намерениями выстелена дорога в АД.

Сообщение отредактировал K-SerJC - Понедельник, 19.03.2018, 16:58
 
Ответить
Сообщение
Но работает =)
идет подсчет заполненных строк

если вам надо первую строку с заголовками исключать то правильнее от 2 до iLastRow
но в вашем случае работает т.к. вам нужно просто количество задействованных строк определить

ранее в коде вы высчитываете количество нужных строк в переменной sch_VERT
можно её указать в цикл и все.
[vba]
Код
For i = 1 To  sch_VERT
[/vba]

Автор - K-SerJC
Дата добавления - 19.03.2018 в 16:57
televnoy Дата: Вторник, 20.03.2018, 05:56 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 120
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
K-SerJC, Спасибо - и вправду формулы идентичны. Подчистил свой макрос.


О-па! 0_o
 
Ответить
СообщениеK-SerJC, Спасибо - и вправду формулы идентичны. Подчистил свой макрос.

Автор - televnoy
Дата добавления - 20.03.2018 в 05:56
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!