2017-03-21 56 views
5

Próbuję utworzyć makro programu Excel, które prosi o dzień, a następnie wstawia je do następnej otwartej komórki. tutaj jest kod, którego próbuję użyć.Utwórz makro programu Excel, które prosi o dzień, a następnie wstaw go do następnej otwartej komórki.

Sub Button7_Click() 
    Dim AddName As String 
    AddName = InputBox("Date: Month/Year", "Add Date", "01/00") 
    Sheets("Sheet2").Select 
    Selection.End(xlUp).Select 
    ActiveCell.Offset(1, 0).Range("A1").Select 
    Range("A1").Value = AddName 
End Sub 

jest oddanie dzień wpisuję się w komórce A1 bez względu na to, co jest w nim, a następnie wybierając następną otwartą komórkę w wierszu A.

Czuję odpowiedź jest tak prosta, ale ja nie mogę tego rozgryźć!

Odpowiedz

4

Zobacz How to avoid using Select in Excel VBA macros.

Sub Button7_Click() 
    Dim AddName As String 
    AddName = InputBox("Date: Month/Year", "Add Date", "01/00") 
    With Worksheets("Sheet2") 
     .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0) = AddName 
    End With 
End Sub 

Oryginalna problemem było to, że po wybraniu komórki przesunięcie w dół o jeden wiersz z ostatniego używane komórki w kolumnie A, że nie korzystać z tego wyboru, aby zapisać wartość; po prostu zapisałem go na A1. Ostatni wiersz kodu można zmienić na Selection = AddName, ale lepiej unikać wybierania i aktywowania, gdy tylko jest to możliwe.

Możesz zajrzeć do Application.InputBox. Model Excel Application.InputBox Method jest nieco inny niż standard VBA InputBox function, ponieważ umożliwia określenie typu zwrotu.

4

Oto kolejny:

Sub Button7_Click() 
    Dim AddName As String 
    AddName = InputBox("Date: Month/Year", "Add Date", "01/00") 
    Sheets("Sheet2").Select 
    Range("A" & ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row + 1) = AddName 
End Sub 
+1

Kolejny bonus do korzystania ActiveSheet.UsedRange.SpecialCells (xlLastCell) .Row jest to wymusza Excel, aby oczyścić wszystkie stare lokalizacje pamięci dla komórek, które zostały usunięte –

+0

Dzięki! zadziałało! –