2016-03-23 9 views
0

VBA ve Excel'in yeni sürümü, yıllardır hiçbir şey programlamamıştır. Hızlı soru. Excel'de bir Envanter listesi oluşturmaya çalışıyoruz Verilerin eklenebileceği bir giriş kutusu çağıran bir düğme ile. Giriş kutularındaki veriler ilk kullanılabilir satıra yerleştirilmelidir. Satır başına 10 sütun vardır ve her satır Envanter'de yeni bir öğeyi temsil eder. ": Gerekli Nesne Çalışma zamanı hatası 424":Excel işlevleri - giriş kutusundaki değerler serbest hücreye yerleştirilir

Dim iDate, iVessel, iOrder, iCourier, iWaybill, iSender, iPcs, iWeight, iRemark As Variant 
Dim col As Integer 
Public Function selectFirstBlankCell() 
    Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer 
    Dim currentRowValue As String 
    col = 2 
    sourceCol = col 
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row 

    While col < 11 
     For currentRow = 1 To rowCount 
      currentRowValue = Cells(currentRow, sourceCol).Value 
      If IsEmpty(currentRowValue) Or currentRowValue = "" Then 
       Cells(currentRow, sourceCol).Select 
       If sourceCol = 2 Then 
        Cell.Value = iDate 
       ElseIf sourceCol = 3 Then 
        Cell.Value = iVessel 
       ElseIf sourceCol = 4 Then 
        Cell.Value = iOrder 
       ElseIf sourceCol = 5 Then 
        Cell.Value = iCourier 
       ElseIf sourceCol = 6 Then 
        Cell.Value = iWaybill 
       ElseIf sourceCol = 7 Then 
        Cell.Value = iSender 
       ElseIf sourceCol = 8 Then 
        Cell.Value = iPcs 
       ElseIf sourceCol = 9 Then 
        Cell.Value = iWeight 
       ElseIf sourceCol = 10 Then 
        Cell.Value = iRemark 
       End If 
      col = col + 1 
      End If 
     Next 
    Wend 
    End Function 

    Public Sub newParcel_Click() 
    Call selectFirstBlankCell 
    iDate = InputBox("Tast inn dato, format dd.mm.yyy") 
    iVessel = InputBox("Tast inn båtens navn") 
    iOrder = InputBox("Tast inn eventuell P.O.") 
    iCourier = InputBox("Tast inn courier") 
    iWaybill = InputBox("Tast inn waybillnummer") 
    iSender = InputBox("Tast inn avsender") 
    iPcs = InputBox("Tast inn antall kolli") 
    iWeight = InputBox("Tast inn vekt") 
    iRemark = InputBox("Tast inn eventuelle anmerkninger") 
    End Sub 
+0

Ben VBA sayfasına kodunuzu yapıştırılan ve ilk bakışta, bu Cell.Value = idate (veya diğer seçeneklerden biri) takılıyor. iDate henüz başlatılmamıştır, çünkü selectedFirstBlankCell'i çağırdınız. Başka problemler olabilir, ama karşılaştığım ilk şey bu. Niyetinizin ne olduğundan emin değilsiniz, henüz düzeltmek için bir yol önermek çok zor. –

+0

Bence Cell.Value = ... 'yerine' Selection.Value = ... 'kullanmak istediniz. Ama gerçekten [Seçimi kullanmaktan nasıl kaçınmalısınız] okumalısınız (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros). – Kyle

cevap

0

Hücre vba bir nesne değil İşte bana verir benim koddur. Bunun yerine aralıklı nesneleri kullanmalısınız. Örneğin, sayfa 1'deki A1 hücresinden bir değer seçmek isterseniz, bunu Çalışma Sayfaları ("sayfa1") gibi belirtmelisiniz. Aralık ("A1"). İki aralıklı nesneleri kullanarak, biri diğeri için bir hücre için farklı bir yaklaşım kullanabilirdiniz; A sütununda belirli hücrelerde döngü örneğin:

Dim lastrow As Integer 
Dim eachcell as range 
Dim total_range as range 

lastrow = Worksheets("sheet name").Columns("A").Find("", Cells(Rows.Count, "A")).Row 

set total_range = Worksheets("sheet name").Range("A1:A" & lastrow) 

for each eachcell in total_range 
    'do something 
next eachcell 
İlgili konular