小编use*_*261的帖子

If string的一个衬里不为null或为空

我通常在整个应用程序中出于各种原因使用这样的东西:

if (String.IsNullOrEmpty(strFoo))
{
     FooTextBox.Text = "0";
}
else
{
     FooTextBox.Text = strFoo;
}
Run Code Online (Sandbox Code Playgroud)

如果我要使用它很多,我将创建一个返回所需字符串的方法.例如:

public string NonBlankValueOf(string strTestString)
{
    if (String.IsNullOrEmpty(strTestString))
        return "0";
    else
        return strTestString;
}
Run Code Online (Sandbox Code Playgroud)

并使用它像:

FooTextBox.Text = NonBlankValueOf(strFoo);
Run Code Online (Sandbox Code Playgroud)

我总是想知道是否有一些东西是C#的一部分,它会为我做这件事.可以称之为的东西:

FooTextBox.Text = String.IsNullOrEmpty(strFoo,"0")
Run Code Online (Sandbox Code Playgroud)

第二个参数是返回值if String.IsNullOrEmpty(strFoo) == true

如果不是,有人有更好的方法吗?

c# if-statement isnullorempty

62
推荐指数
4
解决办法
15万
查看次数

为什么我在将一个范围分配给变量数组时遇到问题

我遇到了一些非常简单的代码问题.让我详细说明事实,看看是否有其他人可以复制这种行为.如果有人可以复制,我想解释它为什么会发生.

因此,让我从一个非常简单的代码行开始:

Dim arr() As Variant
arr = Range("A1:A10")
Run Code Online (Sandbox Code Playgroud)

这按预期进行,arr赋值为A1:A10

现在为什么以下代码行不起作用?

Dim arr() As Variant
arr = WorkSheets("Sheet1").Range("A1:A10")
Run Code Online (Sandbox Code Playgroud)

我得到一个运行时错误'13'类型不匹配,即使成功分配给数组相同的范围,只是没有工作表值.

Dim arr As Variant
arr = Worksheets("Sheet1").Range("A1:A10")
Run Code Online (Sandbox Code Playgroud)

Dim arr() As Variant
arr = Application.Transpose(Application.Transpose(Worksheets("Sheet1").Range("A1:A10")))
Run Code Online (Sandbox Code Playgroud)

工作

在你回答之前,请让我给你一些更多的事实.

Dim arr() As Variant
arr = Worksheets(1).Range("A1:A10")
Run Code Online (Sandbox Code Playgroud)

不起作用

Sheets代替Worksheets所有人也给出了相同的错误.

通过使用下面Range("A1:A10").Worksheet.Name的工作代码确实它与活动引用表相同,它确实Sheet1在输出中说明了.

没有其他工作簿是打开的,所以它也不能引用另一个工作簿.

现在这最后一点代码只会增加我的困惑,因为它完全有效!

Dim arr() As Variant
Dim SampleRange As Range

Set SampleRange = Worksheets("Sheet1").Range("A1:A10")
arr = SampleRange
Run Code Online (Sandbox Code Playgroud)

因此,当我将其分配给范围变量时,使用相同方式在同一张纸上定义的相同方法现在可以正常工作.并使用它!正如预期的那样WorkSheets,Sheets无论我如何定义工作表,它都适用于和函数(我可以使用索引或工作表的名称,所有工作正常) …

arrays excel vba excel-vba

26
推荐指数
1
解决办法
2万
查看次数

为什么我在VBA比赛中收到错误2042?

我有A栏:

+--+--------+
|  |  A     |
+--+--------+
| 1|123456  |
|--+--------+
| 2|Order_No|
|--+--------+
| 3|    7   |
+--+--------+
Run Code Online (Sandbox Code Playgroud)

现在,如果我输入:

=Match(7,A1:A5,0)
Run Code Online (Sandbox Code Playgroud)

进入我得到的纸张上的一个单元格

3
Run Code Online (Sandbox Code Playgroud)

结果是.(这是期望的)

但是当我进入这一行时:

Dim CurrentShipment As Integer
CurrentShipment = 7
CurrentRow = Application.Match(CurrentShipment, Range("A1:A5"), 0)
Run Code Online (Sandbox Code Playgroud)

CurrentRow获取值"Error 2042"

我的第一直觉是确保值7实际上在范围内,而且确实如此.

我的下一个可能是匹配功能需要一个字符串所以我试过

Dim CurrentShipment As Integer
CurrentShipment = 7
CurrentRow = Application.Match(Cstr(CurrentShipment), Range("A1:A5"), 0)
Run Code Online (Sandbox Code Playgroud)

无济于事.

excel vba excel-2007 excel-vba

14
推荐指数
2
解决办法
8万
查看次数

按价值乘以整个范围?

所以我能想到的最好的方法是在大范围内(大约450k行)实现这个目的是使用以下Sue-do代码:

Range("A1").Copy ' A1 Contains Value I want to multiply column by
Range("MyTable[FooColumn]").PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply
Run Code Online (Sandbox Code Playgroud)

现在这样可行,但事实上我必须复制并粘贴该值似乎是多余的,因为值永远不会改变.

For Each c In Range("MyTable[MyColumnHeader]")
    If IsNumeric(c) And Not c = "" Then
        c.Value = c.Value * 453.592 ' The value that is in A1 from previos sample
    End If
Next
Run Code Online (Sandbox Code Playgroud)

这有效,但速度较慢.因为它必须循环每个细胞.

我也尝试过:

With Range("MyTable[MyColumnHeader]")
    .Value = .Value * 453.592
End With
Run Code Online (Sandbox Code Playgroud)

但是如果列中有多个值,则收到运行时错误类型不匹配错误.

我考虑插入一个列并使用"=R-1C * 453.592"Then 的formulaR1C1 .Value = .Value然后移动列并覆盖,但看起来很笨重,我认为也比粘贴倍增慢.

那么,有没有人有更好的方法来完成这项任务?

excel vba excel-vba

5
推荐指数
1
解决办法
4万
查看次数

使用VBA获取在VBA中使用的唯一值?

我目前会使用Range,Cells等许多不同方式使用相同的基本原理.

Range("A1", Range("A1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=Range("IV1"), Unique:=True

Dim myArr as Variant 
myArr = Range("IV1", Range("IV1").End(xlDown))
Columns("IV").Delete
Run Code Online (Sandbox Code Playgroud)

有没有办法直接将这些唯一值加载到VBA中的任何类型的对象而无需复制到另一个位置?

arrays excel vba unique excel-vba

4
推荐指数
1
解决办法
2万
查看次数

为什么-1匹配类型匹配返回N/A?

假设我有这个公式

=MATCH(16,{5;10;15;20;25},-1)
Run Code Online (Sandbox Code Playgroud)

为什么它返回N/A?我希望它能回归4.

比...更棒

但更令我困惑的是,当我将它改为小于匹配(1)时,它按预期工作.

少于

而且即使我知道它会匹配错误的事情,我仍然认为这将是很好,包括我尝试了所有值作为文本和它未返回N/A,虽然它也返回1不管我代替16

文字匹配

excel excel-2007 excel-formula

1
推荐指数
1
解决办法
5121
查看次数