Добавление символа для каждой ячейки в одном столбце с помощью VBA

#excel #vba

Вопрос:

Я пытаюсь добавить «#» в каждую ячейку в первом столбце с строки 7, пока ячейка не станет пустой. И у меня есть несколько файлов в одной папке, которые нужно повторить. Возможно ли это сделать с помощью VBA? Это всегда показывало, что с кодом что-то не так. Большое спасибо за помощь.

  Sub LoopAllFilesInAFolder()

'Loop through all files in a folder
Dim fileName As Variant
fileName = Dir("C:Users)

While fileName <> ""

    'Insert the actions to be performed on each file
    Dim last As Long
    Dim i As Long

    'Find the last row with values in Column A
    last = .Cells(.Rows.Count, 1).End(xlUp).Row
    'Loop from the 7th row to the last row.
    For i = 7 To last
        'Assign the value
        Cells(i, 1).Value = "#" amp; Cells(i, 1).Value
    Next i
    'This example will print the file name to the immediate window
    Debug.Print fileName

    'Set the fileName to the next file
    fileName = Dir
Wend

End Sub
 

Комментарии:

1. Да, это так… Что вы пробовали самостоятельно? Что это за «файлы»?

2. Все они xlsx.

3. Затем вы должны открыть их, во-первых, во-вторых, имя файла не имеет .cell свойства и так далее…

4. Спасибо, Фэйн, постараюсь во всем разобраться.

Ответ №1:

Пожалуйста, попробуйте следующий адаптированный код:

 Sub LoopAllFilesInAFolder()
 Dim folderName As String, fileName As String, wb As Workbook
 Dim ws As Worksheet, last As Long, i As Long, arr

 folderName = "C:UsersLin.YuDesktopNewFolder" 'take care to the ending backslash
 fileName = Dir(folderName amp; "*.xlsx")

 While fileName <> ""
    Set wb = Workbooks.Open(folderName amp; fileName)
    Set ws = wb.Sheets(1) 'use here the appropriate sheet, if not the first one
    With ws
        'Find the last row with values in Column A
        last = .cells(.rows.count, 1).End(xlUp).row
        arr = .Range("A1:A" amp; last).value 'put the column in an array to make the code faster
        'Loop from the 7th array row to the last row and process.
        For i = 7 To UBound(arr)
            arr(i, 1) = "#" amp; arr(i, 1)
        Next i
        .Range("A1:A" amp; last).value = arr 'drop the processed array content
    End With
    wb.Close True 'save and close the processed workbook

    'Set the fileName to the next file
    fileName = Dir
 Wend
End Sub
 

Отредактированный:

Пожалуйста, протестируйте следующий компактный вариант, используя оценку вместо итерации:

 Sub LoopAllFilesInAFolder()
 Dim folderName As String, fileName As String, wb As Workbook
 Dim ws As Worksheet, last As Long, i As Long, rng As Range

 folderName = ThisWorkbook.path amp; "" ' "C:UsersLin.YuDesktopNewFolder"
 fileName = Dir(folderName amp; "*.xlsx")

 While fileName <> ""
    Set wb = Workbooks.Open(folderName amp; fileName)
    Set ws = wb.Sheets(1) 'use here the appropriate sheet, if not the first one
    With ws
        'Find the last row with values in Column A
         last = .cells(.rows.count, 1).End(xlUp).row
         Set rng = .Range("A7:A" amp; last)
         rng.value = Evaluate("""#""amp;" amp; rng.Address)
    End With
    wb.Close True 'save and close the processed workbook
    
    'Set the fileName to the next file
    fileName = Dir
 Wend
End Sub
 

Комментарии:

1. Спасибо, Фэйн. Я попробовал его, однако он показал «несоответствие типа». Как я могу с этим справиться? Я новичок в VBA. Спасибо!

2. @Салли На какой линии? Вы использовали код именно так, как он есть? ИБП… Я мог видеть ошибку. Я немедленно исправлю это. Пожалуйста, протестируйте обновленный код.

3. Я использую точно такой же код, как и выше. Я попробовал во второй раз. Больше не отвечаю….

4. @Салли, ты пробовала обновить страницу (эту)? Возможно, вы не используете обновленный код… Вы получаете ту же ошибку? Если да, то по какой линии? Я не проверял код. Это просто, и я думаю, что это легко понять.

5. Хорошо. Я попробую еще раз. Тнх

Ответ №2:

Кажется, ты показываешь две вещи:

  • Код для поиска всех файлов, которые вы хотите обработать.
  • Код, который вы хотите применить к книге в этих файлах.

Чего вы не сделали, так это не создали книгу VBA на основе найденных вами файлов. Это объясняется в этом URL-адресе.

Комментарии:

1. Спасибо, Доминик. Я попробую еще раз. 😀

Ответ №3:

введите описание изображения здесь

Попробовал код ФанеДуру, он сработал в первый раз. После этого он либо показывался, как указано выше, у которого есть только#, либо не отвечал.