Страница: 1 |
Вопрос: ГОСПОДА. Не могу понять | Добавлено: 21.11.08 13:27 |
Автор вопроса: ![]() |
Здравствуйте, уважаемые Форумчане!
Имеется документ Excel/ В документе 4 листа 3 листа – данные 1 лист – результат В лист результат сливаются данные из 3 листов (может быть больше) Вопрос : как устроить перебор листов в файле Excel для записи данных на лист Результат Option Explicit Private Sub Worksheet_Activate() Dim A As Worksheet Dim B As Worksheet Dim C As Worksheet Dim str As Worksheet Dim Result As Worksheet If MsgBox("Сформировать результат?", vbQuestion + vbYesNo, " ") = vbOK Then Exit Sub Set A = ThisWorkbook.Worksheets("Фил") Set B = ThisWorkbook.Worksheets("Боб") Set C = ThisWorkbook.Worksheets("Про") Set Result = ThisWorkbook.Worksheets("Результат") Result.Cells.Delete Dim i, j, k, var As Integer Dim s As String Dim sheetname As String var = 2 For k = 65 To 68 sheetname = Chr(k) ‘ переменная sheetname должна принимать значения A,B,C. После чего она должна использоваться в циклах ниже и выступать в качестве наименования worksheets. Данная переменная принимает значения A,B,C, но ничего не работает. i = 2 j = 1 Do ‘ перебор строк на листе Do ‘ перебор столбцов на листе Result.Cells(var, j) = sheetname.Cells(i, j) j = j + 1 Loop While j < 10 j = 1 i = i + 1 var = var + 1 s = sheetname.Cells(i, 1) Loop While Len(s) <> 0 Next k Worksheets("Строгино").Range("A1:K1500").AutoFormat End Sub |
Ответы | Всего ответов: 7 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 4 |
Профиль | Цитата | #1 | Добавлено: 21.11.08 18:06 |
Вы поставьте перебор всех листов рабочей книги
|
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() Вопросов: 18 Ответов: 186 |
Профиль | Цитата | #2 | Добавлено: 21.11.08 18:12 |
Вы немного не в ту степь забрели. В программировании невозможно напрямую обратиться к переменной по её идентификатору (в Вашем случае Вы пытаетесь получить sheetname.Cells(i, j), подразумевая, что sheetname принимает значения от A до C), несмотря на то, что на уровне человеческого разума это выглядит элементарно. Но как бы то ни было, переменная sheetname - это строка:
Выражения, подобные sheetname.Cells(i, j) выполняются следующим образом: VB пытается вычислить свойство Cells() у строки sheetname. Поскольку у объекта String нет свойства Cells(), генерируется ошибка. Даже если и исправить эту ошибку, Ваша идея перебора листов здесь неуместна и неоправданна. Вам следует перебирать листы, используя простой счётчик:
|
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() Вопросов: 18 Ответов: 186 |
Профиль | Цитата | #3 | Добавлено: 21.11.08 18:13 |
Или как говорит The_Prist ![]() |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 0 Ответов: 4 |
Профиль | Цитата | #4 | Добавлено: 21.11.08 18:21 |
Кстати еще вопросик к Вам. А в этой строке
Просто если Вы хотели сделать, чтобы код выполнялся, то Вам не надо было ставить Exit Sub после нажатия Да. и во-вторых, если Вы задаете кнопки vbQuestion + vbYesNo, то и действие надо прописывать на эти кнопки.
при нажатии ДА у Вас произойдет выход из процедуры, так что Exit Sub я бы на Вашем месте убрал. Ну и vbOK заменил на vbYes. |
Номер ответа: 5 Автор ответа: ![]() ![]() Вопросов: 2 Ответов: 1 |
Профиль | Цитата | #5 | Добавлено: 24.11.08 16:11 |
Уважаемый,The_Prist.
Как ни странно, всё работает) Уважаемый, Nytrogen
Всё заработало. Очень хорошая идея. Спасибо. |
Номер ответа: 6 Автор ответа: ![]() ![]() Вопросов: 0 Ответов: 1 |
Профиль | Цитата | #6 | Добавлено: 01.12.08 17:41 |
А вот возник ещё вопрос.
При переносе данных из документа Excel в другой документ Excel при помощи запроса (Вкладка Данные - Импорт внешних данных -Создать запрос из ячеек переносятся не все данные (из 300 символов переносится примерно 240). Чем это обусловлено? |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() Вопросов: 18 Ответов: 186 |
Профиль | Цитата | #7 | Добавлено: 01.12.08 20:55 |
Хм... Может ограничено место на каждое поле. А Вы зачем так хитро "переносите"? Может проще скопировать? |
Страница: 1 |
|