I am working on a code that will collate data from multiple workbooks in a folder in to one single sheet.
Now, I am trying to make the code read through all the worksheets in the workbooks with the below code. I get the error — «Object Doesnt support this property or method» in the highlighted line.
For Each objFile In objFolder.Files
RowCount = ws1.UsedRange.Rows.Count
If objFile.Type = "Microsoft Excel Worksheet" Or objFile.Type = "Microsoft Excel Macro-Enabled Worksheet" Then
Set wb = Application.Workbooks.Open(path & objFile.Name)
For Each ws_cnt In wb '<---Error here.
Set srWS = wb.Sheets(1)
Comintern
21.7k5 gold badges33 silver badges80 bronze badges
asked Jan 4, 2017 at 14:33
1
For Each ws_cnt In wb.Worksheets
You need to specify the collection that you wish to iterate over, so in this instance it is the wb.Worksheets
collection.
Then you can just work with the worksheet.
ws_cnt.Range("A1").Copy
answered Jan 4, 2017 at 14:35
luke_tluke_t
2,9153 gold badges22 silver badges38 bronze badges
Добрый день.
Пример пока не могу вложить, поэтому постараюсь подробно изложить проблему:
При помощи PQ обработал 4 отчета в одном файле, но на разных вкладках, но между собой пока не объединял, а вот 5 не хочет загружаться.
Ошибка возникает тогда, когда я делаю импорт из экселя, выбираю лист и все на этом останавливается.
Замечу, что все отчеты я хочу обработать в одном эксель файле, но в разных листах. 4 работают, а 5-й нет.
НО, если создать новый файл и импортировать тот неработающий файл, тогда все работает.
Формат один и тот же, это не сводные таблицы или что-то еще, а просто значения в экселе. Размер 5го файла самый маленький среди всех.
Я попытался выбрать другой, 6-й файл, но проблема остается и на 6-м файле.
Выходит следующее предупреждение с дополнительного окошка:
Сообщение с веб-страницы.
Объект не поддерживает свойство или метод «widget»
TypeError: Объект не поддерживает свойство или метод «widget» at Anonymous function
TypeError: Объект не поддерживает свойство или метод «widget» at Global code
TypeError: Объект не поддерживает свойство или метод «widget» at window.onerror
Может у PQ имеется лимит по загрузке строк или еще что-то подобное.
Может кто сталкивался и сможет помочь?
the line that is giving me trouble is «»Sheets(CStr(WS_M.Cells(n, START_C))).Cells(n, START_C).Paste»»
this is supposed to find the tab name in column 3 and go to that tab and paste the tab name in that tab.
Const START_C = 3
Const MAX_TRAN = 1000
Const START_R = 2
Const MASTER = "MASTER"
Sub MOVEDATACORRECTLY()
Dim WS_M As Worksheet
Dim thisWB As Workbook
Set thisWB = ActiveWorkbook
Set WS_M = Worksheets(MASTER)
For M = START_R To (START_R + MAX_TRAN)
If WS_M.Cells(M, (START_C + 1)) = "" Then Exit For
Next M
M = M - 1
For n = START_R To M
WS_M.Cells(n, START_C).Copy
Sheets(CStr(WS_M.Cells(n, START_C))).Cells(n, START_C).Paste
Next n
End Sub
asked Jul 30, 2012 at 22:30
1
Try this instead:
For n = START_R To M
WS_M.Cells(n, START_C).Copy
Sheets(CStr(WS_M.Cells(n, START_C))).Cells(n, START_C).Select
ActiveSheet.Paste
Next n
If you look at the documentation for the Excel Range
object, Paste
is not in the list of members. There is PasteSpecial
, however. I haven’t experimented with that, but that might also work.
answered Jul 30, 2012 at 22:40
devuxerdevuxer
41.4k47 gold badges178 silver badges291 bronze badges
1
For copying a range of cells in Excel, using Copy
method makes the VBA
program easier to crash / or to give inpredictable results.
Suppose during the your procedure copies data from system clipboard
and user was trying to store some other to system clipboard!
Not always, but from users this kind of mistake might happened.
So I always prefer to use a better approach, something like Swaping the range on the fly
. Here’s a small demonstration:
Public Sub Sample_Copy_without_Clipboard()
Dim dRange As Range, iRange As Range
Set iRange = Range("A1:B3")
Set dRange = Range("D1:E3")
dRange.Value = iRange.Value
End Sub
Note: This method works only with unformatted textual data. If not then either use Tim’s suggestion or DanM’s answer.
answered Jul 31, 2012 at 5:33
CylianCylian
10.8k4 gold badges43 silver badges55 bronze badges
В объектной модели нет необходимости в функции Address, поэтому ее нет в интерфейсе WorksheetFunction.
Эмпирическое правило: если вы выполняете вызов члена с ранней привязкой, а член, который вы хотите вызвать, не отображается в списке имен автодополнения, он не является членом объекта, с которым вы работаете; если код все равно скомпилируется, есть большая вероятность, что во время выполнения он выдаст ошибку 438.
Нет необходимости в Address-функции, потому что, когда вы работаете с объектной моделью, у вас есть Range-объект, а Range имеет легкодоступное Address-свойство: WorksheetFunction для него было бы совершенно лишним.
Вы знаете, из какого листа взят диапазон (sheetname); вы знаете, какую строку вы хотите (AT_rownum), и вы знаете, какой столбец вы хотите (1) — таким образом:
Dim AT_range As Range
Set AT_range = ThisWorkbook.Worksheets(sheetName).Cells(AT_rownum, 1)
AT_cellnum = AT_range.Address
Но, как намекнул Скотт, адрес ячейки редко является чем-то, что вы нужно в VBA: если у вас есть объект Range, у вас, вероятно, уже есть все, что вам нужно.
При открытии входящего документа появилось сообщение «Объект не поддерживает свойство или метод GetElementsByClassName».
Причина №1. Вы используете неактуальную версию платформы 1С
Обновите платформу 1С.
Причина №2. На компьютере отсутствует браузер Internet Explorer, либо его версия ниже 11
Решение №1. Установите Internet Explorer 11 версии
Решение №2. Создайте эмуляцию Internet Explorer 11 версии
- Запустите командную строку, введите «regedit» и нажмите <Enter>.
- Откройте каталог «HKEY_CURRENT_USERSOFTWAREMicrosoftInternet ExplorerMainFeatureControlFEATURE_BROWSER_EMULATION».
- Кликните правой кнопкой мыши и выберите «Создать/Параметр DWORD (32 бита)».
- Введите в списке имя вашего приложения 1С в виде «*.exe», где «*» — имя, «*.exe» — расширение. Например, «1cv8.exe» или «1cv7.exe».
- Как узнать имя приложения?
- Откройте параметр двойным кликом мыши и укажите:
- «Система исчисления» — шестнадцатеричная;
- «Значение» — 11001.
- Нажмите «ОК» и перезапустите 1С.
Для 1С версии 7.7 создайте еще один параметр с именем «1cv7s.exe».
Нашли неточность? Выделите текст с ошибкой и нажмите ctrl + enter.