Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите разобраться со вставкой значения в колонку / 25 сообщений из 29, страница 1 из 2
10.04.2012, 06:45
    #37746102
Anna_Mol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Доброго всем веремени суток!Помогите разобраться,пожалуйста.
Есть уже написанный огромный макрос (на 43 листа А4).Мне его нужно что бы он выполнял и еще одну функцию.Написон он был давным-даывно и непонятно кем.Поэтому как смогла так разобралась.И этот макрос открывает текстовые документы и берет из них определенные данные ,а затем все это вставляет в эксель.
Мне необходимо было что бы добавилось еще одно поле.Я открываю txt'шник и беру из него 21 столбец.Вот что написала:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub sPOSTAVSIC()
 ReDim dvPostavsicDs(21, 0)
 Open txtPath & "Остатки_" & tFilialName & ".txt" For Input As #1
  Do While Not EOF(1)
   Line Input #1, iLine
   dvTmpDs = Split(iLine, vbTab)
      'ReDim Preserve dvPostavsicDs(UBound(dvPostavsicDs) + 1)
   dvPostavsicDs(UBound(dvPostavsicDs), 0) = dvTmpDs(20)
  Loop
 Close #1
End Sub



Затем необходимо все это вставить в эксель.Я добавляю в процедуру где данные вставляются в эксель строчку:
Код: vbnet
1.
Ex.Range("AZ5").Value = dvPostavsicDs(UBound(dvPostavsicDs), 0)



И на месте встаки у меня ошибка:значение выходит за выделенный диапазон.

Подскажите куда копать тут.что не так?
...
Рейтинг: 0 / 0
10.04.2012, 08:40
    #37746133
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Навскидку не видно, так как не видно структуру модулей. Возможно проблема в области определения массива. Option Explicit используется?
...
Рейтинг: 0 / 0
10.04.2012, 09:05
    #37746157
Anna_Mol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Shocker.ProНавскидку не видно, так как не видно структуру модулей. Возможно проблема в области определения массива. Option Explicit используется?
Да ,Option Explicit используется.
...
Рейтинг: 0 / 0
10.04.2012, 09:07
    #37746159
Anna_Mol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Shocker.ProНавскидку не видно, так как не видно структуру модулей. Возможно проблема в области определения массива. Option Explicit используется?
А массив то я праильный задала если мне нужен только 21 столбик:dvPostavsicDs(21, 0)?
И как я понимаю тут я то же правильно указала что мне нужен только 21 столбец
dvPostavsicDs(UBound(dvPostavsicDs), 0) = dvTmpDs(20)?
...
Рейтинг: 0 / 0
10.04.2012, 09:37
    #37746185
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Ну так там же ошибка не возникает. Речь идет о конкретной строке. В ней обращение к массиву правильное, правда при условии, что к этому моменту он действительно переопределен как двумерный. Либо какой-то косяк с объектом Ex. Поверьте на момент возникновения ошибки левую и правую часть выражения по отдельности.
...
Рейтинг: 0 / 0
10.04.2012, 10:08
    #37746240
QValD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Anna_MolА массив то я праильный задала если мне нужен только 21 столбик:dvPostavsicDs(21, 0)?
И как я понимаю тут я то же правильно указала что мне нужен только 21 столбец
dvPostavsicDs(UBound(dvPostavsicDs), 0) = dvTmpDs(20)?
При таком объявлении у вас будет 22 элемента (0..21).

ps вы в курсе, что в цикле постоянно меняете значение только последнего элемента массива dvPostavsicDs?
...
Рейтинг: 0 / 0
10.04.2012, 10:19
    #37746269
Anna_Mol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
QValDps вы в курсе, что в цикле постоянно меняете значение только последнего элемента массива dvPostavsicDs?
А можно тут подоробнее.Извините за бестолковость если что.
...
Рейтинг: 0 / 0
10.04.2012, 10:26
    #37746286
QValD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Anna_MolQValDps вы в курсе, что в цикле постоянно меняете значение только последнего элемента массива dvPostavsicDs?
А можно тут подоробнее.Извините за бестолковость если что.

Верхняя граница не меняется, поэтому Ubound(..)=21
...
Рейтинг: 0 / 0
10.04.2012, 10:30
    #37746296
Anna_Mol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
QValDAnna_Molпропущено...

А можно тут подоробнее.Извините за бестолковость если что.

Верхняя граница не меняется, поэтому Ubound(..)=21
Блин,что то не могу вас понять.что у мя не так то?
...
Рейтинг: 0 / 0
10.04.2012, 10:35
    #37746305
QValD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Код: vbnet
1.
2.
3.
4.
5.
6.
  Do While Not EOF(1)
   Line Input #1, iLine
   dvTmpDs = Split(iLine, vbTab)
   dvPostavsicDs(UBound(dvPostavsicDs), 0) = dvTmpDs(20) ' UBound(dvPostavsicDs) = 21; в этой строчке последнему элементу
                                                         ' массива dvPastavsicDs присваевается элемент массива dvTmpDs с индексом 20
  Loop
...
Рейтинг: 0 / 0
10.04.2012, 10:38
    #37746311
Anna_Mol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
QValD
Код: vbnet
1.
2.
3.
4.
5.
6.
  Do While Not EOF(1)
   Line Input #1, iLine
   dvTmpDs = Split(iLine, vbTab)
   dvPostavsicDs(UBound(dvPostavsicDs), 0) = dvTmpDs(20) ' UBound(dvPostavsicDs) = 21; в этой строчке последнему элементу
                                                         ' массива dvPastavsicDs присваевается элемент массива dvTmpDs с индексом 20
  Loop


Ну да мне и нужен 21 столбец.
...
Рейтинг: 0 / 0
10.04.2012, 10:42
    #37746324
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
QValD,

Да погоди-ты голову ТС-у морочить. Да, там неоптимальный алгоритм, лишние действия, лишние элементы, но это можно и потом разобрать, а сейчас есть проблема с конкретной строкой.
...
Рейтинг: 0 / 0
10.04.2012, 10:45
    #37746335
Anna_Mol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Shocker.ProQValD,

Да погоди-ты голову ТС-у морочить. Да, там неоптимальный алгоритм, лишние действия, лишние элементы, но это можно и потом разобрать, а сейчас есть проблема с конкретной строкой.
Да,я можно сказать делетант в VBA.
А вообще если надо вставить в такой то слобец определенный массив вы бы как написали?
...
Рейтинг: 0 / 0
10.04.2012, 10:51
    #37746353
Anna_Mol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Вот весь код процедуры которая все в эксель запиливает
под спойлером
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
Private Sub sEXCEL()
 With Ex.Application
  .ReferenceStyle = xlA1
  .UserName = "MakeTemplates"
  .StandardFont = "Tahoma"
  .StandardFontSize = "8"
  .DefaultFilePath = "C:\Мои Документы"
  .EnableSound = False
  .RollZoom = False
 End With
 
 'Ex.Visible = True
 Ex.Workbooks.Add
 Ex.Range(Ex.Cells(2, 1), Ex.Cells(UBound(dvOutDs, 1) + 2, UBound(dvOutDs, 2))) = dvOutDs
 Ex.Range("A3").Select
 Ex.ActiveWindow.FreezePanes = True
 Ex.Rows("1:1").RowHeight = 28.5
 Ex.Rows("2:2").Select
 With Ex.Selection
  .RowHeight = 31.5
  .HorizontalAlignment = xlCenter
  .VerticalAlignment = xlCenter
  .WrapText = True
  .Orientation = 0
  .AddIndent = False
  .IndentLevel = 0
  .ShrinkToFit = False
  .ReadingOrder = xlContext
  .MergeCells = False
 End With
 
 Ex.Application.Calculation = xlManual
 For i = 1 To UBound(dvFieldDs, 2)
  Ex.Columns(i).ColumnWidth = dvFieldDs(dvFieldDs_Width, i)
  Ex.Cells(2, i).Select
  Ex.Selection.Interior.ColorIndex = dvFieldDs(dvFieldDs_Color, i)
  Ex.Selection.Interior.Pattern = xlSolid
  
  If Len(dvFieldDs(dvFieldDs_FCFormula1, i)) > 0 Then
   Ex.Range(Ex.Cells(3, i), Ex.Cells(Ex.ActiveSheet.UsedRange.Rows.Count, i)).Select
   Ex.Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=" & Replace(dvFieldDs(dvFieldDs_FCFormula1, i), ",", ";")
   Ex.Range(Ex.Cells(3, i), Ex.Cells(Ex.ActiveSheet.UsedRange.Rows.Count, i)).FormatConditions(1).Interior.ColorIndex = dvFieldDs(dvFieldDs_FCColorIndex1, i)
  End If
  
  If Len(dvFieldDs(dvFieldDs_FCFormula2, i)) > 0 Then
   Ex.Range(Ex.Cells(3, i), Ex.Cells(Ex.ActiveSheet.UsedRange.Rows.Count, i)).Select

   Ex.Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=" & Replace(dvFieldDs(dvFieldDs_FCFormula2, i), ",", ";")
   Ex.Range(Ex.Cells(3, i), Ex.Cells(Ex.ActiveSheet.UsedRange.Rows.Count, i)).FormatConditions(2).Interior.ColorIndex = dvFieldDs(dvFieldDs_FCColorIndex2, i)
  End If
  
  If Len(dvFieldDs(dvFieldDs_FCFormula3, i)) > 0 Then
   Ex.Range(Ex.Cells(3, i), Ex.Cells(Ex.ActiveSheet.UsedRange.Rows.Count, i)).Select
   Ex.Selection.FormatConditions.Add Type:=xlExpression, Formula3:= _
    "=" & Replace(Replace(dvFieldDs(dvFieldDs_FCFormula3, i), Chr(34), Chr(34) & Chr(34)), ",", ";")
   Ex.Range(Ex.Cells(3, i), Ex.Cells(Ex.ActiveSheet.UsedRange.Rows.Count, i)).FormatConditions(3).Interior.ColorIndex = dvFieldDs(dvFieldDs_FCColorIndex3, i)
  End If
  
  If i <> 45 Or (Left(CStr(tFilialName), 1) <> "z" And Left(CStr(tFilialName), 2) <> "РС" And Left(CStr(tFilialName), 3) <> "рЯк") Then
  
  If Len(dvFieldDs(dvFieldDs_Formula, i)) > 0 Then
   Ex.Range(Ex.Cells(3, i), Ex.Cells(Ex.ActiveSheet.UsedRange.Rows.Count, i)).FormulaR1C1 = "=" & dvFieldDs(dvFieldDs_Formula, i)
  End If
  End If
  
 Next
 
 Ex.Range(Ex.Cells(2, 1), Ex.Cells(Ex.ActiveSheet.UsedRange.Rows.Count, Ex.ActiveSheet.UsedRange.Columns.Count)).Select
 With Ex.Selection.Borders(xlEdgeLeft)
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
 End With
 With Ex.Selection.Borders(xlEdgeTop)
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
 End With
 With Ex.Selection.Borders(xlEdgeBottom)
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
 End With
 With Ex.Selection.Borders(xlEdgeRight)
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
 End With
 With Ex.Selection.Borders(xlInsideVertical)
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
 End With
 With Ex.Selection.Borders(xlInsideHorizontal)
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
 End With
 
 
 Ex.Range("K1").Select
 Ex.ActiveCell.FormulaR1C1 = "Процент округления"
 
 Ex.Range("M1").Select
 Ex.ActiveCell.FormulaR1C1 = "20"
  
Ex.ActiveSheet.UsedRange.Rows.Count - 1 & "]C)"
 Ex.ActiveSheet.UsedRange.Rows.Count - 1 & "]C)"
  Ex.Range("U1").Select
 Ex.ActiveCell.FormulaR1C1 = "=SUMPRODUCT(R[2]C20:R[" & Ex.ActiveSheet.UsedRange.Rows.Count - 1 & "]C20,R[2]C:R[" & Ex.ActiveSheet.UsedRange.Rows.Count - 1 & "]C)"
 Ex.Selection.Font.Bold = True
 Ex.Selection.NumberFormat = "#,##0"
 
 Ex.Range("X1").Select
 Ex.ActiveCell.FormulaR1C1 = "=SUMPRODUCT(R[2]C20:R[" & Ex.ActiveSheet.UsedRange.Rows.Count - 1 & "]C20,R[2]C:R[" & Ex.ActiveSheet.UsedRange.Rows.Count - 1 & "]C)"
 Ex.Selection.Font.Bold = True
 Ex.Selection.NumberFormat = "#,##0"
 
 If CursFlag = True Then
  Ex.Selection.Interior.ColorIndex = 3
  Ex.Selection.Interior.Pattern = xlSolid
 End If
 
Ex.ActiveSheet.UsedRange.Rows.Count - 1 & "]C)"
 Ex.Columns("AA:AA").Select
 Ex.Selection.NumberFormat = "#,##0"
 
 
 Ex.Range("AS1").Value = dvNormativeDs(2) + dvNormativeDs(3)
 Ex.Range("AT1").Value = dvNormativeDs(2) + 5
 
 
 Ex.Columns("A:B").Select
 Ex.Selection.Columns.Group
 Ex.Columns("E:H").Select
 Ex.Selection.Columns.Group
  
 Ex.Columns("K:K").Select
 Ex.Selection.Columns.Group
 Ex.Columns("M:Q").Select
 Ex.Selection.Columns.Group
 Ex.Columns("V:W").Select
 Ex.Selection.Columns.Group
 Ex.Columns("Y:Z").Select
 Ex.Selection.Columns.Group
 Ex.Columns("AL:AR").Select
 Ex.Selection.Columns.Group
 Ex.ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1
 Ex.Application.Calculation = xlAutomatic
 Ex.Application.Calculation = xlManual
 For i = 1 To UBound(dvFieldDs, 2)
  If dvFieldDs(dvFieldDs_ReplaceFormula, i) = True Then
   Ex.Range(Ex.Cells(3, i), Ex.Cells(Ex.ActiveSheet.UsedRange.Rows.Count, i)).Select
   Ex.Selection.Copy
   Ex.Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
  End If
 Next
 
 Ex.Columns("AZ5") = dvPostavsicDs(UBound(dvPostavsicDs), 0)' вот сэда пытаюсь добавить свой столбец.готова к критике )))      
 Ex.Application.Calculation = xlAutomatic

End Sub



В конце строка где пытаюсь добавить столбец.
...
Рейтинг: 0 / 0
10.04.2012, 10:51
    #37746355
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Стоп, а надо вставить массив?
В вашем коде вставка только одного значения только в одну ячейку.
...
Рейтинг: 0 / 0
10.04.2012, 10:52
    #37746360
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
А что, у вас в файле есть такой столбец "AZ5"???????
...
Рейтинг: 0 / 0
10.04.2012, 10:54
    #37746364
Anna_Mol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Shocker.ProСтоп, а надо вставить массив?
В вашем коде вставка только одного значения только в одну ячейку.
А я хотела сделать,что бы брался весь столбец (по счету 21) в тхт документе и ставлялся в определенный столбец в экселе.
...
Рейтинг: 0 / 0
10.04.2012, 10:55
    #37746367
Anna_Mol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Shocker.ProА что, у вас в файле есть такой столбец "AZ5"???????
Блин! зчто то тут.Мне надо было с AZ c 5 строки.
...
Рейтинг: 0 / 0
10.04.2012, 11:02
    #37746385
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Столбец не может начинаться с какой-то строки. Столбец - это столбец.
Я так и не понял, что требуется. Вставить одно значение в одну ячейку или вставить много значений в много ячеек?
...
Рейтинг: 0 / 0
10.04.2012, 11:03
    #37746388
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Anna_MolА я хотела сделать,что бы брался весь столбец (по счету 21) в тхт документе и ставлялся в определенный столбец в экселе.dvPostavsicDs(UBound(dvPostavsicDs), 0) - это обращение к конкретному элементу массива, а не к его столбцу
...
Рейтинг: 0 / 0
10.04.2012, 11:04
    #37746390
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Shocker.ProAnna_MolА я хотела сделать,что бы брался весь столбец (по счету 21) в тхт документе и ставлялся в определенный столбец в экселе.dvPostavsicDs(UBound(dvPostavsicDs), 0) - это обращение к конкретному элементу массива, а не к его столбцуИ тогда действительно возникает вопрос, который поднял QValD - ваш цикл считывает одно-единственное значение из файла, а не массив значений.
...
Рейтинг: 0 / 0
10.04.2012, 11:05
    #37746392
Anna_Mol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Shocker.ProСтолбец не может начинаться с какой-то строки. Столбец - это столбец.
Я так и не понял, что требуется. Вставить одно значение в одну ячейку или вставить много значений в много ячеек?
Необходимо взять из тхт документа весь столбец двадцать первый (их там всего 21),т.е. все строчки которые там есть и вставить в столбец AZ начиная с пятой строки,тк до пятной идет шапка.
...
Рейтинг: 0 / 0
10.04.2012, 11:07
    #37746395
Anna_Mol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Shocker.ProShocker.Proпропущено...
dvPostavsicDs(UBound(dvPostavsicDs), 0) - это обращение к конкретному элементу массива, а не к его столбцуИ тогда действительно возникает вопрос, который поднял QValD - ваш цикл считывает одно-единственное значение из файла, а не массив значений.
да и такая мысль у меня уже была что только одно значение.А научите как написать что бы весь столбец был,плиз.
...
Рейтинг: 0 / 0
10.04.2012, 11:18
    #37746423
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
Anna_MolНеобходимо взять из тхт документа весь столбец двадцать первый (их там всего 21),т.е. все строчки которые там есть и вставить в столбец AZ начиная с пятой строки,тк до пятной идет шапка.
Процедурка считывания будет выглядеть примерно так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub sPOSTAVSIC()
 Dim i As Integer
 i=5
 Open txtPath & "Остатки_" & tFilialName & ".txt" For Input As #1
  Do While Not EOF(1)
   Line Input #1, iLine
   dvTmpDs = Split(iLine, vbTab)
   Cells(i, 52) = dvTmpDs(20)
   i=i+1
  Loop
 Close #1
End Sub


только желательно полностью прописать путь к Cells
...
Рейтинг: 0 / 0
10.04.2012, 11:20
    #37746430
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться со вставкой значения в колонку
А потом еще почитайте 12381775
ваш код можно сократить раза так в 4
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите разобраться со вставкой значения в колонку / 25 сообщений из 29, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]