Страница: 1 |
|
Вопрос: ГОСПОДА. Не могу понять
|
Добавлено: 21.11.08 13:27
|
|
Автор вопроса: slava3577
|
Здравствуйте, уважаемые Форумчане!
Имеется документ 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
Ответить
|
Номер ответа: 2 Автор ответа: Nytrogen
Вопросов: 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(), генерируется ошибка.
Даже если и исправить эту ошибку, Ваша идея перебора листов здесь неуместна и неоправданна. Вам следует перебирать листы, используя простой счётчик:
- For i = 1 To 3
- ThisWorkbook.Worksheets(i)
- Next i
Ответить
|
Номер ответа: 5 Автор ответа: slava3577
Вопросов: 2 Ответов: 1
|
Профиль | | #5
|
Добавлено: 24.11.08 16:11
|
Уважаемый,The_Prist.
- If MsgBox("Сформировать результат?", vbQuestion + vbYesNo, " ") = vbOK Then Exit Sub
Как ни странно, всё работает)
Уважаемый, Nytrogen
- For i = 1 To 3
- ThisWorkbook.Worksheets(i)
- Next i
Всё заработало. Очень хорошая идея. Спасибо.
Ответить
|
Номер ответа: 6 Автор ответа: xaxaxa
Вопросов: 0 Ответов: 1
|
Профиль | | #6
|
Добавлено: 01.12.08 17:41
|
А вот возник ещё вопрос.
При переносе данных из документа Excel в другой документ Excel при помощи запроса (Вкладка Данные - Импорт внешних данных -Создать запрос из ячеек переносятся не все данные (из 300 символов переносится примерно 240).
Чем это обусловлено?
Ответить
|
Страница: 1 |
Поиск по форуму