2016-11-07 110 views
2

我正在创建一个宏以接收条目并将其放在第一条可用行上。这是迄今为止我所拥有的。它不起作用,但我想要做的是使用Range函数来使用宏选择列中的第一个可用行(使用SelectFirstEmptyCellColumn()宏)。我怎么做这个错误?谢谢!!Excel宏中列中的第一个可用单元格

Sub SelectFirstEmptyCellColumn() 
    Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select 
End Sub 
' 
Sub OUT() 
' 
' OUT Macro 
' 
' 
    Sheets("Interface").Select 
    Range("B2").Select 
    Selection.Cut 
    Sheets("Items out").Select 
    Range("SelectFirstEmptyCellColumn(B)").Select 
    ActiveSheet.Paste 
    Sheets("Interface").Select 
    Range("B3").Select 
    Selection.Cut 
    Sheets("Items out").Select 
    Range("SelectFirstEmptyCellColumn(A)").Select 
    ActiveSheet.Paste 
    Range("SelectFirstEmptyCellColumn(C)").Select 
    ActiveCell.Value = Now 
End Sub 

回答

0

你需要更新你的SelectFirstEmptyCellColumn与参数(例如列字母或数字,和SHEETNAME )

也避免使用.select,所以你的代码ca n为这样的事情(这只是一个例子)

Public cl As Range 
Sub GetFirstEmptyCellColumn(ShName$, col$) 
    Set cl = Sheets(ShName).Cells(Rows.Count, col).End(xlUp).Offset(1, 0) 
End Sub 

Sub OUT() 
    With Sheets("Interface") 
     GetFirstEmptyCellColumn "Items out", "B": cl.Value = .[B2].Value 
     GetFirstEmptyCellColumn "Items out", "A": cl.Value = .[B3].Value 
     GetFirstEmptyCellColumn "Items out", "C": cl.Value = Now 
     .[B2,B3].ClearContents 
    End With 
End Sub 

,也可以是这样的:

Sub InsertIntoFirstEmptyCellColumn(shSource$, clSource$, shDest$, col$) 
    Sheets(shDest).Cells(Rows.Count, col).End(xlUp).Offset(1, 0).Value = Sheets(shSource).Range(clSource).Value 
    Sheets(shSource).Range(clSource).ClearContents 
End Sub 

Sub OUT() 
    InsertIntoFirstEmptyCellColumn "Interface", "B2", "Items out", "B" 
    InsertIntoFirstEmptyCellColumn "Interface", "B3", "Items out", "A" 
    Sheets("Items out").Cells(Rows.Count, "C").End(xlUp).Offset(1, 0).Value = Now 
End Sub 

,但更好的办法(恕我直言)是一个function更换Sub SelectFirstEmptyCellColumn(),所以你代码可以看起来像这样:

Function GetFirstEmptyCellColumn(ShName$, col$) As Range 
    Set GetFirstEmptyCellColumn = Sheets(ShName).Cells(Rows.Count, col).End(xlUp).Offset(1, 0) 
End Function 

Sub OUT() 
    With Sheets("Interface") 
     GetFirstEmptyCellColumn("Items out", "B").Value = .[B2].Value 
     GetFirstEmptyCellColumn("Items out", "A").Value = .[B3].Value 
     GetFirstEmptyCellColumn("Items out", "C").Value = Now 
     .[B2,B3].ClearContents 
    End With 
End Sub 
0

尽量避免了。选择的使用这个

Sub SelectFirstEmptyCellColumn(col) 
    Cells(Rows.Count, col).End(xlUp).Offset(1, 0).Select 
End Sub 
' 
Sub OUT() 
' 
' OUT Macro 
' 
' 
    Sheets("Interface").Select 
    Range("B2").Select 
    Selection.Cut 
    Sheets("Items out").Select 
    SelectFirstEmptyCellColumn "b" 
    ActiveSheet.Paste 
    Sheets("Interface").Select 
    Range("B3").Select 
    Selection.Cut 
    Sheets("Items out").Select 
    SelectFirstEmptyCellColumn "a" 
    ActiveSheet.Paste 
    SelectFirstEmptyCellColumn "c" 
    ActiveCell.Value = Now 
End Sub 
+1

是的这工作!但是,“selectFirstEmptyCellColumn(col)”命令只在列A中选择了第一个单元格,因为它应该选择列A中的第一个单元,然后是B,然后是C。你知道如何解决这个问题吗?所以它把列A中的两个条目,而不是把它放在B和C –

+0

@CollinTodd使用'.select'方法是一种不好的做法 – Vasily

+0

@Vasily我应该如何选择我想要的单元格并更改工作表?有没有更好的办法?我对VBA相当陌生 –

0

替代的解决方案:

Sub tgr() 

    Dim wb As Workbook 
    Dim wsData As Worksheet 
    Dim wsDest As Worksheet 
    Dim lRow As Long 

    Set wb = ActiveWorkbook 
    Set wsData = wb.Sheets("Interface") 
    Set wsDest = wb.Sheets("Items out") 
    lRow = wsDest.Cells(wsDest.Rows.Count, "B").End(xlUp).Row + 1 

    wsData.Range("B2").Cut wsDest.Cells(lRow, "B") 
    wsData.Range("B3").Cut wsDest.Cells(lRow, "A") 
    wsDest.Cells(lRow, "C").Value = Now 

End Sub 
相关问题