Как передать данные из RefEdit в массив, создаваемый в проц.
Модератор: Naeel Maqsudov
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!
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!
Если 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
Этим методом пытался, выдает "Run-Time error 13 Type mismatch"iMassiv = Range(RefEdit1).Value
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'!
И правильно, что выдаёт ошибку, ведь у Вас RefEdit4 а код -
Код: Выделить всё
iMassiv = Range(RefEdit1).Value
Da net v kode vse vrode verno...Dim Meas_Time() As Integer
Meas_Time = Range(RefEdit4).Value
Подождите, Вы говорили, что ошибку выдаёт именно мой пример … а я ведь не описывал переменную iMassiv, потому что в таком случае она будеть иметь тип Variant (как ей и положено)
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.
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.
А по-моему проблема заключалась в том, что Вы сначала изменяли первоначальный код, а только затем тестировали :P
Кстати, с помощью элемента управления RefEdit можно выделять ячейки и неактивного рабочего листа, и ещё Вы можете использовать динамический массив :
Кстати, с помощью элемента управления 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
Кстати, можно ещё попробовать использовать коллекцию, например :
Код: Выделить всё
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
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.
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