2017-08-06 69 views
0

我對編碼和vba相當陌生,而且我很難嘗試將值分配給下一個空單元格,而沒有在宏結束之前覆蓋第一個值。如何在宏未結束前將值賦給下一個空單元格?

我有一個帶有48個複選框的用戶窗體(標記爲複選框49-106)。根據用戶選擇的複選框,我希望與該複選框關聯的值打印在工作表故障模式的列中。代碼將值打印到正確的列,但是如果勾選了多個複選框,則僅顯示最後一個複選框的值。

Dim wsDataTable As Worksheet 
Dim wsFM As Worksheet 
Dim text1 As String 
text1 = TextBox1.Value 
Set wsDataTable = Worksheets("Data Table") 
Set wsFM = Worksheets("Failure Modes") 

iRow = wsDataTable.Cells.Find(What:=text1, SearchOrder:=xlRows, _ 
SearchDirection:=xlPrevious, LookIn:=xlValues).Row 

hRow = Worksheets("Failure Modes").Cells(Rows.Count, 1).End(xlUp).Row 

If CheckBox49.Value = True Then 
    wsDataTable.Cells(iRow, 59).Value = "A1 " 
    wsFM.Cells(hRow, 3).End(xlUp).Offset(1, 0) = "A1 " 
    Else 
    wsDataTable.Cells(iRow, 59).Value = "" 
    End If 
If CheckBox50.Value = True Then 
    wsDataTable.Cells(iRow, 60).Value = "B1 " 
    wsFM.Cells(hRow, 3).End(xlUp).Offset(1, 0) = "B1 " 
    Else 
    wsDataTable.Cells(iRow, 60).Value = "" 
    End If 
If CheckBox51.Value = True Then 
    wsDataTable.Cells(iRow, 61).Value = "C1 " 
    wsFM.Cells(hRow, 3).End(xlUp).Offset(1, 0) = "C1 " 
    Else 
    wsDataTable.Cells(iRow, 61).Value = "" 
    End If 
If CheckBox52.Value = True Then 
    wsDataTable.Cells(iRow, 62).Value = "D1 " 
    wsFM.Cells(hRow, 3).End(xlUp).Offset(1, 0) = "D1 " 
    Else 
    wsDataTable.Cells(iRow, 62).Value = "" 
    End If 

如果複選框49被選中,在工作表中故障模式列3將顯示:

A1 

如果複選框49,50,51,52被選中,在工作表中故障模式列3將顯示:

D1 

我想如果當複選框49,50,51,52被選中,在工作表中故障模式列3將顯示:

A1 
B1 
C1 
D1 

我最初認爲在這裏使用循環會有所幫助,但由於我希望該值也存儲在工作表數據表中,所以我很難執行該循環。

任何幫助將不勝感激!

回答

1

的問題是,因爲你在開始計算hRow一次,你把寫在同一行:

wsFM.Cells(hRow, 3).End(xlUp).Offset(1, 0) 

要解決這個問題,你需要在每次你寫東西的時候遞增hRow工作表「失敗模式」。也就是說,在每個成功的IfElse報表之前。這是第一個,爲所有情況做。

If CheckBox49.Value = True Then 
    wsDataTable.Cells(iRow, 59).Value = "A1 " 
    wsFM.Cells(hRow, 3).End(xlUp).Offset(1, 0) = "A1 " 
    hRow = hRow + 1 ' <------------------------ Add this after each writing to wsFM 
Else 
    wsDataTable.Cells(iRow, 59).Value = "" 
End If 

這將解決您當前的問題,除此之外,我認爲您應該想出一些方法來簡化您的代碼。

+0

謝謝!代碼現在可用。我會盡量簡化它,但我認爲我需要更多練習。再次感謝你!!! – ducky

+0

@ducky不客氣。當它解決你的問題時,請[標記答案](https://stackoverflow.com/help/someone-answers)(將複選標記爲綠色)。謝謝。 –

相關問題