Как передать данные из RefEdit в массив, создаваемый в проц.

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Zhanibek
Сообщения: 10
Зарегистрирован: 21 сен 2005, 15:07

Zdravstvuite!
Pozhaluista pomogite perenesti dannye iz RefEdita (diapazon yachhek) v massiv, sozdavaemy v procedure.
Potom neobhodimo perevesti dannye iz formata daty v format chisel.

Zaranee spasibo!
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Если RefEdit действительно содержит адрес диапазона, то "перебрать" все ячейки можно так :

Код: Выделить всё

For Each iCell In Range(RefEdit1)
    If Not IsError(iCell.Value) Then
       MsgBox iCell.Value, , ""
    End If
Next
или так :

Код: Выделить всё

iMassiv = Range(RefEdit1).Value

For Each iValue In iMassiv
    If Not IsError(iValue) Then
       MsgBox iValue, , ""
    End If
Next
Zhanibek
Сообщения: 10
Зарегистрирован: 21 сен 2005, 15:07

iMassiv = Range(RefEdit1).Value
Этим методом пытался, выдает "Run-Time error 13 Type mismatch"

Kod takoi:

Dim Meas_Time() As Integer

Meas_Time = Range(RefEdit4).Value

Znachenie RefEdit po add watch: "Sheet1!A13:A20"

Pervy sposob ne podhodit. Mne nuzhno zgnat' dannye v massiv (dynamicheski?, poskol'ku neizvestno, kakoi diapazon budet vibran), chtoby vypolnyat' dal'neishie raschety.



Spasibo, chto otkliknulis'!
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

И правильно, что выдаёт ошибку, ведь у Вас RefEdit4 а код -

Код: Выделить всё

iMassiv = Range(RefEdit1).Value
Zhanibek
Сообщения: 10
Зарегистрирован: 21 сен 2005, 15:07

Dim Meas_Time() As Integer

Meas_Time = Range(RefEdit4).Value
Da net v kode vse vrode verno...
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Подождите, Вы говорили, что ошибку выдаёт именно мой пример … а я ведь не описывал переменную iMassiv, потому что в таком случае она будеть иметь тип Variant (как ей и положено)
Zhanibek
Сообщения: 10
Зарегистрирован: 21 сен 2005, 15:07

Spasibo vsem!
Problema reshilas' sleduishim obrazom:

Dim DT_Range(1000) As single

For Each c In ActiveSheet.Range(RefEdit4.Value)
If c.Value > 0.0001 Then
n = n + 1
DT_Range(n) = c.Value
MsgBox DT_Range(n)
End If
Next c


Vse iz-za nedostatochnogo znania sintaksisa programmy.
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

А по-моему проблема заключалась в том, что Вы сначала изменяли первоначальный код, а только затем тестировали :P

Кстати, с помощью элемента управления RefEdit можно выделять ячейки и неактивного рабочего листа, и ещё Вы можете использовать динамический массив :

Код: Выделить всё

Dim iMassiv() As Double

For Each iCell In Range(RefEdit4.Value)
    If Not IsError(iCell.Value) Then
       If iCell.Value > 0.0001 Then
          iCount = iCount + 1
          ReDim Preserve iMassiv(1 To iCount)
          iMassiv(iCount) = iCell.Value
          MsgBox iMassiv(iCount)
       End If
    End If
Next
pashulka
Сообщения: 831
Зарегистрирован: 24 ноя 2004, 03:46
Контактная информация:

Кстати, можно ещё попробовать использовать коллекцию, например :

Код: Выделить всё

Dim iCollection As New Collection

For Each iCell In Range(RefEdit4.Value)
    If Not IsError(iCell.Value) And IsDate(iCell.Value) Then
       iCollection.Add CDbl(iCell.Value)
       MsgBox iCollection.Item(iCollection.Count)
    End If
Next
Zhanibek
Сообщения: 10
Зарегистрирован: 21 сен 2005, 15:07

Spasibo bol'shoe i otkuda Vy eto vse uznaete? Spravka Excel molchit kak partizan. Kogda chto nibud' nado, nikogda ne naidesh'.
Uveren, chto privedennye Vami primery mne eshe prigodyatsya.
Кстати, можно ещё попробовать использовать коллекцию, например :

Код:
Dim iCollection As New Collection

For Each iCell In Range(RefEdit4.Value)
If Not IsError(iCell.Value) And IsDate(iCell.Value) Then
iCollection.Add CDbl(iCell.Value)
MsgBox iCollection.Item(iCollection.Count)
End If
Next
Ответить