2017-02-11 3 views
0

У меня есть код, который работает нормально, но когда я закрываю файл, у меня есть код ошибки. Проблема в логике, где я хочу искать следующую пустую ячейку в столбце «C» после C24.Ошибка при закрытии файла

Private Sub ComboBox21_Change() 
Dim NextFree As String 
Dim Comboindex As Integer 
Dim Combovalue As String 

Comboindex = Sheet1.ComboBox21.ListIndex + 1 
Combovalue = Sheet1.ComboBox21.Value 

'NextFree = Range("C24:C" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row 

Dim ws As Worksheet 
Set ws = ActiveSheet 
For Each cell In ws.Range("C24:C100") 
    If IsEmpty(cell) = True Then 
     NextFree = cell.Row 
       Exit For 
    End If 
Next cell 

If NextFree > 25 Then 
Set ws1 = ThisWorkbook.Sheets("Feuil1") 
With ws1 
    Set Rng = .Rows(NextFree - 1) 
    Rng.Copy 
    Rng.Offset(1).Insert Shift:=xlDown 
    Application.CutCopyMode = False 
    .Range("C" & NextFree & ":H" & NextFree).ClearContents 
End With 
End If 

Worksheets("Feuil1").Cells(NextFree, 3).Value = Worksheets("Feuil2").Cells(Comboindex, 1).Value 
Worksheets("Feuil1").Cells(NextFree, 5).Value = Worksheets("Feuil2").Cells(Comboindex, 2).Value 
Worksheets("Feuil1").Cells(NextFree, 6).Value = Worksheets("Feuil2").Cells(Comboindex, 3).Value 
Worksheets("Feuil1").Cells(NextFree, 8).Value = "=+F" & NextFree & "-(G" & NextFree & "*F" & NextFree & ")" 

TotalHTF = "=SUM(H25:H" & NextFree & ")" 
Worksheets("Feuil1").Cells(NextFree + 1, 8).Value = TotalHTF 
TotalHT = Worksheets("Feuil1").Cells(NextFree + 1, 8).Value 

TVAF = "=H" & NextFree + 1 & "*0.2" 
Worksheets("Feuil1").Cells(NextFree + 2, 8).Value = TVAF 
TVA = Worksheets("Feuil1").Cells(NextFree + 2, 8).Value 

NetF = "=H" & NextFree + 1 & "+H" & NextFree + 2 
Worksheets("Feuil1").Cells(NextFree + 3, 8).Value = NetF 
Net = Worksheets("Feuil1").Cells(NextFree + 3, 8).Value 

End Sub 

На данный момент ошибка при закрытии файла является: «Переменная объекта или блока переменной не установлено»

В строке:

For Each cell In ws.Range("C24:C100") 

Как вы можете видеть, я попытался также перед использованием опциона:

'NextFree = Range("C24:C" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row 

Это также сработало, но было ниже ошибки при закрытии файла: «Невозможно получить свойство SpecialCells класса Range»

Любые идеи, как это сделать?

С уважением,

Brian

+2

какой файл вы закрываете? – user3598756

+0

для каждого цикла работает отлично. Вам нужно заменить 'sheet1' и' sheet2' рабочими листами («Sheet1») и рабочими листами («Sheet2») или определить их в начале. –

+0

Ошибка при закрытии файла excel с этим кодом. Теперь я изменил код с листа1 на Рабочий лист («Лист1»), но у меня все еще такая же ошибка, когда документ близок. Исправлен исходный код. Ошибка: «Объектная переменная или с переменной блока не установлена» – Brian

ответ

0
  • Изменить sheet1 Рабочий лист ("Лист1") - предметы ComboBox на вершине до сих пор показывают sheet1
  • Dim ws1 as worksheet, как вы в настоящее время не имеют это определено.
  • Dim nextfree as long как есть
  • Ещё одна вещь. Измените код на дно, чтобы:

    Dim TotalHT как вариант, TVA как вариант, Net As Variant

    Таблицах ("Feuil1") Cells (NextFree + 1, 8) .Formula = «= SUM (. H25: Н»& NextFree & ")" TotalHT = Worksheets ("Feuil1".) Клетка (NextFree + 1, 8) .Value

    Таблиц ("Feuil1") Клетка (NextFree + 2, 8).. Формула = "= H" & NextFree + 1 & "* 0,2" "" TVA = Рабочие листы ("Feuil1"). Ячейки (NextFree + 2, 8) .Value

    листы ("Feuil1"). Клетки (NextFree + 3, 8) .Formula = "= Н" & NextFree + 1 & "+ Н" & NextFree + 2 = Чистый листы ("Feuil1"). Клетки (NextFree + 3, 8) .Value

Попробуйте полный код ниже:

Private Sub ComboBox21_Change() 
Dim Comboindex As long, NextFree As long 
Dim Combovalue As String 
Dim TotalHT As Variant, TVA As Variant, Net As Variant 
Dim ws As Worksheet, ws1 As Worksheet 

Comboindex = Worksheets("Feuil1").ComboBox21.ListIndex + 1 
Combovalue = Worksheets("Feuil1").ComboBox21.Value 

'NextFree = Range("C24:C" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row 

Set ws = ActiveSheet 
For Each cell In ws.Range("C24:C100") 
    If IsEmpty(cell) = True Then 
     NextFree = cell.Row 
       Exit For 
    End If 
Next cell 

If NextFree > 25 Then 
Set ws1 = ThisWorkbook.Sheets("Feuil1") 
    With ws1 
     Set Rng = .Rows(NextFree - 1) 
     Rng.Copy 
     Rng.Offset(1).Insert Shift:=xlDown 
     Application.CutCopyMode = False 
     .Range("C" & NextFree & ":H" & NextFree).ClearContents 
    End With 
End If 

Worksheets("Feuil1").Cells(NextFree, 3).Value = Worksheets("Feuil2").Cells(Comboindex, 1).Value 
Worksheets("Feuil1").Cells(NextFree, 5).Value = Worksheets("Feuil2").Cells(Comboindex, 2).Value 
Worksheets("Feuil1").Cells(NextFree, 6).Value = Worksheets("Feuil2").Cells(Comboindex, 3).Value 
Worksheets("Feuil1").Cells(NextFree, 8).Formula = "=+F" & NextFree & "-(G" & NextFree & "*F" & NextFree & ")" 

Worksheets("Feuil1").Cells(NextFree + 1, 8).Formula = "=SUM(H25:H" & NextFree & ")" 
TotalHT = Worksheets("Feuil1").Cells(NextFree + 1, 8).Value 

Worksheets("Feuil1").Cells(NextFree + 2, 8).Formula = "=H" & NextFree + 1 & "*0.2""" 
TVA = Worksheets("Feuil1").Cells(NextFree + 2, 8).Value 

Worksheets("Feuil1").Cells(NextFree + 3, 8).Formula = "=H" & NextFree + 1 & "+H" & NextFree + 2 
Net = Worksheets("Feuil1").Cells(NextFree + 3, 8).Value 

End Sub 
Смежные вопросы