Excel 单元格值未显示在VBA中

Excel 单元格值未显示在VBA中,excel,vba,Excel,Vba,我正在尝试使用vba读取excel中的单元格值。当我试图阅读它时,我总是得到空值 下面是代码片段 Private Sub CommandButton1_Click() Dim i As Long Dim j As Long i = 3 j = 4 Do While (Len(Trim(Sheet1.Cells(i, 16))) <> 0) Sheet2.Cells(4, j) = Sheet1.Cells(i, 16) j = j + 1 i = i +

我正在尝试使用vba读取excel中的单元格值。当我试图阅读它时,我总是得到空值

下面是代码片段

Private Sub CommandButton1_Click()
Dim i As Long
Dim j As Long
i = 3
j = 4

Do While (Len(Trim(Sheet1.Cells(i, 16))) <> 0)

    Sheet2.Cells(4, j) = Sheet1.Cells(i, 16)

    j = j + 1
    i = i + 1

Loop

End Sub
Private子命令按钮1\u单击()
我想我会坚持多久
Dim j尽可能长
i=3
j=4
Do While(透镜(修剪(第1张图,单元格(i,16)))0)
表2.单元格(4,j)=表1.单元格(i,16)
j=j+1
i=i+1
环
端接头
但是dowhile总是为NULL并退出循环。sheet1中的单元格具有值

请帮帮我。

试试看

Do While(Not IsEmpty(Sheet1.Cells(i, 16))
或者更确切地说

Do Until IsEmpty(Sheet1.Cells(i, 16))

我相信您知道,但请记住IsNull和IsEmpty Excel帮助之间的以下区别提醒我们:

IsNull-->返回一个布尔值,该值指示表达式是否包含无效数据(Null)。 IsEmpty-->返回一个布尔值,指示变量是否已初始化

好的,这么说,我已经解决了你不能读取数值的问题。我将您正在查看的范围放入数组变量中。现在,循环中的msgbox将为您返回一个值

    Sub x()

Dim Arr As Variant
    Arr = Worksheets("Sheet1").Range(Cells(1, 16), Cells(1000, 16)).Value     'You can modify the 1000 by finding the last line, eg - Range.End(xldown).Row

Dim i
    i = 1

Dim CurrentPos
    CurrentPos = Arr(i, 1)

Do Until IsEmpty(Arr(i, 1)) Or IsNull(Arr(i, 1))

    MsgBox CurrentPos

Loop

End Sub

你们怎么想?

我想这就是你们想要做的:

Private Sub CommandButton1_Click()

    Sheet1.Range("P3", Sheet1.Cells(Rows.Count, "P").End(xlUp)).Copy
    Sheet2.Range("D4").PasteSpecial xlPasteValues, Transpose:=True
    Application.CutCopyMode = False

End Sub

尝试将
Null
更改为
vbNull
…此代码有很多问题。你甚至不能执行它;首先要做的是把它写好。VBA中Null最典型的方法是将Nothing(或vbNull)与“is”一起使用。因此,您的代码最好是:Sheet1.Cells(i,16)不是空的。Nothing/null用于非实例化对象,单元格总是实例化的,因此从不为null,可以为空/空(string value=“”),因此您的代码没有任何意义(最好使用KekuSemau建议)。这个问题得到了+1?!好。。。除非在极端情况下,否则我本人不是一个不合格的投票人,但这肯定值得-1。同意@varocabas使用
Nothing
另一种方式,这是我最喜欢的
如果Len(Trim(Sheet1.Cells(I,16.Value))0,那么
这将忽略错误地按空格cell@SiddharthRout我也很喜欢Len(Trim(string)),实际上,这就是我在.NET中经常使用的(逻辑上是经过修改的版本)。在VBA中,我倾向于使用IsEmpty,这对我来说一直都很好,但在与.NET和Excel(通过互操作)一起使用IsEmpty时,我得到了一些不太好的结果;因此,即使在VBA中,我也开始对IsEmpty感到不是100%舒服。对于
IsEmpty
,还有一件事:当我
粘贴值
以将公式转换为固定值时,某些单元格可以为空,但
IsEmpty
为假(使用ATL光标键将它们视为非空)。然后可能
=”
有时会比
i空的更好。谢谢KazJaw和Keku。但是当我调试它时,即使它在单元格中也不会显示任何值。这就像它根本不识别sheet1一样。我试图用msgbox显示单元格的值。但它返回一个空白..:(我不明白,
即使在单元格中也不显示值。
。您能再解释一遍吗?请尝试
Msgbox工作表(“工作表名称”)。单元格(y,x)
。请注意,行排在第一位,然后是
单元格中的列
@user2667222,
Sheet1
是工作表的代码名,通常与工作表名称相同。但您可以尝试将其更改为
工作表(“Sheet1”)…
以查看这是否会改变任何内容。嗨..我在运行此代码时遇到一个运行时错误..下标超出范围…你是正确的。我更改了代码。Arr()设置错误,因为它是一个一维数组,而不是一个有16列的数组。糟糕的是,上面的代码现在已修复。它查看了工作表的P列(我相信您正在使用的)并在整个过程中检查值,直到出现IsNull或IsEmpty。