Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: заполнение формы EXCEL
 
 автор: Мишок   (01.07.2009 в 09:37)   личное сообщение
 
 

заолняю форму таким образом:
oWbk.Sheets(1).Range("FG13").Value = Фамилия
Dim f1 As String
Dim f2 As String
Dim f3 As String
Dim f4 As String
Dim f5 As String
Dim f6 As String
Dim f7 As String
Dim f8 As String
Dim f9 As String
Dim f10 As String
Dim f11 As String
Dim f12 As String
Dim f13 As String
Dim f14 As String
Dim f15 As String
Dim f16 As String
Dim f17 As String
Dim f18 As String
Dim f19 As String
Dim f20 As String
Dim f21 As String
Dim f22 As String
Dim f23 As String
Dim f_value As String
f_value = oWbk.Sheets(1).Range("FG13").Value
f1 = Mid(f_value, 1, 1)
f2 = Mid(f_value, 2, 1)
f3 = Mid(f_value, 3, 1)
f4 = Mid(f_value, 4, 1)
f5 = Mid(f_value, 5, 1)
f6 = Mid(f_value, 6, 1)
f7 = Mid(f_value, 7, 1)
f8 = Mid(f_value, 8, 1)
f9 = Mid(f_value, 9, 1)
f10 = Mid(f_value, 10, 1)
f11 = Mid(f_value, 11, 1)
f12 = Mid(f_value, 12, 1)
f13 = Mid(f_value, 13, 1)
f14 = Mid(f_value, 14, 1)
f15 = Mid(f_value, 15, 1)
f16 = Mid(f_value, 16, 1)
f17 = Mid(f_value, 17, 1)
f18 = Mid(f_value, 18, 1)
f19 = Mid(f_value, 19, 1)
f20 = Mid(f_value, 20, 1)
f21 = Mid(f_value, 21, 1)
f22 = Mid(f_value, 22, 1)
f23 = Mid(f_value, 23, 1)
oWbk.Sheets(1).Range("P13").Value = f1
oWbk.Sheets(1).Range("T13").Value = f2
oWbk.Sheets(1).Range("X13").Value = f3
oWbk.Sheets(1).Range("AB13").Value = f4
oWbk.Sheets(1).Range("AF13").Value = f5
oWbk.Sheets(1).Range("AJ13").Value = f6
oWbk.Sheets(1).Range("AN13").Value = f7
oWbk.Sheets(1).Range("AR13").Value = f8
oWbk.Sheets(1).Range("AV13").Value = f9
oWbk.Sheets(1).Range("AZ13").Value = f10
oWbk.Sheets(1).Range("BD13").Value = f11
oWbk.Sheets(1).Range("BH13").Value = f12
oWbk.Sheets(1).Range("BL13").Value = f13
oWbk.Sheets(1).Range("BP13").Value = f14
oWbk.Sheets(1).Range("BT13").Value = f15
oWbk.Sheets(1).Range("BX13").Value = f16
oWbk.Sheets(1).Range("CB13").Value = f17
oWbk.Sheets(1).Range("CF13").Value = f18
oWbk.Sheets(1).Range("CJ13").Value = f19
oWbk.Sheets(1).Range("CN13").Value = f20
oWbk.Sheets(1).Range("CR13").Value = f21
oWbk.Sheets(1).Range("CV13").Value = f22
oWbk.Sheets(1).Range("CZ13").Value = f23
oWbk.Sheets(1).Range("FG13").Value = ""

вопрос в том, что длинну имени можем определить, а как сделать чтоб не заполнять пустые клетки?
понимаю что надо создать цикл
Dim N As Integer
N = Len(Фамилия)
For i = 1 To N ...

  Ответить  
 
 автор: snipe   (01.07.2009 в 10:40)   личное сообщение
 
 

чета как то слишком много написано.........
вот так весь ваш код будет короче......

oWbk.Sheets(1).Range("FG13").Value = Фамилия
f_value = oWbk.Sheets(1).Range("FG13").Value
for i=1 to 23
if i>len(фамилия) then exit for
oWbk.Sheets(1).Cells(13,16+4*(i-1)).Value = Mid(f_value, i, 1)
next i
oWbk.Sheets(1).Range("FG13").Value = ""

  Ответить  
 
 автор: Мишок   (01.07.2009 в 11:14)   личное сообщение
 
 

Спасибо!

  Ответить  
 
 автор: snipe   (01.07.2009 в 12:03)   личное сообщение
 
 

а так более правильно.....


for i=1 to 23
oWbk.Sheets(1).Cells(13,16+4*(i-1)).Value = ""
next i
for i=1 to 23
if i<=len(Фамилия) then
oWbk.Sheets(1).Cells(13,16+4*(i-1)).Value = Mid(Фамилия, i, 1)
else
exit for
end if
next i

  Ответить  
 
 автор: Lukas   (01.07.2009 в 13:16)   личное сообщение
 
 

А так еще более правильно:

...
For i=1 To Len(Left(Фамилия),23)
    oWbk.Sheets(1).Cells(13,12+4*i).Value = Mid(Фамилия, i, 1)
next i

Без лишних итераций цикла, вычислений Len и If-ов

  Ответить  
 
 автор: Мишок   (01.07.2009 в 13:41)   личное сообщение
 
 

да, так значительно короче :))
не смог найти что такое - Cells объясните пожалуйста

  Ответить  
 
 автор: Lukas   (01.07.2009 в 19:04)   личное сообщение
 
 

Так в Excel-е в VBA редакторе или окне отладки набираем Cells, выделяем и жмем F1. Справка расскажет, правда на аглицком языке.

  Ответить  
 
 автор: snipe   (02.07.2009 в 02:45)   личное сообщение
 
 

Cells - ячейка а Range - вроде диапазон ячеек.......
почти одно и тоже......
обращение разное
Сells (M,N) где M - номер строки N - номер столбца.........обратиться можно только к одной ячейке
Range позволяет обратиться как к одной ячейке так и к диапазону ячеек........
что бы быстро определить номер столбца я делаю так - выделяю ячейку в нужном столбце и ввожу формулу =столбец() ........

что бросилось в глаза сразу в вашем вопросе ........
23 строчки описания однотипных переменных .......
это можно было бы заменить массивом.....
всего одна строчка В Вашем случае было бы примерно так Dim f(23) as string ..... я только что застолбил 24 переменных (24 потому что отсчет идет от 0).....
обращение к массиву - f(M) где М - элемент массива...(опять же это в вашем случае)
(лучше почитайте про массивы в литературе - потому что там есть еще двумерные массивы, трехмерные сложного ни чего нет а жизнь облегчают очень хорошо)

прелесть заключается в том что к массиву можно обратиться через цикл (циклы).......
т.е. следующие 23 строчки превратились бы в 3 - 2 ушли бы на то что бы организовать цикл и одна на оператор присваивания

  Ответить  
 
 автор: Мишок   (06.07.2009 в 17:13)   личное сообщение
 
 

Спасибо! очень доходчиво и толково!

  Ответить  
 
 автор: Мишок   (06.07.2009 в 17:14)   личное сообщение
 
 

В српавке нет Cells

  Ответить  
 
 автор: Lukas   (06.07.2009 в 17:22)   личное сообщение
51 Кб.
 
 

Видимо, не установлена справка по VBA в компонентах Office.
У меня есть:

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList