Forms excelvba代码理解

Forms excelvba代码理解,forms,vba,excel,Forms,Vba,Excel,我正在尝试构建一个基于excel的输入表单,我在网上找到了一些东西,我正在尝试理解这些代码: 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") 这是我不懂的部分,有人能给

我正在尝试构建一个基于excel的输入表单,我在网上找到了一些东西,我正在尝试理解这些代码:

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
    .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


提前感谢:)


您的代码似乎从一个页面复制到另一个页面,将用户名添加到一个范围的顶部。
但是字符串变量
MyCopy
似乎没有初始化,因此我认为按原样运行此宏不会产生任何期望的结果(除非
Range
函数在使用空字符串调用时返回一些单元格?我不知道其规格)

我不太记得Excel VBA,但我认为:

单元格(.Rows.Count,“A”)
选择位于最后一行“A”列的单元格。
End(xlUp)
将所选内容移动到连续非空单元格范围的顶部(我想,就像在Excel中按
CTRL+UP

Offset(1,0)
将选择移动到底部的一个单元格。
返回该单元格的行号

因此,第一个代码块将A列中最后一个非空单元格区域的第二行的行号设置为变量
nextRow


您可以按照相同的推理来理解所有其他代码块的用途。我建议您在MSDN的VBA for Excel文档网站上搜索,以获取有关您尚未理解的每个函数含义的更多信息。

您的代码似乎从一个页面复制到另一个页面,将用户名添加到一个范围的顶部。
但是字符串变量
MyCopy
似乎没有初始化,因此我认为按原样运行此宏不会产生任何期望的结果(除非
Range
函数在使用空字符串调用时返回一些单元格?我不知道其规格)

我不太记得Excel VBA,但我认为:

单元格(.Rows.Count,“A”)
选择位于最后一行“A”列的单元格。
End(xlUp)
将所选内容移动到连续非空单元格范围的顶部(我想,就像在Excel中按
CTRL+UP

Offset(1,0)
将选择移动到底部的一个单元格。
返回该单元格的行号

因此,第一个代码块将A列中最后一个非空单元格区域的第二行的行号设置为变量
nextRow


您可以按照相同的推理来理解所有其他代码块的用途。我建议您搜索MSDN的VBA for Excel文档网站,以获取有关每个功能含义的更多信息。

我可以解释代码的作用,但我想提及的内容很少:)

A

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
这里,只有
ISHET
被声明为工作表,而不是
hs工作表
hs工作表
自动变为变体。正确的方法是

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
B

With Hsheet
     nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
End With
这段代码所做的是,它试图找到在列A中包含数据的最后一行,然后向下偏移一行以获得下一个空行,以便您可以对其进行写入

还提到了编写相同内容的另一种方法,因此上面的代码也可以编写为

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

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
这也很简单。代码将
用户名
存储在A列的下一个可用单元格中,然后将范围MyRng中的值存储在工作表
Isheet
的A列
Hsheet


HTH

我可以解释代码的作用,但我想提及的事情很少:)

A

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
这里,只有
ISHET
被声明为工作表,而不是
hs工作表
hs工作表
自动变为变体。正确的方法是

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
B

With Hsheet
     nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
End With
这段代码所做的是,它试图找到在列A中包含数据的最后一行,然后向下偏移一行以获得下一个空行,以便您可以对其进行写入

还提到了编写相同内容的另一种方法,因此上面的代码也可以编写为

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

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
这也很简单。代码将
用户名
存储在A列的下一个可用单元格中,然后将范围MyRng中的值存储在工作表
Isheet
的A列
Hsheet


HTH

代码的这一部分会找到下一行,您可以在其中添加新的data@Agustin梅里莱斯:我刚刚编辑了我的post@Siddharth劳特:你能再解释一下吗?当然。。我已经开始打字了。。这将是一篇很长的帖子,所以你必须对我有耐心:)@Nucleus也许你应该为你不理解的每个部分创建一个单独的问题?代码的这一部分会找到下一行,在那里你可以添加新的内容data@Agustin梅里莱斯:我刚刚编辑了我的post@Siddharth劳特:你能再解释一下吗?当然。。我已经开始打字了。。这将是一篇很长的帖子,所以你必须对我有耐心:)@Nucleus也许你应该为你不理解的每个部分单独提出一个问题?+1,非常彻底。尽管我想向OP指出,
application.UserName
只返回当前Excel应用程序中存储的
UserName
。。。而且不应该被认为是确定用户的一种确定方式,因为它可以随时更改。@SiddharthRout哇!谢谢我真的很感激@欢迎来到SO!请随意接受有帮助的答案(接受答案会得到徽章!)。在…上