2013-01-01 67 views
1

我試圖建立一個基於Excel輸入表格,我在網上找到的東西,我想明白這些代碼:Excel的VBA代碼的理解

Dim Hsheet,Isheet As Worksheet 
Dim NextRow, oCol As Long 
Dim MyRng, MyCell As Range 
Dim MyCopy, ClearCells As String 

Set Hsheet = Worksheet("InputForm") 
Set ISheet = Worksheet("Database") 

這是我不明白的部分,有人可以向我解釋一下嗎?


With Hsheet 
    nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row 
End With 

With Isheet 
    Set myRng = .Range(MyCopy) 

    If Application.CountA(myRng) <> myRng.Cells.Count Then 
     MsgBox "Please fill in all the cells!" 
     Exit Sub 
    End If 
End With 

而也這部分,可有人向我解釋好嗎?

With Hsheet 
    .Cells(nextRow, "a").Value = Application.UserName 
    oCol = 1 
    For Each myCell In MyRng.Cells 
     Hsheet.Cells(NextRow, oCol).Value = myCell.Value 
     oCol = oCol + 1 
    Next myCell 
End With 

感謝提前:)

With Isheet 
    On Error Resume Next 
    With .Range(ClearCells).Cells.SpecialCells(xlCellTypeConstants) 
      .ClearContents 
      Application.Goto .Cells(1) ', Scroll:=True 
    End With 
    On Error GoTo 0 
End With 
+1

什麼是你的問題的柱A存儲在表Isheet從範圍MyRng值是多少? –

+0

那部分代碼找到了你可以添加新數據的下一行 –

+0

@Austin Meriles:我剛剛編輯了我的帖子 – Nucleus

回答

0

你的代碼似乎從一個表到另一個做一些拷貝,在一系列的頂部添加的用戶名。
但是字符串變量MyCopy似乎並沒有被初始化,所以我不認爲運行此宏如會產生任何期望的結果(除非Range功能時用一個空字符串稱爲返回一些細胞?我不知道其規格)。

我不記得了Excel的VBA完美,但我認爲:

Cells(.Rows.Count, "A")選擇位於最後一排,列「A」的細胞。
End(xlUp)選擇移動到連續的非空單元格範圍的頂部(如在Excel按壓CTRL + UP,我想)。
Offset(1, 0)選擇移動到一個小區至底部。 返回該單元格的行號。

因此,您的第一個代碼塊將列A中非空單元格的最後一個範圍的第二行的行號設置爲變量nextRow

您可以按照同樣的道理,瞭解其他所有的代碼塊的目的。我建議您搜索MSDN的VBA for Excel文檔網站,以獲取有關您不瞭解的每個功能的含義的更多信息。

+0

以下是End屬性的文檔:http://msdn.microsoft.com/en-us/library/office/aa214585(v=office.11​​).aspx – wil

4

我可以解釋的代碼做什麼,但有,我想提一提幾件事情:)

一個

Dim Hsheet,Isheet As Worksheet 
Dim NextRow, oCol As Long 
Dim MyRng, MyCell As Range 
Dim MyCopy, ClearCells As String 

這不是聲明變量/對象的正確方法例如,如果你考慮到這行,是

Dim Hsheet,Isheet As Worksheet 

在這裏,只有Isheet已被宣佈爲工作,而不是Hsheet。該Hsheet自動成爲變種。正確的做法是

Dim Hsheet As Worksheet, Isheet As Worksheet 
Dim NextRow As Long, oCol As Long 
Dim MyRng As Range, MyCell As Range 
Dim MyCopy As String, ClearCells As String 

With Hsheet 
    nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row 
End With 

這段代碼的作用是它試圖找到最後一排,其在柱A具有數據,然後偏移一個排下去把下一個空這樣你就可以寫信給它了。

另一種方式來寫同樣的事情提到here所以上面的代碼也可以寫成

With Hsheet 
    nextRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1 
End With 

Ç

With Isheet 
    Set myRng = .Range(MyCopy) 

    If Application.CountA(myRng) <> myRng.Cells.Count Then 
     MsgBox "Please fill in all the cells!" 
     Exit Sub 
    End If 
End With 

我相信MyCopy應該舉行一些值我在你的代碼中看不到它。假設它擁有一個有效的單元格地址,代碼試圖做的是通過比較單元格數量和填滿的單元格數量來確保填滿所有單元格。

d

With Hsheet 
    .Cells(NextRow, "a").Value = Application.UserName 
    oCol = 1 
    For Each myCell In MyRng.Cells 
     Hsheet.Cells(NextRow, oCol).Value = myCell.Value 
     oCol = oCol + 1 
    Next myCell 
End With 

這也是非常簡單的。該代碼存儲在柱A下一個可用單元格中UserName,然後在表Hsheet

HTH

+2

+1,非常全面。儘管我想指出OP,Applcation.UserName只返回存儲在當前Excel應用程序中的UserName,並且不應該被認爲是確定用戶的確定方式,因爲它可以在任何時候。 –

+0

@DanielCook:確實:) :) –

+0

@SiddharthRout哇!謝謝!對此,我真的非常感激! – Nucleus