2017-02-11 64 views
0

我有下面的代码工作正常,但是当我关闭文件时出现错误代码。 问题在于我想要在C24之后搜索列“C”中的下一个空单元的逻辑。关闭文件时出错

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 

至于现在关闭文件时错误是: “对象变量或With块变量未设置”

在行:

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

正如你所看到的,我已经试过也使用该选项之前:

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

这也行得通,但有误差当关闭文件时: “无法获得Range类的SpecialCells属性”

任何想法如何做到这一点?

问候,

布赖恩

+2

你收什么文件?每个循环的 – user3598756

+0

工作正常。您需要用Worksheets(“Sheet1”)和Worksheets(“Sheet2”)替换'sheet1'和'sheet2',或者在开头定义它们。 –

+0

错误是当我关闭具有此代码的excel文件时。现在我已经将sheet1中的代码更改为Worksheet(“Sheet1”),但当文档关闭时仍然有相同的错误。初始代码已更新。错误:“对象变量或块变量未设置” – Brian

回答

0
  • 更改工作表Sheet1工作表来( “工作表Sheet1”) - 在顶部组合框的项目仍显示工作表Sheet1
  • Dim ws1 as worksheet因为你目前没有它定义。
  • Dim nextfree as long因为它是一个数字
  • 另一件事。在底改变您的代码:

    昏暗TotalHT作为变型,TVA作为变型,网络为Variant

    工作表( “Feuil1”)细胞(NextFree + 1,8).Formula =“= SUM(。 H25:H” & NextFree & “)” TotalHT =工作表( “Feuil1”。)将细胞(NextFree + 1,8)。价值

    工作表( “Feuil1”)细胞(NextFree + 2,8)。公式=“= H”& NextFree + 1 &“* 0.2”“” TVA = Worksheets(“Feuil1”)。Cells(NextFree + 2,8).Value

    工作表( “Feuil1”)。将细胞(NextFree + 3,8).Formula = “= H” & NextFree + 1 & “+ H” & 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