2017-02-11 61 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