Конкретно надо чтобы на одном листе этот диапазон сначала очистился от тех значений которые там могут быть. А потом из нескольких файлов из указанного диапазона всё копировалось в один файл в тот же диапазон. Со второй частью проблем нет. Всё объединяется и суммируется как надо но если в коде прописывать диапазон как range("F7:F57"). Я же попытался добавить чтобы этот диапазон можно было задавать вручную так как он может меняться и чтобы не переписывать код каждый раз. Но не понимаю как дальше его обрабатывать.
Надо заменить в коде эти "F7:F57" на то что будет вводиться через данную переменную diapazon.
[vba]
Код
Do While FileName <> "" ' Open a workbook in the folder Set WorkBk = Workbooks.Open(folderPath & FileName)
For i = 1 To UBound(SourceRange) DestRange(i, 1) = DestRange(i, 1) + SourceRange(i, 1) Next ' Close the source workbook without saving changes. WorkBk.Close SaveChanges:=False
' Use Dir to get the next file name. FileName = Dir() Loop With twb.Worksheets(1)
.Range("F7:F57").Value = DestRange
[/vba]
Есть диапазон (range) который я указываю через application.Inputbox
Конкретно надо чтобы на одном листе этот диапазон сначала очистился от тех значений которые там могут быть. А потом из нескольких файлов из указанного диапазона всё копировалось в один файл в тот же диапазон. Со второй частью проблем нет. Всё объединяется и суммируется как надо но если в коде прописывать диапазон как range("F7:F57"). Я же попытался добавить чтобы этот диапазон можно было задавать вручную так как он может меняться и чтобы не переписывать код каждый раз. Но не понимаю как дальше его обрабатывать.
Надо заменить в коде эти "F7:F57" на то что будет вводиться через данную переменную diapazon.
[vba]
Код
Do While FileName <> "" ' Open a workbook in the folder Set WorkBk = Workbooks.Open(folderPath & FileName)
For i = 1 To UBound(SourceRange) DestRange(i, 1) = DestRange(i, 1) + SourceRange(i, 1) Next ' Close the source workbook without saving changes. WorkBk.Close SaveChanges:=False
' Use Dir to get the next file name. FileName = Dir() Loop With twb.Worksheets(1)
Диапазон без привязки к конкретному листу конкретной книги быть не может. Если книга и/или лист не указаны, то по умолчанию берется текущие (если макрос в обычном модуле, то активные на момент прохождения макроса по этой строке, если макрос в модуле книги/листа, то эти книга/лист). А вот если указать не диапазон, а адрес, то потом этот адрес можно подставлять куда угодно. Примерно вот так [vba]
[/vba] Добавлено У Ярослава ниже как раз то, что я и хотел написать, да что-то протормозил - не сообразил сразу, что речь идет про выделение мышой
Диапазон без привязки к конкретному листу конкретной книги быть не может. Если книга и/или лист не указаны, то по умолчанию берется текущие (если макрос в обычном модуле, то активные на момент прохождения макроса по этой строке, если макрос в модуле книги/листа, то эти книга/лист). А вот если указать не диапазон, а адрес, то потом этот адрес можно подставлять куда угодно. Примерно вот так [vba]
[/vba] Добавлено У Ярослава ниже как раз то, что я и хотел написать, да что-то протормозил - не сообразил сразу, что речь идет про выделение мышой_Boroda_
fairylive, на самом деле выделение ячеек происходит, просто Вы не видели самого выделения, поскольку ScreenUpdating = False - отключает обновление окна приложения... с того момента как оно действует, в окне приложения никаких изменений не увидите. А ScreenUpdating = true - соответственно включило обновление экрана.
fairylive, на самом деле выделение ячеек происходит, просто Вы не видели самого выделения, поскольку ScreenUpdating = False - отключает обновление окна приложения... с того момента как оно действует, в окне приложения никаких изменений не увидите. А ScreenUpdating = true - соответственно включило обновление экрана.Roman777
Roman777, не только не видел, но и не выделялось. Иначе в диалоговом окне появился бы адрес выделяемых ячеек, а там ничего не появлялось. Собственно проблему решил тем что ScreenUpdating = False перенёс после Application.InputBox. Смотреть на конвульсии экселя всё-таки не очень прикольно)
Roman777, не только не видел, но и не выделялось. Иначе в диалоговом окне появился бы адрес выделяемых ячеек, а там ничего не появлялось. Собственно проблему решил тем что ScreenUpdating = False перенёс после Application.InputBox. Смотреть на конвульсии экселя всё-таки не очень прикольно)fairylive
Вообще-то Application.InputBox("...", "...", Type:=8) иногда не хочет нормально работать на других листах и на листах с УФ по вычисляемой в нём формуле. Для этого я обычно применяю костыли, предложенные на Планете ЗДЕСЬ и ЗДЕСЬ Вот этот макрос со стандартным использованием Application.InputBox достаточно часто даёт ошибку если указывать ячейку на другом листе, где применено УФ:
[vba]
Код
Private Sub test_ApplicationInputBoxType8() ' http://www.planetaexcel.ru/forum.php?thread_id=14184 ' http://www.planetaexcel.ru/forum.php?thread_id=15119 — "Проблемы с Application.InputBox (....., Type:=8) - не всякие значения хочет принимать" Dim rRange As Range On Error GoTo Error_Exit Application.DisplayAlerts = False Set rRange = Application.InputBox("Укажите ячейку", "Выбор ячейки", Type:=8) Application.DisplayAlerts = True On Error GoTo 0 MsgBox rRange.AddressLocal(0, 0, 1, 1) Error_Exit: If Err Then MsgBox "Error " & Err.Number & " (" & Err.Description & ")" End Sub
[/vba]
А вот этот работает ВСЕГДА (ещё ни разу не подвёл:
[vba]
Код
Private Sub test_Set_Color() ' использование Application.InputBox для ссылок на ячейки ' http://www.planetaexcel.ru/forum.php?thread_id=14184 Dim MyColor% '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ' замена Application.InputBox("...", "...", Type:=8), не работающего на других листах и листах с УФ формулой Dim Addr: Addr = Application.InputBox("Укажите ячейку с образцом цвета заливки", "Выбор цвета", "=" & Selection.Address, Type:=0) If TypeName(Addr) = "Boolean" Then Exit Sub ' если нажали "Отмена", то Addr = False MyColor = Range(Trim(Mid(Application.ConvertFormula(Addr, xlR1C1, xlA1, True), 2)))(1).Interior.ColorIndex '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ' With Application ' .DisplayAlerts = False: On Error Resume Next ' MyColor = .InputBox("Укажите ячейку с образцом цвета заливки", "Выбор цвета", Type:=8).Interior.ColorIndex ' .DisplayAlerts = True: On Error GoTo 0 ' End With ActiveCell.Interior.ColorIndex = MyColor End Sub
[/vba]
Вообще-то Application.InputBox("...", "...", Type:=8) иногда не хочет нормально работать на других листах и на листах с УФ по вычисляемой в нём формуле. Для этого я обычно применяю костыли, предложенные на Планете ЗДЕСЬ и ЗДЕСЬ Вот этот макрос со стандартным использованием Application.InputBox достаточно часто даёт ошибку если указывать ячейку на другом листе, где применено УФ:
[vba]
Код
Private Sub test_ApplicationInputBoxType8() ' http://www.planetaexcel.ru/forum.php?thread_id=14184 ' http://www.planetaexcel.ru/forum.php?thread_id=15119 — "Проблемы с Application.InputBox (....., Type:=8) - не всякие значения хочет принимать" Dim rRange As Range On Error GoTo Error_Exit Application.DisplayAlerts = False Set rRange = Application.InputBox("Укажите ячейку", "Выбор ячейки", Type:=8) Application.DisplayAlerts = True On Error GoTo 0 MsgBox rRange.AddressLocal(0, 0, 1, 1) Error_Exit: If Err Then MsgBox "Error " & Err.Number & " (" & Err.Description & ")" End Sub
[/vba]
А вот этот работает ВСЕГДА (ещё ни разу не подвёл:
[vba]
Код
Private Sub test_Set_Color() ' использование Application.InputBox для ссылок на ячейки ' http://www.planetaexcel.ru/forum.php?thread_id=14184 Dim MyColor% '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ' замена Application.InputBox("...", "...", Type:=8), не работающего на других листах и листах с УФ формулой Dim Addr: Addr = Application.InputBox("Укажите ячейку с образцом цвета заливки", "Выбор цвета", "=" & Selection.Address, Type:=0) If TypeName(Addr) = "Boolean" Then Exit Sub ' если нажали "Отмена", то Addr = False MyColor = Range(Trim(Mid(Application.ConvertFormula(Addr, xlR1C1, xlA1, True), 2)))(1).Interior.ColorIndex '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ' With Application ' .DisplayAlerts = False: On Error Resume Next ' MyColor = .InputBox("Укажите ячейку с образцом цвета заливки", "Выбор цвета", Type:=8).Interior.ColorIndex ' .DisplayAlerts = True: On Error GoTo 0 ' End With ActiveCell.Interior.ColorIndex = MyColor End Sub